]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
btrfs: zoned: fix missing RCU locking in error message when loading zone info
authorFilipe Manana <fdmanana@suse.com>
Wed, 2 Oct 2024 14:02:56 +0000 (15:02 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 9 Oct 2024 11:23:51 +0000 (13:23 +0200)
At btrfs_load_zone_info() we have an error path that is dereferencing
the name of a device which is a RCU string but we are not holding a RCU
read lock, which is incorrect.

Fix this by using btrfs_err_in_rcu() instead of btrfs_err().

The problem is there since commit 08e11a3db098 ("btrfs: zoned: load zone's
allocation offset"), back then at btrfs_load_block_group_zone_info() but
then later on that code was factored out into the helper
btrfs_load_zone_info() by commit 09a46725cc84 ("btrfs: zoned: factor out
per-zone logic from btrfs_load_block_group_zone_info").

Fixes: 08e11a3db098 ("btrfs: zoned: load zone's allocation offset")
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/zoned.c

index 7fa2920632ba683c09975584c7b1e0dcad9a94db..69d03feea4e0ecfc84784943950b2bd39178bed8 100644 (file)
@@ -1340,7 +1340,7 @@ static int btrfs_load_zone_info(struct btrfs_fs_info *fs_info, int zone_idx,
        switch (zone.cond) {
        case BLK_ZONE_COND_OFFLINE:
        case BLK_ZONE_COND_READONLY:
-               btrfs_err(fs_info,
+               btrfs_err_in_rcu(fs_info,
                "zoned: offline/readonly zone %llu on device %s (devid %llu)",
                          (info->physical >> device->zone_info->zone_size_shift),
                          rcu_str_deref(device->name), device->devid);