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 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).