]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: use mapping shared locking for reading super block
authorFilipe Manana <fdmanana@suse.com>
Sun, 31 May 2026 10:36:06 +0000 (11:36 +0100)
committerJohannes Thumshirn <johannes.thumshirn@wdc.com>
Tue, 9 Jun 2026 16:22:46 +0000 (18:22 +0200)
There's no need to exclusively lock the mapping, shared locking is enough
to protect from a concurrent set block size operation (BLKBSZSET ioctl).

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c
fs/btrfs/zoned.c

index 66c44aa678c0fc0e5d2936117bb8e46e7cc4eb2a..f409f870a6bcd27494625af17ba347499e9a99f1 100644 (file)
@@ -1369,9 +1369,9 @@ struct btrfs_super_block *btrfs_read_disk_super(struct block_device *bdev,
                                      (bytenr + BTRFS_SUPER_INFO_SIZE) >> PAGE_SHIFT);
        }
 
-       filemap_invalidate_lock(mapping);
+       filemap_invalidate_lock_shared(mapping);
        page = read_cache_page_gfp(mapping, bytenr >> PAGE_SHIFT, GFP_NOFS);
-       filemap_invalidate_unlock(mapping);
+       filemap_invalidate_unlock_shared(mapping);
        if (IS_ERR(page))
                return ERR_CAST(page);
 
index 2d897d7a024aecc4e8871e9df7e882216e90b674..97f06dd016932af2f34530e02ac065901538917b 100644 (file)
@@ -131,10 +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);
+                       filemap_invalidate_lock_shared(mapping);
                        page[i] = read_cache_page_gfp(mapping,
                                        bytenr >> PAGE_SHIFT, GFP_NOFS);
-                       filemap_invalidate_unlock(mapping);
+                       filemap_invalidate_unlock_shared(mapping);
                        if (IS_ERR(page[i])) {
                                if (i == 1)
                                        btrfs_release_disk_super(super[0]);