Message ID | b2688434550d5dd940594e9a61ab0660f69cbb26.1447423853.git.zhaolei@cn.fujitsu.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On 2015-11-13 09:11, Zhao Lei wrote: > Current code don't support dup profile in single device, except it > is in mixed mode, because following reason: > 1: In some ssd with deduplication function, it have no effect. > 2: For a physical device, it the entire disk broken, -d dup can > not help. > 3: Half performance comparing with single profile. > 4: We have a workaround: Create multi-partition in single device, > and btefs will treat them as multi device. > > Instead of refuse -d dup, we have a better choise: > Give user a chance to select, and output a warning to notice above > problem. > > Test: > 1: Tested by xfstests > Run with modified xfstests, I add test items of -d dup in single > device into btrfs/* and common/rc, run tests of btrfs/*, > with all mount option, no regression diffed with v4.3. > 2: Tested by btrfs-progs > Checked following commands in "-m dup -d dup" fs with memleck > checking, all passed: > mkfs.btrfs -f --data dup --metadata dup /dev/sda6 > btrfs filesystem show /dev/sda6 > btrfs filesystem label /dev/sda6 btrfs_label_test > btrfs filesystem label /dev/sda6 > btrfs device scan --all-devices > btrfs device scan /dev/sda6 > btrfs device scan /dev/sda6 > btrfs device ready /dev/sda6 > btrfs check /dev/sda6 > btrfs check -s 1 /dev/sda6 > btrfs check --repair /dev/sda6 > btrfs check --init-csum-tree /dev/sda6 > btrfs check --init-extent-tree /dev/sda6 > btrfs check --check-data-csum /dev/sda6 > btrfs check --qgroup-report /dev/sda6 > btrfs rescue super-recover -y /dev/sda6 > btrfs rescue zero-log /dev/sda6 > btrfs restore -l /dev/sda6 > btrfs restore /dev/sda6 / > btrfs restore -s /dev/sda6 / > btrfs restore -x /dev/sda6 / > btrfs restore -m /dev/sda6 / > btrfs restore -S /dev/sda6 / > btrfs restore -v /dev/sda6 / > btrfs restore -i /dev/sda6 / > btrfs restore -o /dev/sda6 / > btrfs restore -u0 /dev/sda6 / > btrfs restore -u1 /dev/sda6 / > btrfs restore -D /dev/sda6 / > btrfs property list /dev/sda6 > btrfs property get /dev/sda6 label > btrfs property set /dev/sda6 label test > btrfs property set /dev/sda6 label btrfs_label_test > btrfs help > btrfs help --full > btrfs version > btrfsck /dev/sda6 > btrfs-find-root /dev/sda6 > btrfs-find-root -a /dev/sda6 > btrfs-map-logical -l1 /dev/sda6 > btrfs-map-logical -l1 -c1 /dev/sda6 > btrfs-map-logical -l1 -o /tmp/btrfs-map-logic-out /dev/sda6 > btrfs-map-logical -l1 -b1 /dev/sda6 > btrfs-select-super -s 0 /dev/sda6 > btrfs-select-super -s 1 /dev/sda6 > btrfstune -S 1 /dev/sda6 > btrfstune -f -S 0 /dev/sda6 > btrfstune -r /dev/sda6 > btrfstune -x /dev/sda6 > btrfstune -n /dev/sda6 > btrfstune -f -U 00000000-0000-0000-0000-000000000000 /dev/sda6 > btrfstune -f -u /dev/sda6 > btrfs-calc-size /dev/sda6 > btrfs-calc-size -v /dev/sda6 > btrfs-calc-size -b /dev/sda6 > btrfs-debug-tree /dev/sda6 > btrfs-debug-tree -e /dev/sda6 > btrfs-debug-tree -d /dev/sda6 > btrfs-debug-tree -r /dev/sda6 > btrfs-debug-tree -R /dev/sda6 > btrfs-debug-tree -u /dev/sda6 > btrfs-debug-tree -b 0 /dev/sda6 > btrfs-debug-tree -t 0 /dev/sda6 > btrfs-debug-tree -t 2 /dev/sda6 > btrfs-show-super /dev/sda6 > btrfs-show-super -i 0 /dev/sda6 > btrfs-show-super -i 1 /dev/sda6 > btrfs-show-super -i 2 /dev/sda6 > btrfs-show-super -a /dev/sda6 > btrfs-show-super -f /dev/sda6 > btrfs-show-super -F /dev/sda6 > btrfs subvolume list /mnt/btrfs-progs-tests > btrfs subvolume create /mnt/btrfs-progs-tests/mysubvol > btrfs subvolume list /mnt/btrfs-progs-tests > btrfs subvolume get-default /mnt/btrfs-progs-tests > btrfs subvolume set-default 258 /mnt/btrfs-progs-tests > btrfs subvolume get-default /mnt/btrfs-progs-tests > btrfs subvolume set-default /mnt/btrfs-progs-tests > btrfs subvolume snapshot /mnt/btrfs-progs-tests/mysubvol /mnt/btrfs-progs-tests/mysubvol_snap > btrfs subvolume list /mnt/btrfs-progs-tests > btrfs subvolume find-new /mnt/btrfs-progs-tests 0 > btrfs subvolume find-new /mnt/btrfs-progs-tests 0 > btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0 > btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0 > btrfs subvolume show /mnt/btrfs-progs-tests > btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol > btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol_snap > btrfs subvolume sync /mnt/btrfs-progs-tests > btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol_snap > btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol > btrfs subvolume sync /mnt/btrfs-progs-tests > btrfs filesystem df /mnt/btrfs-progs-tests > btrfs filesystem show /mnt/btrfs-progs-tests > btrfs filesystem sync /mnt/btrfs-progs-tests > btrfs filesystem label /mnt/btrfs-progs-tests btrfs_label_test > btrfs filesystem label /mnt/btrfs-progs-tests > btrfs filesystem usage /mnt/btrfs-progs-tests > btrfs filesystem defragment -s 1024 -l 2048 /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_0 > btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_1 > btrfs filesystem defragment -f /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_2 > btrfs filesystem defragment -czlib /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_3 > btrfs filesystem defragment -clzo /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_4 > btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir > btrfs filesystem defragment -r /mnt/btrfs-progs-tests/filesystem_test_dir > btrfs filesystem defragment /mnt/btrfs-progs-tests > btrfs filesystem resize 1:-10M /mnt/btrfs-progs-tests > btrfs filesystem resize 1:max /mnt/btrfs-progs-tests > btrfs balance start /mnt/btrfs-progs-tests > btrfs balance start -v /mnt/btrfs-progs-tests > btrfs balance start -f /mnt/btrfs-progs-tests > btrfs balance status -v /mnt/btrfs-progs-tests > btrfs balance pause /mnt/btrfs-progs-tests > btrfs balance status /mnt/btrfs-progs-tests > btrfs balance resume /mnt/btrfs-progs-tests > btrfs balance status -v /mnt/btrfs-progs-tests > btrfs balance cancel /mnt/btrfs-progs-tests > btrfs balance start -dprofiles=single /mnt/btrfs-progs-tests > btrfs balance start -dconvert=single /mnt/btrfs-progs-tests > btrfs balance start -ddevid=1 /mnt/btrfs-progs-tests > btrfs balance start -f -mprofiles=single /mnt/btrfs-progs-tests > btrfs balance start -f -mconvert=single /mnt/btrfs-progs-tests > btrfs balance start -f -mdevid=1 /mnt/btrfs-progs-tests > btrfs balance start -f -sprofiles=single /mnt/btrfs-progs-tests > btrfs balance start -f -sconvert=single /mnt/btrfs-progs-tests > btrfs balance start -f -sdevid=1 /mnt/btrfs-progs-tests > btrfs device add -f /dev/sda10 /mnt/btrfs-progs-tests > btrfs device del /dev/sda10 /mnt/btrfs-progs-tests > btrfs device stats /dev/sda6 > btrfs device stats -z /dev/sda6 > btrfs device stats /mnt/btrfs-progs-tests > btrfs device stats -z /mnt/btrfs-progs-tests > btrfs device usage /mnt/btrfs-progs-tests > btrfs scrub status /mnt/btrfs-progs-tests > btrfs scrub start -B /mnt/btrfs-progs-tests > btrfs scrub start -B -d /mnt/btrfs-progs-tests > btrfs scrub start -B -r /mnt/btrfs-progs-tests > btrfs scrub status /mnt/btrfs-progs-tests > btrfs scrub start /mnt/btrfs-progs-tests > btrfs scrub status /mnt/btrfs-progs-tests > btrfs scrub status /mnt/btrfs-progs-tests > btrfs scrub status -d /mnt/btrfs-progs-tests > btrfs scrub status -R /mnt/btrfs-progs-tests > btrfs scrub status /mnt/btrfs-progs-tests > btrfs scrub start /dev/sda6 > btrfs scrub status /dev/sda6 > btrfs scrub status /dev/sda6 > btrfs scrub status -d /dev/sda6 > btrfs scrub status -R /dev/sda6 > btrfs scrub status /dev/sda6 > btrfs subvolume snapshot -r /mnt/btrfs-progs-tests /mnt/btrfs-progs-tests/snap1 > btrfs send -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 > btrfs send -e -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 > btrfs send --no-data -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 > btrfs quota enable /mnt/btrfs-progs-tests > btrfs quota rescan /mnt/btrfs-progs-tests > btrfs quota rescan -s /mnt/btrfs-progs-tests > btrfs quota rescan -w /mnt/btrfs-progs-tests > btrfs quota disable /mnt/btrfs-progs-tests > btrfs quota enable /mnt/btrfs-progs-tests > btrfs qgroup create 1/5 /mnt/btrfs-progs-tests > btrfs qgroup create 2/5 /mnt/btrfs-progs-tests > btrfs qgroup assign 1/5 2/5 /mnt/btrfs-progs-tests > btrfs qgroup limit 1G 1/5 /mnt/btrfs-progs-tests > btrfs qgroup show /mnt/btrfs-progs-tests > btrfs qgroup show -p -c -r -e -F -f /mnt/btrfs-progs-tests > btrfs qgroup remove 1/5 2/5 /mnt/btrfs-progs-tests > btrfs qgroup destroy 2/5 /mnt/btrfs-progs-tests > btrfs qgroup destroy 1/5 /mnt/btrfs-progs-tests > btrfs quota disable /mnt/btrfs-progs-tests > btrfs replace start -f -B /dev/sda6 /dev/sda10 /mnt/btrfs-progs-tests > btrfs replace status /mnt/btrfs-progs-tests > btrfs replace start -f -B /dev/sda10 /dev/sda6 /mnt/btrfs-progs-tests > btrfs-convert /dev/sda6 > btrfs-convert -r /dev/sda6 > btrfs-convert -d /dev/sda6 > btrfs-convert -i /dev/sda6 > btrfs-convert -n /dev/sda6 > btrfs-convert -N 4096 /dev/sda6 > btrfs-convert -l test /dev/sda6 > btrfs-convert -L /dev/sda6 > btrfs-convert --no-progress /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -c 0 /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -c 9 /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -t 0 /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -t 1 /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -t 32 /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -w /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > mkfs.btrfs -f /dev/sda6 > btrfs-image -w /dev/sda6 /tmp/btrfs_image.img > btrfs-image -r /tmp/btrfs_image.img /dev/sda6 > btrfs-image -r -t 0 /tmp/btrfs_image.img /dev/sda6 > btrfs-image -r -t 1 /tmp/btrfs_image.img /dev/sda6 > btrfs-image -r -t 32 /tmp/btrfs_image.img /dev/sda6 > btrfs-image -r -o /tmp/btrfs_image.img /dev/sda6 > 3: Manual check relation source by: > grep DUP *.c > Confirmed that all source are modified. > 4: Use this raid type manually, do some operations in fs, > no error found in command and dmesg. > > Changelog v1->v2: > Fix a bug in v1 which cause no dup chunk created, found by above > check command. > > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> I'm going to put this in the queue of things I'm running tests for this weekend, expect something back from me on Monday about it (based on the patch itself though, I expect that I won't find any issues on the userspace side of things).
On Fri, Nov 13, 2015 at 10:11:37PM +0800, Zhao Lei wrote: > Current code don't support dup profile in single device, except it > is in mixed mode, because following reason: > 1: In some ssd with deduplication function, it have no effect. > 2: For a physical device, it the entire disk broken, -d dup can > not help. > 3: Half performance comparing with single profile. > 4: We have a workaround: Create multi-partition in single device, > and btefs will treat them as multi device. > > Instead of refuse -d dup, we have a better choise: > Give user a chance to select, and output a warning to notice above > problem. > > Test: [...] Thanks. > + warning_on(!mixed && (data_profile & BTRFS_BLOCK_GROUP_DUP) && ssd, > + "DUP have no effect if your SSD have deduplication function"); This seems too specific, I suggest to say something generic that duplicate does not necessrily be stored twice and point to the manual page where we can be detailed as needed. Patch will be added to devel branch soon. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/mkfs.c b/mkfs.c index 72ee290..bbe2ca2 100644 --- a/mkfs.c +++ b/mkfs.c @@ -271,7 +271,7 @@ static int create_raid_groups(struct btrfs_trans_handle *trans, BUG_ON(ret); } - if (!mixed && num_devices > 1 && data_profile) { + if (!mixed && data_profile) { ret = create_one_raid_group(trans, root, BTRFS_BLOCK_GROUP_DATA | data_profile, allocation); @@ -1594,7 +1594,7 @@ int main(int ac, char **av) } } ret = test_num_disk_vs_raid(metadata_profile, data_profile, - dev_cnt, mixed); + dev_cnt, mixed, ssd); if (ret) exit(1); diff --git a/utils.c b/utils.c index 258730d..1e0df81 100644 --- a/utils.c +++ b/utils.c @@ -2428,7 +2428,7 @@ static int group_profile_devs_min(u64 flag) } int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile, - u64 dev_cnt, int mixed) + u64 dev_cnt, int mixed, int ssd) { u64 allowed = 0; @@ -2469,11 +2469,9 @@ int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile, return 1; } - if (!mixed && (data_profile & BTRFS_BLOCK_GROUP_DUP)) { - fprintf(stderr, - "ERROR: DUP for data is allowed only in mixed mode\n"); - return 1; - } + warning_on(!mixed && (data_profile & BTRFS_BLOCK_GROUP_DUP) && ssd, + "DUP have no effect if your SSD have deduplication function"); + return 0; } diff --git a/utils.h b/utils.h index 33b410c..8117ad4 100644 --- a/utils.h +++ b/utils.h @@ -167,7 +167,7 @@ int test_dev_for_mkfs(char *file, int force_overwrite); int get_label_mounted(const char *mount_path, char *labelp); int get_label_unmounted(const char *dev, char *label); int test_num_disk_vs_raid(u64 metadata_profile, u64 data_profile, - u64 dev_cnt, int mixed); + u64 dev_cnt, int mixed, int ssd); int group_profile_max_safe_loss(u64 flags); int is_vol_small(char *file); int csum_tree_block(struct btrfs_root *root, struct extent_buffer *buf,
Current code don't support dup profile in single device, except it is in mixed mode, because following reason: 1: In some ssd with deduplication function, it have no effect. 2: For a physical device, it the entire disk broken, -d dup can not help. 3: Half performance comparing with single profile. 4: We have a workaround: Create multi-partition in single device, and btefs will treat them as multi device. Instead of refuse -d dup, we have a better choise: Give user a chance to select, and output a warning to notice above problem. Test: 1: Tested by xfstests Run with modified xfstests, I add test items of -d dup in single device into btrfs/* and common/rc, run tests of btrfs/*, with all mount option, no regression diffed with v4.3. 2: Tested by btrfs-progs Checked following commands in "-m dup -d dup" fs with memleck checking, all passed: mkfs.btrfs -f --data dup --metadata dup /dev/sda6 btrfs filesystem show /dev/sda6 btrfs filesystem label /dev/sda6 btrfs_label_test btrfs filesystem label /dev/sda6 btrfs device scan --all-devices btrfs device scan /dev/sda6 btrfs device scan /dev/sda6 btrfs device ready /dev/sda6 btrfs check /dev/sda6 btrfs check -s 1 /dev/sda6 btrfs check --repair /dev/sda6 btrfs check --init-csum-tree /dev/sda6 btrfs check --init-extent-tree /dev/sda6 btrfs check --check-data-csum /dev/sda6 btrfs check --qgroup-report /dev/sda6 btrfs rescue super-recover -y /dev/sda6 btrfs rescue zero-log /dev/sda6 btrfs restore -l /dev/sda6 btrfs restore /dev/sda6 / btrfs restore -s /dev/sda6 / btrfs restore -x /dev/sda6 / btrfs restore -m /dev/sda6 / btrfs restore -S /dev/sda6 / btrfs restore -v /dev/sda6 / btrfs restore -i /dev/sda6 / btrfs restore -o /dev/sda6 / btrfs restore -u0 /dev/sda6 / btrfs restore -u1 /dev/sda6 / btrfs restore -D /dev/sda6 / btrfs property list /dev/sda6 btrfs property get /dev/sda6 label btrfs property set /dev/sda6 label test btrfs property set /dev/sda6 label btrfs_label_test btrfs help btrfs help --full btrfs version btrfsck /dev/sda6 btrfs-find-root /dev/sda6 btrfs-find-root -a /dev/sda6 btrfs-map-logical -l1 /dev/sda6 btrfs-map-logical -l1 -c1 /dev/sda6 btrfs-map-logical -l1 -o /tmp/btrfs-map-logic-out /dev/sda6 btrfs-map-logical -l1 -b1 /dev/sda6 btrfs-select-super -s 0 /dev/sda6 btrfs-select-super -s 1 /dev/sda6 btrfstune -S 1 /dev/sda6 btrfstune -f -S 0 /dev/sda6 btrfstune -r /dev/sda6 btrfstune -x /dev/sda6 btrfstune -n /dev/sda6 btrfstune -f -U 00000000-0000-0000-0000-000000000000 /dev/sda6 btrfstune -f -u /dev/sda6 btrfs-calc-size /dev/sda6 btrfs-calc-size -v /dev/sda6 btrfs-calc-size -b /dev/sda6 btrfs-debug-tree /dev/sda6 btrfs-debug-tree -e /dev/sda6 btrfs-debug-tree -d /dev/sda6 btrfs-debug-tree -r /dev/sda6 btrfs-debug-tree -R /dev/sda6 btrfs-debug-tree -u /dev/sda6 btrfs-debug-tree -b 0 /dev/sda6 btrfs-debug-tree -t 0 /dev/sda6 btrfs-debug-tree -t 2 /dev/sda6 btrfs-show-super /dev/sda6 btrfs-show-super -i 0 /dev/sda6 btrfs-show-super -i 1 /dev/sda6 btrfs-show-super -i 2 /dev/sda6 btrfs-show-super -a /dev/sda6 btrfs-show-super -f /dev/sda6 btrfs-show-super -F /dev/sda6 btrfs subvolume list /mnt/btrfs-progs-tests btrfs subvolume create /mnt/btrfs-progs-tests/mysubvol btrfs subvolume list /mnt/btrfs-progs-tests btrfs subvolume get-default /mnt/btrfs-progs-tests btrfs subvolume set-default 258 /mnt/btrfs-progs-tests btrfs subvolume get-default /mnt/btrfs-progs-tests btrfs subvolume set-default /mnt/btrfs-progs-tests btrfs subvolume snapshot /mnt/btrfs-progs-tests/mysubvol /mnt/btrfs-progs-tests/mysubvol_snap btrfs subvolume list /mnt/btrfs-progs-tests btrfs subvolume find-new /mnt/btrfs-progs-tests 0 btrfs subvolume find-new /mnt/btrfs-progs-tests 0 btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0 btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0 btrfs subvolume show /mnt/btrfs-progs-tests btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol_snap btrfs subvolume sync /mnt/btrfs-progs-tests btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol_snap btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol btrfs subvolume sync /mnt/btrfs-progs-tests btrfs filesystem df /mnt/btrfs-progs-tests btrfs filesystem show /mnt/btrfs-progs-tests btrfs filesystem sync /mnt/btrfs-progs-tests btrfs filesystem label /mnt/btrfs-progs-tests btrfs_label_test btrfs filesystem label /mnt/btrfs-progs-tests btrfs filesystem usage /mnt/btrfs-progs-tests btrfs filesystem defragment -s 1024 -l 2048 /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_0 btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_1 btrfs filesystem defragment -f /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_2 btrfs filesystem defragment -czlib /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_3 btrfs filesystem defragment -clzo /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_4 btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir btrfs filesystem defragment -r /mnt/btrfs-progs-tests/filesystem_test_dir btrfs filesystem defragment /mnt/btrfs-progs-tests btrfs filesystem resize 1:-10M /mnt/btrfs-progs-tests btrfs filesystem resize 1:max /mnt/btrfs-progs-tests btrfs balance start /mnt/btrfs-progs-tests btrfs balance start -v /mnt/btrfs-progs-tests btrfs balance start -f /mnt/btrfs-progs-tests btrfs balance status -v /mnt/btrfs-progs-tests btrfs balance pause /mnt/btrfs-progs-tests btrfs balance status /mnt/btrfs-progs-tests btrfs balance resume /mnt/btrfs-progs-tests btrfs balance status -v /mnt/btrfs-progs-tests btrfs balance cancel /mnt/btrfs-progs-tests btrfs balance start -dprofiles=single /mnt/btrfs-progs-tests btrfs balance start -dconvert=single /mnt/btrfs-progs-tests btrfs balance start -ddevid=1 /mnt/btrfs-progs-tests btrfs balance start -f -mprofiles=single /mnt/btrfs-progs-tests btrfs balance start -f -mconvert=single /mnt/btrfs-progs-tests btrfs balance start -f -mdevid=1 /mnt/btrfs-progs-tests btrfs balance start -f -sprofiles=single /mnt/btrfs-progs-tests btrfs balance start -f -sconvert=single /mnt/btrfs-progs-tests btrfs balance start -f -sdevid=1 /mnt/btrfs-progs-tests btrfs device add -f /dev/sda10 /mnt/btrfs-progs-tests btrfs device del /dev/sda10 /mnt/btrfs-progs-tests btrfs device stats /dev/sda6 btrfs device stats -z /dev/sda6 btrfs device stats /mnt/btrfs-progs-tests btrfs device stats -z /mnt/btrfs-progs-tests btrfs device usage /mnt/btrfs-progs-tests btrfs scrub status /mnt/btrfs-progs-tests btrfs scrub start -B /mnt/btrfs-progs-tests btrfs scrub start -B -d /mnt/btrfs-progs-tests btrfs scrub start -B -r /mnt/btrfs-progs-tests btrfs scrub status /mnt/btrfs-progs-tests btrfs scrub start /mnt/btrfs-progs-tests btrfs scrub status /mnt/btrfs-progs-tests btrfs scrub status /mnt/btrfs-progs-tests btrfs scrub status -d /mnt/btrfs-progs-tests btrfs scrub status -R /mnt/btrfs-progs-tests btrfs scrub status /mnt/btrfs-progs-tests btrfs scrub start /dev/sda6 btrfs scrub status /dev/sda6 btrfs scrub status /dev/sda6 btrfs scrub status -d /dev/sda6 btrfs scrub status -R /dev/sda6 btrfs scrub status /dev/sda6 btrfs subvolume snapshot -r /mnt/btrfs-progs-tests /mnt/btrfs-progs-tests/snap1 btrfs send -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 btrfs send -e -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 btrfs send --no-data -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1 btrfs quota enable /mnt/btrfs-progs-tests btrfs quota rescan /mnt/btrfs-progs-tests btrfs quota rescan -s /mnt/btrfs-progs-tests btrfs quota rescan -w /mnt/btrfs-progs-tests btrfs quota disable /mnt/btrfs-progs-tests btrfs quota enable /mnt/btrfs-progs-tests btrfs qgroup create 1/5 /mnt/btrfs-progs-tests btrfs qgroup create 2/5 /mnt/btrfs-progs-tests btrfs qgroup assign 1/5 2/5 /mnt/btrfs-progs-tests btrfs qgroup limit 1G 1/5 /mnt/btrfs-progs-tests btrfs qgroup show /mnt/btrfs-progs-tests btrfs qgroup show -p -c -r -e -F -f /mnt/btrfs-progs-tests btrfs qgroup remove 1/5 2/5 /mnt/btrfs-progs-tests btrfs qgroup destroy 2/5 /mnt/btrfs-progs-tests btrfs qgroup destroy 1/5 /mnt/btrfs-progs-tests btrfs quota disable /mnt/btrfs-progs-tests btrfs replace start -f -B /dev/sda6 /dev/sda10 /mnt/btrfs-progs-tests btrfs replace status /mnt/btrfs-progs-tests btrfs replace start -f -B /dev/sda10 /dev/sda6 /mnt/btrfs-progs-tests btrfs-convert /dev/sda6 btrfs-convert -r /dev/sda6 btrfs-convert -d /dev/sda6 btrfs-convert -i /dev/sda6 btrfs-convert -n /dev/sda6 btrfs-convert -N 4096 /dev/sda6 btrfs-convert -l test /dev/sda6 btrfs-convert -L /dev/sda6 btrfs-convert --no-progress /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -c 0 /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -c 9 /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -t 0 /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -t 1 /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -t 32 /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -w /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 mkfs.btrfs -f /dev/sda6 btrfs-image -w /dev/sda6 /tmp/btrfs_image.img btrfs-image -r /tmp/btrfs_image.img /dev/sda6 btrfs-image -r -t 0 /tmp/btrfs_image.img /dev/sda6 btrfs-image -r -t 1 /tmp/btrfs_image.img /dev/sda6 btrfs-image -r -t 32 /tmp/btrfs_image.img /dev/sda6 btrfs-image -r -o /tmp/btrfs_image.img /dev/sda6 3: Manual check relation source by: grep DUP *.c Confirmed that all source are modified. 4: Use this raid type manually, do some operations in fs, no error found in command and dmesg. Changelog v1->v2: Fix a bug in v1 which cause no dup chunk created, found by above check command. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> --- mkfs.c | 4 ++-- utils.c | 10 ++++------ utils.h | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-)