From a491a9112aca1dcb4d5d02a7155c7715597502aa Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 18 Mar 2011 15:13:42 -0400 Subject: [PATCH] --- yaml --- r: 243156 b: refs/heads/master c: 7d0d2e8e6b6f7da221a25238cf490a095c8c4788 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/btrfs/free-space-cache.c | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 35bf318d2ea1..f3426a8b9e3c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 22a94d44bd6876a90630338229da6c0436d46593 +refs/heads/master: 7d0d2e8e6b6f7da221a25238cf490a095c8c4788 diff --git a/trunk/fs/btrfs/free-space-cache.c b/trunk/fs/btrfs/free-space-cache.c index 0282033041e1..f631df870f64 100644 --- a/trunk/fs/btrfs/free-space-cache.c +++ b/trunk/fs/btrfs/free-space-cache.c @@ -1999,6 +1999,16 @@ int btrfs_find_space_cluster(struct btrfs_trans_handle *trans, min_bytes = max(bytes, (bytes + empty_size) >> 2); spin_lock(&block_group->tree_lock); + + /* + * If we know we don't have enough space to make a cluster don't even + * bother doing all the work to try and find one. + */ + if (block_group->free_space < min_bytes) { + spin_unlock(&block_group->tree_lock); + return -ENOSPC; + } + spin_lock(&cluster->lock); /* someone already found a cluster, hooray */