Message ID | 622c8c01307fdaa9e9da254b5695eb082261b4a3.1727469663.git.josef@toxicpanda.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | fuse: folio conversions | expand |
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 --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; }
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(-)