Re: [PATCH 2/2] fuse: Convert fuse_writepage_locked to take a folio

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux