]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: Fix lost-data-profile caused by auto removing bg
authorZhao Lei <zhaolei@cn.fujitsu.com>
Tue, 29 Sep 2015 13:03:54 +0000 (21:03 +0800)
committerChris Mason <clm@fb.com>
Wed, 11 Nov 2015 03:27:16 +0000 (19:27 -0800)
commit85abb8e2cad7315dcfe83d9597bd18f488e1724b
treec78cefbebcadc5283680c2bc859077b5e014f418
parentb3ac926a2d6415b845cbfd270f1d10cca6e69029
btrfs: Fix lost-data-profile caused by auto removing bg

Reproduce:
 (In integration-4.3 branch)

 TEST_DEV=(/dev/vdg /dev/vdh)
 TEST_DIR=/mnt/tmp

 umount "$TEST_DEV" >/dev/null
 mkfs.btrfs -f -d raid1 "${TEST_DEV[@]}"

 mount -o nospace_cache "$TEST_DEV" "$TEST_DIR"
 umount "$TEST_DEV"

 mount -o nospace_cache "$TEST_DEV" "$TEST_DIR"
 btrfs filesystem usage $TEST_DIR

We can see the data chunk changed from raid1 to single:
 # btrfs filesystem usage $TEST_DIR
 Data,single: Size:8.00MiB, Used:0.00B
    /dev/vdg        8.00MiB
 #

Reason:
 When a empty filesystem mount with -o nospace_cache, the last
 data blockgroup will be auto-removed in umount.

 Then if we mount it again, there is no data chunk in the
 filesystem, so the only available data profile is 0x0, result
 is all new chunks are created as single type.

Fix:
 Don't auto-delete last blockgroup for a raid type.

Test:
 Test by above script, and confirmed the logic by debug output.

Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/extent-tree.c