Commit 265e72ef authored by Jan Kara's avatar Jan Kara Committed by Theodore Ts'o

ext4: Keep pages with journalled data dirty

Currently we clear page dirty bit when we checkpoint some buffers from a
page with journalled data or when we perform delayed dirtying of a page
in ext4_writepages(). In a quest to simplify handling of journalled data
we want to keep page dirty as long as it has either buffers to
checkpoint or journalled dirty data. So make sure to keep page dirty in
ext4_writepages() if it still has journalled data attached to it.
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230329154950.19720-3-jack@suse.czSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent d84c9ebd
......@@ -2393,7 +2393,6 @@ static int mpage_journal_page_buffers(handle_t *handle,
int len;
ClearPageChecked(page);
clear_page_dirty_for_io(page);
mpd->wbc->nr_to_write--;
if (page->index == size >> PAGE_SHIFT &&
......
......@@ -479,9 +479,11 @@ int ext4_bio_write_folio(struct ext4_io_submit *io, struct folio *folio,
* to redirty the folio and keep TOWRITE tag so that
* racing WB_SYNC_ALL writeback does not skip the folio.
* This happens e.g. when doing writeout for
* transaction commit.
* transaction commit or when journalled data is not
* yet committed.
*/
if (buffer_dirty(bh)) {
if (buffer_dirty(bh) ||
(buffer_jbd(bh) && buffer_jbddirty(bh))) {
if (!folio_test_dirty(folio))
folio_redirty_for_writepage(wbc, folio);
keep_towrite = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment