btrfs_get_bdev_and_sb(): call set_blocksize() only for exclusive opens
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 18 Apr 2024 04:21:25 +0000 (00:21 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 2 May 2024 21:39:44 +0000 (17:39 -0400)
commitb85c42981ac4abeeb15d16437c40f52a8a64787d
treeda3a99d999fedb54b571e9b7c96c2c6d1f714eb5
parentb1439b179d351977641a1df9745a24d08693f9d4
btrfs_get_bdev_and_sb(): call set_blocksize() only for exclusive opens

btrfs_get_bdev_and_sb() has two callers - btrfs_open_one_device(),
which asks for open to be exclusive and btrfs_get_dev_args_from_path(),
which doesn't.  Currently it does set_blocksize() in all cases.

I'm rather dubious about the need to do set_blocksize() anywhere in btrfs,
to be honest - there's some access to page cache of underlying block
devices in there, but it's nowhere near the hot paths, AFAICT.

In any case, btrfs_get_dev_args_from_path() only needs to read
the on-disk superblock and copy several fields out of it; all
callers are only interested in devices that are already opened
and brought into per-filesystem set, so setting the block size
is redundant for those and actively harmful if we are given
a pathname of unrelated device.

So we only need btrfs_get_bdev_and_sb() to call set_blocksize()
when it's asked to open exclusive.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/btrfs/volumes.c