From bf59a5a21604ef79da9105bef1bae817fd053e75 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Thu, 20 Aug 2020 11:46:05 -0400 Subject: 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 Reviewed-by: David Sterba Signed-off-by: David Sterba --- fs/btrfs/locking.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'fs/btrfs/locking.h') diff --git a/fs/btrfs/locking.h b/fs/btrfs/locking.h index 5844bc1c8410..16563bc486c7 100644 --- a/fs/btrfs/locking.h +++ b/fs/btrfs/locking.h @@ -44,6 +44,14 @@ enum btrfs_lock_nesting { BTRFS_NESTING_LEFT, BTRFS_NESTING_RIGHT, + /* + * When splitting we will be holding a lock on the left/right node when + * we need to cow that node, thus we need a new set of subclasses for + * these two operations. + */ + BTRFS_NESTING_LEFT_COW, + BTRFS_NESTING_RIGHT_COW, + /* * We are limited to MAX_LOCKDEP_SUBLCLASSES number of subclasses, so * add this in here and add a static_assert to keep us from going over -- cgit v1.2.3