Btrfs: Improve and cleanup locking done by walk_down_tree
authorChris Mason <chris.mason@oracle.com>
Fri, 1 Aug 2008 15:27:23 +0000 (11:27 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:06 +0000 (11:04 -0400)
commitf87f057b49ee52cf5c627ab27a706e3252767c9f
tree4f8cc04e91ae836f4dd1b2151f47cbd1bd1b9367
parent492bb6deee3416ad792dcd8584ebd95c463af1a6
Btrfs: Improve and cleanup locking done by walk_down_tree

While dropping snapshots, walk_down_tree does most of the work of checking
reference counts and limiting tree traversal to just the blocks that
we are freeing.

It dropped and held the allocation mutex in strange and confusing ways,
this commit changes it to only hold the mutex while actually freeing a block.

The rest of the checks around reference counts should be safe without the lock
because we only allow one process in btrfs_drop_snapshot at a time.  Other
processes dropping reference counts should not drop it to 1 because
their tree roots already have an extra ref on the block.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c
fs/btrfs/file.c
fs/btrfs/ioctl.c