From: Miao Xie Date: Wed, 3 Sep 2014 13:35:36 +0000 (+0800) Subject: Btrfs: fix unprotected device->bytes_used update X-Git-Tag: firefly_0821_release~176^2~2834^2~55 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=43530c46cc55cf5a381e788276a93c83cbc95e46;p=firefly-linux-kernel-4.4.55.git Btrfs: fix unprotected device->bytes_used update We should update device->bytes_used in the lock context of chunk_mutex, or we would get wrong data. Signed-off-by: Miao Xie Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 1524b3f44036..45e0b5d0f6dd 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -4429,6 +4429,9 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans, if (ret) goto error_del_extent; + for (i = 0; i < map->num_stripes; i++) + map->stripes[i].dev->bytes_used += stripe_size; + free_extent_map(em); check_raid56_incompat_flag(extent_root->fs_info, type); @@ -4500,7 +4503,6 @@ int btrfs_finish_chunk_alloc(struct btrfs_trans_handle *trans, device = map->stripes[i].dev; dev_offset = map->stripes[i].physical; - device->bytes_used += stripe_size; ret = btrfs_update_device(trans, device); if (ret) goto out;