diff options
author | Josef Bacik <josef@toxicpanda.com> | 2020-08-20 18:46:05 +0300 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2020-10-07 13:12:16 +0300 |
commit | bf59a5a21604ef79da9105bef1bae817fd053e75 (patch) | |
tree | c77e328755674e909fede6da8bca28748b6584b1 /fs/btrfs/ctree.c | |
parent | bf77467a93bdf11d815f5c5f25206a0d058da8de (diff) | |
download | linux-bf59a5a21604ef79da9105bef1bae817fd053e75.tar.xz |
btrfs: introduce BTRFS_NESTING_LEFT/RIGHT_COW
For similar reasons as BTRFS_NESTING_COW, we need
BTRFS_NESTING_LEFT/RIGHT_COW. The pattern is this
lock leaf -> BTRFS_NESTING_NORMAL
cow leaf -> BTRFS_NESTING_COW
split leaf
lock left -> BTRFS_NESTING_LEFT
cow left -> BTRFS_NESTING_LEFT_COW
We need this in order to indicate to lockdep that these locks are
discrete and are being taken in a safe order.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 94af1f385ea6..ecf8bf240d73 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1900,7 +1900,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans, btrfs_set_lock_blocking_write(left); wret = btrfs_cow_block(trans, root, left, parent, pslot - 1, &left, - BTRFS_NESTING_COW); + BTRFS_NESTING_LEFT_COW); if (wret) { ret = wret; goto enospc; @@ -1916,7 +1916,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans, btrfs_set_lock_blocking_write(right); wret = btrfs_cow_block(trans, root, right, parent, pslot + 1, &right, - BTRFS_NESTING_COW); + BTRFS_NESTING_RIGHT_COW); if (wret) { ret = wret; goto enospc; @@ -2085,7 +2085,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans, } else { ret = btrfs_cow_block(trans, root, left, parent, pslot - 1, &left, - BTRFS_NESTING_COW); + BTRFS_NESTING_LEFT_COW); if (ret) wret = 1; else { @@ -2140,7 +2140,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans, } else { ret = btrfs_cow_block(trans, root, right, parent, pslot + 1, - &right, BTRFS_NESTING_COW); + &right, BTRFS_NESTING_RIGHT_COW); if (ret) wret = 1; else { @@ -3815,7 +3815,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root /* cow and double check */ ret = btrfs_cow_block(trans, root, right, upper, - slot + 1, &right, BTRFS_NESTING_COW); + slot + 1, &right, BTRFS_NESTING_RIGHT_COW); if (ret) goto out_unlock; @@ -4057,7 +4057,7 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root /* cow and double check */ ret = btrfs_cow_block(trans, root, left, path->nodes[1], slot - 1, &left, - BTRFS_NESTING_COW); + BTRFS_NESTING_LEFT_COW); if (ret) { /* we hit -ENOSPC, but it isn't fatal here */ if (ret == -ENOSPC) |