On 2/28/24 19:29, Matthew Wilcox (Oracle) wrote: > The one remaining caller of fuse_writepage_locked() already has a folio, > so convert this function entirely. Saves a few calls to compound_head() > but no attempt is made to support large folios in this patch. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > fs/fuse/file.c | 30 +++++++++++++++--------------- > 1 file changed, 15 insertions(+), 15 deletions(-) > > diff --git a/fs/fuse/file.c b/fs/fuse/file.c > index 340ccaafb3f7..f173cbce1d31 100644 > --- a/fs/fuse/file.c > +++ b/fs/fuse/file.c > @@ -2040,26 +2040,26 @@ static void fuse_writepage_add_to_bucket(struct fuse_conn *fc, > rcu_read_unlock(); > } > > -static int fuse_writepage_locked(struct page *page) > +static int fuse_writepage_locked(struct folio *folio) > { > - struct address_space *mapping = page->mapping; > + struct address_space *mapping = folio->mapping; > struct inode *inode = mapping->host; > struct fuse_conn *fc = get_fuse_conn(inode); > struct fuse_inode *fi = get_fuse_inode(inode); > struct fuse_writepage_args *wpa; > struct fuse_args_pages *ap; > - struct page *tmp_page; > + struct folio *tmp_folio; > int error = -ENOMEM; > > - set_page_writeback(page); > + folio_start_writeback(folio); > > wpa = fuse_writepage_args_alloc(); > if (!wpa) > goto err; > ap = &wpa->ia.ap; > > - tmp_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM); > - if (!tmp_page) > + tmp_folio = folio_alloc(GFP_NOFS | __GFP_HIGHMEM, 0); > + if (!tmp_folio) > goto err_free; > > error = -EIO; > @@ -2068,21 +2068,21 @@ static int fuse_writepage_locked(struct page *page) > goto err_nofile; > > fuse_writepage_add_to_bucket(fc, wpa); > - fuse_write_args_fill(&wpa->ia, wpa->ia.ff, page_offset(page), 0); > + fuse_write_args_fill(&wpa->ia, wpa->ia.ff, folio_pos(folio), 0); > > - copy_highpage(tmp_page, page); > + folio_copy(tmp_folio, folio); > wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE; > wpa->next = NULL; > ap->args.in_pages = true; > ap->num_pages = 1; > - ap->pages[0] = tmp_page; > + ap->pages[0] = &tmp_folio->page; Hi Matthew, sorry for late review. The part I'm totally confused with (already without this patch), why is this handling a single page only and not the entire folio? Is it guaranteed that the folio has a single page only? Thanks, Bernd