diff options
-rw-r--r-- | fs/btrfs/free-space-cache.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 0282033041e1..f631df870f64 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c | |||
@@ -1999,6 +1999,16 @@ int btrfs_find_space_cluster(struct btrfs_trans_handle *trans, | |||
1999 | min_bytes = max(bytes, (bytes + empty_size) >> 2); | 1999 | min_bytes = max(bytes, (bytes + empty_size) >> 2); |
2000 | 2000 | ||
2001 | spin_lock(&block_group->tree_lock); | 2001 | spin_lock(&block_group->tree_lock); |
2002 | |||
2003 | /* | ||
2004 | * If we know we don't have enough space to make a cluster don't even | ||
2005 | * bother doing all the work to try and find one. | ||
2006 | */ | ||
2007 | if (block_group->free_space < min_bytes) { | ||
2008 | spin_unlock(&block_group->tree_lock); | ||
2009 | return -ENOSPC; | ||
2010 | } | ||
2011 | |||
2002 | spin_lock(&cluster->lock); | 2012 | spin_lock(&cluster->lock); |
2003 | 2013 | ||
2004 | /* someone already found a cluster, hooray */ | 2014 | /* someone already found a cluster, hooray */ |