]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ext4: Keep pages with journalled data dirty
authorJan Kara <jack@suse.cz>
Wed, 29 Mar 2023 15:49:34 +0000 (17:49 +0200)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 14 Apr 2023 23:44:00 +0000 (19:44 -0400)
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: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230329154950.19720-3-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c
fs/ext4/page-io.c

index c5de0c04204cbe3a525ff788291a19d9ed11a042..473226783d003a436630dd320a1c4e918b462c8d 100644 (file)
@@ -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 &&
index 8fe1875b0a420a5e3c851f40ed3e56875f2bfb4f..2e5e94219693b11b3a6baa4524a76778e557549e 100644 (file)
@@ -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;