diff mbox series

[03/13] iomap: move the io_folios field out of struct iomap_ioend

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

Commit Message

Christoph Hellwig Nov. 26, 2023, 12:47 p.m. UTC
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(-)

Comments

Ritesh Harjani (IBM) Nov. 27, 2023, 5:33 a.m. UTC | #1
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>
Darrick J. Wong Nov. 29, 2023, 4:41 a.m. UTC | #2
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 mbox series

Patch

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);