瀏覽代碼

Btrfs: check free space in block group before searching for a cluster

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>
Josef Bacik 14 年之前
父節點
當前提交
7d0d2e8e6b
共有 1 個文件被更改,包括 10 次插入0 次删除
  1. 10 0
      fs/btrfs/free-space-cache.c

+ 10 - 0
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);
 		min_bytes = max(bytes, (bytes + empty_size) >> 2);
 
 
 	spin_lock(&block_group->tree_lock);
 	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);
 	spin_lock(&cluster->lock);
 
 
 	/* someone already found a cluster, hooray */
 	/* someone already found a cluster, hooray */