Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* [PATCH] btrfs: protect sb_write_pointer() with invalidate lock
@ 2026-05-21 12:29 KangNing Liao
  2026-05-21 22:14 ` Qu Wenruo
  0 siblings, 1 reply; 2+ messages in thread
From: KangNing Liao @ 2026-05-21 12:29 UTC (permalink / raw)
  To: linux-btrfs; +Cc: clm, dsterba, eadavis, linux-kernel

sb_write_pointer() reads the super block from the block device page cache
using read_cache_page_gfp(). This has the same race with BLKBSZSET as the
one fixed by commit 3f29d661e568 ("btrfs: sync read disk super and set
block size").

Take the mapping invalidate lock around read_cache_page_gfp() to
serialize the read against block size changes.

Signed-off-by: KangNing Liao <lkangn.kernel@gmail.com>
---
 fs/btrfs/zoned.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
index 16dd87aa06f2..5f75cf0e14b9 100644
--- a/fs/btrfs/zoned.c
+++ b/fs/btrfs/zoned.c
@@ -131,8 +131,10 @@ static int sb_write_pointer(struct block_device *bdev, struct blk_zone *zones,
 			u64 bytenr = ALIGN_DOWN(zone_end, BTRFS_SUPER_INFO_SIZE) -
 						BTRFS_SUPER_INFO_SIZE;
 
+			filemap_invalidate_lock(mapping);
 			page[i] = read_cache_page_gfp(mapping,
 					bytenr >> PAGE_SHIFT, GFP_NOFS);
+			filemap_invalidate_unlock(mapping);
 			if (IS_ERR(page[i])) {
 				if (i == 1)
 					btrfs_release_disk_super(super[0]);
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] btrfs: protect sb_write_pointer() with invalidate lock
  2026-05-21 12:29 [PATCH] btrfs: protect sb_write_pointer() with invalidate lock KangNing Liao
@ 2026-05-21 22:14 ` Qu Wenruo
  0 siblings, 0 replies; 2+ messages in thread
From: Qu Wenruo @ 2026-05-21 22:14 UTC (permalink / raw)
  To: KangNing Liao, linux-btrfs; +Cc: clm, dsterba, eadavis, linux-kernel



在 2026/5/21 21:59, KangNing Liao 写道:
> sb_write_pointer() reads the super block from the block device page cache
> using read_cache_page_gfp(). This has the same race with BLKBSZSET as the
> one fixed by commit 3f29d661e568 ("btrfs: sync read disk super and set
> block size").
> 
> Take the mapping invalidate lock around read_cache_page_gfp() to
> serialize the read against block size changes.
> 
> Signed-off-by: KangNing Liao <lkangn.kernel@gmail.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>   fs/btrfs/zoned.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c
> index 16dd87aa06f2..5f75cf0e14b9 100644
> --- a/fs/btrfs/zoned.c
> +++ b/fs/btrfs/zoned.c
> @@ -131,8 +131,10 @@ static int sb_write_pointer(struct block_device *bdev, struct blk_zone *zones,
>   			u64 bytenr = ALIGN_DOWN(zone_end, BTRFS_SUPER_INFO_SIZE) -
>   						BTRFS_SUPER_INFO_SIZE;
>   
> +			filemap_invalidate_lock(mapping);
>   			page[i] = read_cache_page_gfp(mapping,
>   					bytenr >> PAGE_SHIFT, GFP_NOFS);
> +			filemap_invalidate_unlock(mapping);
>   			if (IS_ERR(page[i])) {
>   				if (i == 1)
>   					btrfs_release_disk_super(super[0]);


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-05-21 22:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-21 12:29 [PATCH] btrfs: protect sb_write_pointer() with invalidate lock KangNing Liao
2026-05-21 22:14 ` Qu Wenruo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox