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>
This commit is contained in:
parent
70b7da304f
commit
5e71b5d5ec
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user