diff options
author | 2025-05-12 14:33:17 +0800 | |
---|---|---|
committer | 2025-05-20 10:31:12 -0400 | |
commit | cd9f76de6ae9a5a0ca6201b1f06cf116a6a3e3a2 (patch) | |
tree | e8deb1b6776fed4b2fb34b1f1878190ab5a30c64 | |
parent | ext4: correct the journal credits calculations of allocating blocks (diff) | |
download | wireguard-linux-cd9f76de6ae9a5a0ca6201b1f06cf116a6a3e3a2.tar.xz wireguard-linux-cd9f76de6ae9a5a0ca6201b1f06cf116a6a3e3a2.zip |
ext4: make the writeback path support large folios
In mpage_map_and_submit_buffers(), the 'lblk' is now aligned to
PAGE_SIZE. Convert it to be aligned to folio size. Additionally, modify
the wbc->nr_to_write update to reduce the number of pages in a single
folio, ensuring that the entire writeback path can support large folios.
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20250512063319.3539411-7-yi.zhang@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | fs/ext4/inode.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 18651f39a80b..ed88e5844f46 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -1983,7 +1983,7 @@ static int mpage_submit_folio(struct mpage_da_data *mpd, struct folio *folio) len = size & (len - 1); err = ext4_bio_write_folio(&mpd->io_submit, folio, len); if (!err) - mpd->wbc->nr_to_write--; + mpd->wbc->nr_to_write -= folio_nr_pages(folio); return err; } @@ -2206,7 +2206,6 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd) start = mpd->map.m_lblk >> bpp_bits; end = (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits; - lblk = start << bpp_bits; pblock = mpd->map.m_pblk; folio_batch_init(&fbatch); @@ -2217,6 +2216,7 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd) for (i = 0; i < nr; i++) { struct folio *folio = fbatch.folios[i]; + lblk = folio->index << bpp_bits; err = mpage_process_folio(mpd, folio, &lblk, &pblock, &map_bh); /* @@ -2442,7 +2442,7 @@ static int mpage_journal_page_buffers(handle_t *handle, size_t len = folio_size(folio); folio_clear_checked(folio); - mpd->wbc->nr_to_write--; + mpd->wbc->nr_to_write -= folio_nr_pages(folio); if (folio_pos(folio) + len > size && !ext4_verity_in_progress(inode)) |