• Naohiro Aota's avatar
    btrfs: zoned: fix lock ordering in btrfs_zone_activate() · b18f3b60
    Naohiro Aota authored
    The btrfs CI reported a lockdep warning as follows by running generic
    generic/129.
    
       WARNING: possible circular locking dependency detected
       6.7.0-rc5+ #1 Not tainted
       ------------------------------------------------------
       kworker/u5:5/793427 is trying to acquire lock:
       ffff88813256d028 (&cache->lock){+.+.}-{2:2}, at: btrfs_zone_finish_one_bg+0x5e/0x130
       but task is already holding lock:
       ffff88810a23a318 (&fs_info->zone_active_bgs_lock){+.+.}-{2:2}, at: btrfs_zone_finish_one_bg+0x34/0x130
       which lock already depends on the new lock.
    
       the existing dependency chain (in reverse order) is:
       -> #1 (&fs_info->zone_active_bgs_lock){+.+.}-{2:2}:
       ...
       -> #0 (&cache->lock){+.+.}-{2:2}:
       ...
    
    This is because we take fs_info->zone_active_bgs_lock after a block_group's
    lock in btrfs_zone_activate() while doing the opposite in other places.
    
    Fix the issue by expanding the fs_info->zone_active_bgs_lock's critical
    section and taking it before a block_group's lock.
    
    Fixes: a7e1ac7b ("btrfs: zoned: reserve zones for an active metadata/system block group")
    CC: stable@vger.kernel.org # 6.6
    Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    b18f3b60
zoned.c 69 KB