]> git.hungrycats.org Git - linux/commitdiff
btrfs: add WARN_ON() to check is space_info op current
authorZhao Lei <zhaolei@cn.fujitsu.com>
Tue, 24 Feb 2015 12:07:44 +0000 (20:07 +0800)
committerZygo Blaxell <zblaxell@waya.furryterror.org>
Fri, 17 Apr 2015 17:06:17 +0000 (13:06 -0400)
space_info's value calculation is some complex and easy to cause
bug, add WARN_ON() to help debug.

Changelog v1->v2:
 Put WARN_ON()s under the ENOSPC_DEBUG mount option.
 Suggested by: David Sterba <dsterba@suse.cz>

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
(cherry picked from commit 18d018ad2c899d3d9c503c25125d56046ed7d3ca)

fs/btrfs/extent-tree.c

index 08ddd6e79a7a15173065e1b2039253071c51d63f..3cbc4d8e43f67dd2210ab3ccd1d8733ab469cf57 100644 (file)
@@ -9730,9 +9730,19 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
 
        spin_lock(&block_group->space_info->lock);
        list_del_init(&block_group->ro_list);
+
+       if (btrfs_test_opt(root, ENOSPC_DEBUG)) {
+               WARN_ON(block_group->space_info->total_bytes
+                       < block_group->key.offset);
+               WARN_ON(block_group->space_info->bytes_readonly
+                       < block_group->key.offset);
+               WARN_ON(block_group->space_info->disk_total
+                       < block_group->key.offset * factor);
+       }
        block_group->space_info->total_bytes -= block_group->key.offset;
        block_group->space_info->bytes_readonly -= block_group->key.offset;
        block_group->space_info->disk_total -= block_group->key.offset * factor;
+
        spin_unlock(&block_group->space_info->lock);
 
        memcpy(&key, &block_group->key, sizeof(key));