On Fri, Sep 27, 2024 at 1:54 PM Josef Bacik <josef@xxxxxxxxxxxxxx> 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@xxxxxxxxxxxxxx> Reviewed-by: Joanne Koong <joannelkoong@xxxxxxxxx> > --- > 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 > >