Btrfs: make sure btrfs_update_delayed_ref doesn't increase ref_mod
authorChris Mason <chris.mason@oracle.com>
Wed, 25 Mar 2009 13:55:11 +0000 (09:55 -0400)
committerChris Mason <chris.mason@oracle.com>
Wed, 25 Mar 2009 13:55:11 +0000 (09:55 -0400)
commit1a81af4d1d9c60d4313309f937a1fc5567205a87
tree535b65b3948d34f0948613afc6ebdfe693683f33
parentaf4176b49c5ee15a9c9b10720c92456b28e7aac7
Btrfs: make sure btrfs_update_delayed_ref doesn't increase ref_mod

btrfs_update_delayed_ref is optimized to add and remove different
references in one pass through the delayed ref tree.  It is a zero
sum on the total number of refs on a given extent.

But, the code was recording an extra ref in the head node.  This
never made it down to the disk but was used when deciding if it was
safe to free the extent while dropping snapshots.

The fix used here is to make sure the ref_mod count is unchanged
on the head ref when btrfs_update_delayed_ref is called.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/delayed-ref.c
fs/btrfs/delayed-ref.h