mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
Btrfs: fix block_rsv and space_info lock ordering
may_commit_transaction() calls spin_lock(&space_info->lock); spin_lock(&delayed_rsv->lock); and update_global_block_rsv() calls spin_lock(&block_rsv->lock); spin_lock(&sinfo->lock); Lockdep complains about this at run time. Everywhere except in update_global_block_rsv(), the space_info lock is the outer lock, therefore the locking order in update_global_block_rsv() is changed. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
1daf3540fa
commit
1f699d38b6
@ -4214,8 +4214,8 @@ static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
|
||||
|
||||
num_bytes = calc_global_metadata_size(fs_info);
|
||||
|
||||
spin_lock(&block_rsv->lock);
|
||||
spin_lock(&sinfo->lock);
|
||||
spin_lock(&block_rsv->lock);
|
||||
|
||||
block_rsv->size = num_bytes;
|
||||
|
||||
@ -4241,8 +4241,8 @@ static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
|
||||
block_rsv->full = 1;
|
||||
}
|
||||
|
||||
spin_unlock(&sinfo->lock);
|
||||
spin_unlock(&block_rsv->lock);
|
||||
spin_unlock(&sinfo->lock);
|
||||
}
|
||||
|
||||
static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
|
||||
|
Loading…
Reference in New Issue
Block a user