Btrfs: fix deadlocks with trylock on tree nodes
authorChris Mason <clm@fb.com>
Thu, 19 Jun 2014 21:16:52 +0000 (14:16 -0700)
committerChris Mason <clm@fb.com>
Thu, 19 Jun 2014 21:19:55 +0000 (14:19 -0700)
commitea4ebde02e08558b020c4b61bb9a4c0fcf63028e
tree11b920acf6dbd78624112a675bff5d06fb4ad6d5
parent47a306a74842248dcd537b85f9a36c7b156c59a9
Btrfs: fix deadlocks with trylock on tree nodes

The Btrfs tree trylock function is poorly named.  It always takes
the spinlock and backs off if the blocking lock is held.  This
can lead to surprising lockups because people expect it to really be a
trylock.

This commit makes it a pure trylock, both for the spinlock and the
blocking lock.  It also reworks the nested lock handling slightly to
avoid taking the read lock while a spinning write lock might be held.

Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/locking.c