Btrfs: check free space in block group before searching for a cluster
authorJosef Bacik <josef@redhat.com>
Fri, 18 Mar 2011 19:13:42 +0000 (15:13 -0400)
committerJosef Bacik <josef@redhat.com>
Mon, 21 Mar 2011 14:25:48 +0000 (10:25 -0400)
The free space cluster stuff is heavy duty, so there is no sense in going
through the entire song and dance if there isn't enough space in the block group
to begin with.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
fs/btrfs/free-space-cache.c

index 0282033041e139a9b3897ff0b27115c7bb29046e..f631df870f64bd42fc158cb44df3bb56c57da5a6 100644 (file)
@@ -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 */