]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: harden identification of a stale device
authorAnand Jain <anand.jain@oracle.com>
Wed, 12 Jan 2022 05:05:59 +0000 (13:05 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:23:58 +0000 (14:23 +0200)
commit5a592462084d220906731a3cf0416b4ea5d8d7e0
treea810a1dfab97056a3febbb97b81a84b0bf1701a3
parent219ff7ccb19dd97fb98bead45514afe8cea4ebc8
btrfs: harden identification of a stale device

[ Upstream commit 64a3ec26da15b3677dfbf0b0bb34c9a580da9414 ]

Identifying and removing the stale device from the fs_uuids list is done
by btrfs_free_stale_devices().  btrfs_free_stale_devices() in turn
depends on device_path_matched() to check if the device appears in more
than one btrfs_device structure.

The matching of the device happens by its path, the device path. However,
when device mapper is in use, the dm device paths are nothing but a link
to the actual block device, which leads to the device_path_matched()
failing to match.

Fix this by matching the dev_t as provided by lookup_bdev() instead of
plain string compare of the device paths.

Reported-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/btrfs/volumes.c