Message ID | 20231126124720.1249310-4-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/13] iomap: clear the per-folio dirty bits on all writeback failures | expand |
Christoph Hellwig <hch@lst.de> writes: > The io_folios member in struct iomap_ioend counts the number of folios > added to an ioend. It is only used at submission time and can thus be > moved to iomap_writepage_ctx instead. > No objections there. We indeed used io_folios to limit the ioend bio chain lengths and we do this only at the submission time, which is where wpc is also used for. Looks good to me. Please feel free to add - Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
On Sun, Nov 26, 2023 at 01:47:10PM +0100, Christoph Hellwig wrote: > The io_folios member in struct iomap_ioend counts the number of folios > added to an ioend. It is only used at submission time and can thus be > moved to iomap_writepage_ctx instead. > > Signed-off-by: Christoph Hellwig <hch@lst.de> LGTM Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > --- > fs/iomap/buffered-io.c | 7 ++++--- > include/linux/iomap.h | 2 +- > 2 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c > index b1bcc43baf0caf..b28c57f8603303 100644 > --- a/fs/iomap/buffered-io.c > +++ b/fs/iomap/buffered-io.c > @@ -1685,10 +1685,11 @@ iomap_alloc_ioend(struct inode *inode, struct iomap_writepage_ctx *wpc, > ioend->io_flags = wpc->iomap.flags; > ioend->io_inode = inode; > ioend->io_size = 0; > - ioend->io_folios = 0; > ioend->io_offset = offset; > ioend->io_bio = bio; > ioend->io_sector = sector; > + > + wpc->nr_folios = 0; > return ioend; > } > > @@ -1732,7 +1733,7 @@ iomap_can_add_to_ioend(struct iomap_writepage_ctx *wpc, loff_t offset, > * also prevents long tight loops ending page writeback on all the > * folios in the ioend. > */ > - if (wpc->ioend->io_folios >= IOEND_BATCH_SIZE) > + if (wpc->nr_folios >= IOEND_BATCH_SIZE) > return false; > return true; > } > @@ -1829,7 +1830,7 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, > count++; > } > if (count) > - wpc->ioend->io_folios++; > + wpc->nr_folios++; > > WARN_ON_ONCE(!wpc->ioend && !list_empty(&submit_list)); > WARN_ON_ONCE(!folio_test_locked(folio)); > diff --git a/include/linux/iomap.h b/include/linux/iomap.h > index 96dd0acbba44ac..b2a05dff914d0c 100644 > --- a/include/linux/iomap.h > +++ b/include/linux/iomap.h > @@ -293,7 +293,6 @@ struct iomap_ioend { > struct list_head io_list; /* next ioend in chain */ > u16 io_type; > u16 io_flags; /* IOMAP_F_* */ > - u32 io_folios; /* folios added to ioend */ > struct inode *io_inode; /* file being written to */ > size_t io_size; /* size of the extent */ > loff_t io_offset; /* offset in the file */ > @@ -329,6 +328,7 @@ struct iomap_writepage_ctx { > struct iomap iomap; > struct iomap_ioend *ioend; > const struct iomap_writeback_ops *ops; > + u32 nr_folios; /* folios added to the ioend */ > }; > > void iomap_finish_ioends(struct iomap_ioend *ioend, int error); > -- > 2.39.2 > >
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c index b1bcc43baf0caf..b28c57f8603303 100644 --- a/fs/iomap/buffered-io.c +++ b/fs/iomap/buffered-io.c @@ -1685,10 +1685,11 @@ iomap_alloc_ioend(struct inode *inode, struct iomap_writepage_ctx *wpc, ioend->io_flags = wpc->iomap.flags; ioend->io_inode = inode; ioend->io_size = 0; - ioend->io_folios = 0; ioend->io_offset = offset; ioend->io_bio = bio; ioend->io_sector = sector; + + wpc->nr_folios = 0; return ioend; } @@ -1732,7 +1733,7 @@ iomap_can_add_to_ioend(struct iomap_writepage_ctx *wpc, loff_t offset, * also prevents long tight loops ending page writeback on all the * folios in the ioend. */ - if (wpc->ioend->io_folios >= IOEND_BATCH_SIZE) + if (wpc->nr_folios >= IOEND_BATCH_SIZE) return false; return true; } @@ -1829,7 +1830,7 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc, count++; } if (count) - wpc->ioend->io_folios++; + wpc->nr_folios++; WARN_ON_ONCE(!wpc->ioend && !list_empty(&submit_list)); WARN_ON_ONCE(!folio_test_locked(folio)); diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 96dd0acbba44ac..b2a05dff914d0c 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -293,7 +293,6 @@ struct iomap_ioend { struct list_head io_list; /* next ioend in chain */ u16 io_type; u16 io_flags; /* IOMAP_F_* */ - u32 io_folios; /* folios added to ioend */ struct inode *io_inode; /* file being written to */ size_t io_size; /* size of the extent */ loff_t io_offset; /* offset in the file */ @@ -329,6 +328,7 @@ struct iomap_writepage_ctx { struct iomap iomap; struct iomap_ioend *ioend; const struct iomap_writeback_ops *ops; + u32 nr_folios; /* folios added to the ioend */ }; void iomap_finish_ioends(struct iomap_ioend *ioend, int error);
The io_folios member in struct iomap_ioend counts the number of folios added to an ioend. It is only used at submission time and can thus be moved to iomap_writepage_ctx instead. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/iomap/buffered-io.c | 7 ++++--- include/linux/iomap.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)