From 4afaf349cee5ae866ff718546fced17167a55c89 Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Mon, 24 Jan 2011 21:43:19 +0000 Subject: [PATCH] --- yaml --- r: 232999 b: refs/heads/master c: e9e22899de661af94cb9995885fd04e4c738838b h: refs/heads/master i: 232997: 809baab466a8f6b051078475bf07dcfa041fc839 232995: f3ad06fcf8e65405d102ffcbdd6fc00bad49e069 232991: d7f98b907603bcbf35738ce0a7327e4f36ea6fff v: v3 --- [refs] | 2 +- trunk/fs/btrfs/extent-tree.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index a6e9bff3cbbf..ec4b8df7098b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dedefd7215d3ec451291ca393e5c8e4c1882c8c6 +refs/heads/master: e9e22899de661af94cb9995885fd04e4c738838b diff --git a/trunk/fs/btrfs/extent-tree.c b/trunk/fs/btrfs/extent-tree.c index 98ee139885cc..7af618dcf2c0 100644 --- a/trunk/fs/btrfs/extent-tree.c +++ b/trunk/fs/btrfs/extent-tree.c @@ -3589,8 +3589,20 @@ void block_rsv_release_bytes(struct btrfs_block_rsv *block_rsv, if (num_bytes > 0) { if (dest) { - block_rsv_add_bytes(dest, num_bytes, 0); - } else { + spin_lock(&dest->lock); + if (!dest->full) { + u64 bytes_to_add; + + bytes_to_add = dest->size - dest->reserved; + bytes_to_add = min(num_bytes, bytes_to_add); + dest->reserved += bytes_to_add; + if (dest->reserved >= dest->size) + dest->full = 1; + num_bytes -= bytes_to_add; + } + spin_unlock(&dest->lock); + } + if (num_bytes) { spin_lock(&space_info->lock); space_info->bytes_reserved -= num_bytes; spin_unlock(&space_info->lock);