• Zhao Lei's avatar
    btrfs: Fix lost-data-profile caused by auto removing bg · aefbe9a6
    Zhao Lei authored
    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: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarZhao Lei <zhaolei@cn.fujitsu.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    aefbe9a6
extent-tree.c 287 KB