mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 04:37:32 -04:00
btrfs: use mapping shared locking for reading super block
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>
This commit is contained in:
committed by
Johannes Thumshirn
parent
1ba72d847c
commit
00608e3416
@@ -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);
|
||||
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user