ext4: Use nr_to_write directly in mpage_prepare_extent_to_map()
authorJan Kara <jack@suse.cz>
Tue, 28 Feb 2023 05:13:14 +0000 (00:13 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 23 Mar 2023 14:06:07 +0000 (10:06 -0400)
When looking up extent of pages to map in mpage_prepare_extent_to_map()
we count how many pages we still need to find in a copy of
wbc->nr_to_write counter. With more complex page handling for
data=journal mode, it will be easier to use wbc->nr_to_write directly so
that we don't forget to carry over changes back to nr_to_write counter.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Link: https://lore.kernel.org/r/20230228051319.4085470-3-tytso@mit.edu
fs/ext4/inode.c

index d27ef74..ff913d0 100644 (file)
@@ -2580,7 +2580,6 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
        struct address_space *mapping = mpd->inode->i_mapping;
        struct folio_batch fbatch;
        unsigned int nr_folios;
-       long left = mpd->wbc->nr_to_write;
        pgoff_t index = mpd->first_page;
        pgoff_t end = mpd->last_page;
        xa_mark_t tag;
@@ -2613,7 +2612,9 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
                         * newly appeared dirty pages, but have not synced all
                         * of the old dirty pages.
                         */
-                       if (mpd->wbc->sync_mode == WB_SYNC_NONE && left <= 0)
+                       if (mpd->wbc->sync_mode == WB_SYNC_NONE &&
+                           mpd->wbc->nr_to_write <=
+                           mpd->map.m_len >> (PAGE_SHIFT - blkbits))
                                goto out;
 
                        /* If we can't merge this page, we are done. */
@@ -2682,7 +2683,6 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
                                        goto out;
                                err = 0;
                        }
-                       left -= folio_nr_pages(folio);
                }
                folio_batch_release(&fbatch);
                cond_resched();