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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to