Btrfs: fix space leak when we fail to reserve metadata space
authorJosef Bacik <jbacik@fusionio.com>
Mon, 25 Mar 2013 20:03:35 +0000 (16:03 -0400)
committerJosef Bacik <jbacik@fusionio.com>
Thu, 28 Mar 2013 13:51:26 +0000 (09:51 -0400)
commitf4881bc7a83eff263789dd524b7c269d138d4af5
treed305caf38f58f140b952e14fa707964c905356b0
parentadaa4b8e4d47eeb114513c2f7a172929154b94bd
Btrfs: fix space leak when we fail to reserve metadata space

Dave reported a warning when running xfstest 275.  We have been leaking delalloc
metadata space when our reservations fail.  This is because we were improperly
calculating how much space to free for our checksum reservations.  The problem
is we would sometimes free up space that had already been freed in another
thread and we would end up with negative usage for the delalloc space.  This
patch fixes the problem by calculating how much space the other threads would
have already freed, and then calculate how much space we need to free had we not
done the reservation at all, and then freeing any excess space.  This makes
xfstests 275 no longer have leaked space.  Thanks

Cc: stable@vger.kernel.org
Reported-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
fs/btrfs/extent-tree.c