diff mbox series

[v3,07/10] fuse: convert fuse_writepage_need_send to take a folio

Message ID 622c8c01307fdaa9e9da254b5695eb082261b4a3.1727469663.git.josef@toxicpanda.com (mailing list archive)
State New
Headers show
Series fuse: folio conversions | expand

Commit Message

Josef Bacik Sept. 27, 2024, 8:44 p.m. UTC
fuse_writepage_need_send is called by fuse_writepages_fill() which
already has a folio.  Change fuse_writepage_need_send() to take a folio
instead, add a helper to check if the folio range is under writeback and
use this, as well as the appropriate folio helpers in the rest of the
function.  Update fuse_writepage_need_send() to pass in the folio
directly.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
 fs/fuse/file.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

Comments

Joanne Koong Sept. 27, 2024, 10:55 p.m. UTC | #1
On Fri, Sep 27, 2024 at 1:54 PM Josef Bacik <josef@toxicpanda.com> wrote:
>
> fuse_writepage_need_send is called by fuse_writepages_fill() which
> already has a folio.  Change fuse_writepage_need_send() to take a folio
> instead, add a helper to check if the folio range is under writeback and
> use this, as well as the appropriate folio helpers in the rest of the
> function.  Update fuse_writepage_need_send() to pass in the folio
> directly.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>

Reviewed-by: Joanne Koong <joannelkoong@gmail.com>


> ---
>  fs/fuse/file.c | 19 ++++++++++++-------
>  1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/fs/fuse/file.c b/fs/fuse/file.c
> index 8a4621939d3b..e02093fe539a 100644
> --- a/fs/fuse/file.c
> +++ b/fs/fuse/file.c
> @@ -483,14 +483,19 @@ static void fuse_wait_on_page_writeback(struct inode *inode, pgoff_t index)
>         wait_event(fi->page_waitq, !fuse_page_is_writeback(inode, index));
>  }
>
> +static inline bool fuse_folio_is_writeback(struct inode *inode,
> +                                          struct folio *folio)
> +{
> +       pgoff_t last = folio_next_index(folio) - 1;
> +       return fuse_range_is_writeback(inode, folio_index(folio), last);
> +}
> +
>  static void fuse_wait_on_folio_writeback(struct inode *inode,
>                                          struct folio *folio)
>  {
>         struct fuse_inode *fi = get_fuse_inode(inode);
> -       pgoff_t last = folio_next_index(folio) - 1;
>
> -       wait_event(fi->page_waitq,
> -                  !fuse_range_is_writeback(inode, folio_index(folio), last));
> +       wait_event(fi->page_waitq, !fuse_folio_is_writeback(inode, folio));
>  }
>
>  /*
> @@ -2262,7 +2267,7 @@ static bool fuse_writepage_add(struct fuse_writepage_args *new_wpa,
>         return false;
>  }
>
> -static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
> +static bool fuse_writepage_need_send(struct fuse_conn *fc, struct folio *folio,
>                                      struct fuse_args_pages *ap,
>                                      struct fuse_fill_wb_data *data)
>  {
> @@ -2274,7 +2279,7 @@ static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
>          * the pages are faulted with get_user_pages(), and then after the read
>          * completed.
>          */
> -       if (fuse_page_is_writeback(data->inode, page->index))
> +       if (fuse_folio_is_writeback(data->inode, folio))
>                 return true;
>
>         /* Reached max pages */
> @@ -2286,7 +2291,7 @@ static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
>                 return true;
>
>         /* Discontinuity */
> -       if (data->orig_pages[ap->num_pages - 1]->index + 1 != page->index)
> +       if (data->orig_pages[ap->num_pages - 1]->index + 1 != folio_index(folio))
>                 return true;
>
>         /* Need to grow the pages array?  If so, did the expansion fail? */
> @@ -2308,7 +2313,7 @@ static int fuse_writepages_fill(struct folio *folio,
>         struct folio *tmp_folio;
>         int err;
>
> -       if (wpa && fuse_writepage_need_send(fc, &folio->page, ap, data)) {
> +       if (wpa && fuse_writepage_need_send(fc, folio, ap, data)) {
>                 fuse_writepages_send(data);
>                 data->wpa = NULL;
>         }
> --
> 2.43.0
>
>
diff mbox series

Patch

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 8a4621939d3b..e02093fe539a 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -483,14 +483,19 @@  static void fuse_wait_on_page_writeback(struct inode *inode, pgoff_t index)
 	wait_event(fi->page_waitq, !fuse_page_is_writeback(inode, index));
 }
 
+static inline bool fuse_folio_is_writeback(struct inode *inode,
+					   struct folio *folio)
+{
+	pgoff_t last = folio_next_index(folio) - 1;
+	return fuse_range_is_writeback(inode, folio_index(folio), last);
+}
+
 static void fuse_wait_on_folio_writeback(struct inode *inode,
 					 struct folio *folio)
 {
 	struct fuse_inode *fi = get_fuse_inode(inode);
-	pgoff_t last = folio_next_index(folio) - 1;
 
-	wait_event(fi->page_waitq,
-		   !fuse_range_is_writeback(inode, folio_index(folio), last));
+	wait_event(fi->page_waitq, !fuse_folio_is_writeback(inode, folio));
 }
 
 /*
@@ -2262,7 +2267,7 @@  static bool fuse_writepage_add(struct fuse_writepage_args *new_wpa,
 	return false;
 }
 
-static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
+static bool fuse_writepage_need_send(struct fuse_conn *fc, struct folio *folio,
 				     struct fuse_args_pages *ap,
 				     struct fuse_fill_wb_data *data)
 {
@@ -2274,7 +2279,7 @@  static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
 	 * the pages are faulted with get_user_pages(), and then after the read
 	 * completed.
 	 */
-	if (fuse_page_is_writeback(data->inode, page->index))
+	if (fuse_folio_is_writeback(data->inode, folio))
 		return true;
 
 	/* Reached max pages */
@@ -2286,7 +2291,7 @@  static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
 		return true;
 
 	/* Discontinuity */
-	if (data->orig_pages[ap->num_pages - 1]->index + 1 != page->index)
+	if (data->orig_pages[ap->num_pages - 1]->index + 1 != folio_index(folio))
 		return true;
 
 	/* Need to grow the pages array?  If so, did the expansion fail? */
@@ -2308,7 +2313,7 @@  static int fuse_writepages_fill(struct folio *folio,
 	struct folio *tmp_folio;
 	int err;
 
-	if (wpa && fuse_writepage_need_send(fc, &folio->page, ap, data)) {
+	if (wpa && fuse_writepage_need_send(fc, folio, ap, data)) {
 		fuse_writepages_send(data);
 		data->wpa = NULL;
 	}