Re: [PATCH 02/12] iomap: cleanup the pending writeback tracking in iomap_writepage_map_blocks

Darrick J. Wong
2025-07-02T18:23:34Z

On Fri, Jun 27, 2025 at 09:02:35AM +0200, Christoph Hellwig wrote:
> From: Joanne Koong <joannelkoong@gmail.com>
>
> We don't care about the count of outstanding ioends, just if there is one.
> Replace the count variable passed to iomap_writepage_map_blocks with a
> boolean to make that more clear.
>
> Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
> [hch: rename the variable, update the commit message]
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>

/methinks this also fixes a theoretical logic bug if *count should
ever overflow back to zero so

Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
> fs/iomap/buffered-io.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
> index b5162e0323d0..ec2f70c6ec33 100644
> --- a/fs/iomap/buffered-io.c
> +++ b/fs/iomap/buffered-io.c
> @@ -1758,7 +1758,7 @@ static int iomap_add_to_ioend(struct iomap_writeback_ctx *wpc,
>
> static int iomap_writepage_map_blocks(struct iomap_writeback_ctx *wpc,
> struct folio *folio, u64 pos, u64 end_pos, unsigned dirty_len,
> - unsigned *count)
> + bool *wb_pending)
> {
> int error;
>
> @@ -1786,7 +1786,7 @@ static int iomap_writepage_map_blocks(struct iomap_writeback_ctx *wpc,
> error = iomap_add_to_ioend(wpc, folio, pos, end_pos,
> map_len);
> if (!error)
> - (*count)++;
> + *wb_pending = true;
> break;
> }
> dirty_len -= map_len;
> @@ -1873,7 +1873,7 @@ static int iomap_writepage_map(struct iomap_writeback_ctx *wpc,
> u64 pos = folio_pos(folio);
> u64 end_pos = pos + folio_size(folio);
> u64 end_aligned = 0;
> - unsigned count = 0;
> + bool wb_pending = false;
> int error = 0;
> u32 rlen;
>
> @@ -1917,13 +1917,13 @@ static int iomap_writepage_map(struct iomap_writeback_ctx *wpc,
> end_aligned = round_up(end_pos, i_blocksize(inode));
> while ((rlen = iomap_find_dirty_range(folio, &pos, end_aligned))) {
> error = iomap_writepage_map_blocks(wpc, folio, pos, end_pos,
> - rlen, &count);
> + rlen, &wb_pending);
> if (error)
> break;
> pos += rlen;
> }
>
> - if (count)
> + if (wb_pending)
> wpc->nr_folios++;
>
> /*
> @@ -1945,7 +1945,7 @@ static int iomap_writepage_map(struct iomap_writeback_ctx *wpc,
> if (atomic_dec_and_test(&ifs->write_bytes_pending))
> folio_end_writeback(folio);
> } else {
> - if (!count)
> + if (!wb_pending)
> folio_end_writeback(folio);
> }
> mapping_set_error(inode->i_mapping, error);
> --
> 2.47.2
>
>