Re: [PATCH] bcache: Use a folio

Coly Li <[email protected]>
Newsgroups org.kernel.vger.linux-bcache,dev.linux.lists.dm-devel
Message-ID <avp5ecscfzz2ekasr3qr6fvyhxwijkwn5k3z6lq5emrcdagpyc@qvzxjtc3uetx>
On Fri, Jun 13, 2025 at 08:19:39PM +0800, Matthew Wilcox (Oracle) wrote:
> Retrieve a folio from the page cache instead of a page.  Removes a
> hidden call to compound_head().  Then be sure to call folio_put()
> instead of put_page() to release it.  That doesn't save any calls
> to compound_head(), just moves them around.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>

Acked-back: Coly Li <[email protected]>

The patch looks fine and works well. If you want this patch to go upstream
by your path, please add my Acked-by.

Otherwise I can submit it to Jens with my Signed-off-by.

Thanks.

Coly Li


> ---
>  drivers/md/bcache/super.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
> index 1efb768b2890..83c786a5cc47 100644
> --- a/drivers/md/bcache/super.c
> +++ b/drivers/md/bcache/super.c
> @@ -168,14 +168,14 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
>  {
>  	const char *err;
>  	struct cache_sb_disk *s;
> -	struct page *page;
> +	struct folio *folio;
>  	unsigned int i;
>  
> -	page = read_cache_page_gfp(bdev->bd_mapping,
> -				   SB_OFFSET >> PAGE_SHIFT, GFP_KERNEL);
> -	if (IS_ERR(page))
> +	folio = mapping_read_folio_gfp(bdev->bd_mapping,
> +			SB_OFFSET >> PAGE_SHIFT, GFP_KERNEL);
> +	if (IS_ERR(folio))
>  		return "IO error";
> -	s = page_address(page) + offset_in_page(SB_OFFSET);
> +	s = folio_address(folio) + offset_in_folio(folio, SB_OFFSET);
>  
>  	sb->offset		= le64_to_cpu(s->offset);
>  	sb->version		= le64_to_cpu(s->version);
> @@ -272,7 +272,7 @@ static const char *read_super(struct cache_sb *sb, struct block_device *bdev,
>  	*res = s;
>  	return NULL;
>  err:
> -	put_page(page);
> +	folio_put(folio);
>  	return err;
>  }
>  
> @@ -1366,7 +1366,7 @@ static CLOSURE_CALLBACK(cached_dev_free)
>  	mutex_unlock(&bch_register_lock);
>  
>  	if (dc->sb_disk)
> -		put_page(virt_to_page(dc->sb_disk));
> +		folio_put(virt_to_folio(dc->sb_disk));
>  
>  	if (dc->bdev_file)
>  		fput(dc->bdev_file);
> @@ -2215,7 +2215,7 @@ void bch_cache_release(struct kobject *kobj)
>  		free_fifo(&ca->free[i]);
>  
>  	if (ca->sb_disk)
> -		put_page(virt_to_page(ca->sb_disk));
> +		folio_put(virt_to_folio(ca->sb_disk));
>  
>  	if (ca->bdev_file)
>  		fput(ca->bdev_file);
> @@ -2592,7 +2592,7 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
>  	if (!holder) {
>  		ret = -ENOMEM;
>  		err = "cannot allocate memory";
> -		goto out_put_sb_page;
> +		goto out_put_sb_folio;
>  	}
>  
>  	/* Now reopen in exclusive mode with proper holder */
> @@ -2666,8 +2666,8 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
>  
>  out_free_holder:
>  	kfree(holder);
> -out_put_sb_page:
> -	put_page(virt_to_page(sb_disk));
> +out_put_sb_folio:
> +	folio_put(virt_to_folio(sb_disk));
>  out_blkdev_put:
>  	if (bdev_file)
>  		fput(bdev_file);
> -- 
> 2.47.2
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.