Browse Source

btrfs: Update stats when allocating from a cluster

When allocating extent entry from a cluster, we should update
the free_space and free_extents fields of the block group.

Reviewed-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Li Zefan 14 years ago
parent
commit
5e71b5d5ec
1 changed files with 14 additions and 3 deletions
  1. 14 3
      fs/btrfs/free-space-cache.c

+ 14 - 3
fs/btrfs/free-space-cache.c

@@ -1843,15 +1843,26 @@ u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
 		entry->offset += bytes;
 		entry->offset += bytes;
 		entry->bytes -= bytes;
 		entry->bytes -= bytes;
 
 
-		if (entry->bytes == 0) {
+		if (entry->bytes == 0)
 			rb_erase(&entry->offset_index, &cluster->root);
 			rb_erase(&entry->offset_index, &cluster->root);
-			kfree(entry);
-		}
 		break;
 		break;
 	}
 	}
 out:
 out:
 	spin_unlock(&cluster->lock);
 	spin_unlock(&cluster->lock);
 
 
+	if (!ret)
+		return 0;
+
+	spin_lock(&block_group->tree_lock);
+
+	block_group->free_space -= bytes;
+	if (entry->bytes == 0) {
+		block_group->free_extents--;
+		kfree(entry);
+	}
+
+	spin_unlock(&block_group->tree_lock);
+
 	return ret;
 	return ret;
 }
 }