generic: test MADV_POPULATE_READ with IO errors
[xfstests-dev.git] / tests / btrfs / 053
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2014 Filipe Manana.  All Rights Reserved.
4 #
5 # FS QA Test No. btrfs/053
6 #
7 # Verify that btrfs send is able to replicate xattrs larger than PATH_MAX.
8 # This is possible if the b+tree leaf size is larger than 4Kb (mkfs.btrfs's
9 # default is max(16Kb, PAGE_SIZE) as of btrfs-progs v3.12, and max(4Kb,
10 # PAGE_SIZE in older versions).
11 #
12 # This issue is fixed by the following linux kernel btrfs patch:
13 #
14 #   Btrfs: send, use the right limits for xattr names and values
15 #
16 . ./common/preamble
17 _begin_fstest auto quick send
18
19 # Override the default cleanup function.
20 _cleanup()
21 {
22     rm -fr $send_files_dir
23     rm -fr $tmp
24 }
25
26 # Import common functions.
27 . ./common/filter
28 . ./common/attr
29
30 # real QA test starts here
31 _supported_fs btrfs
32 _require_test
33 _require_scratch
34 _require_fssum
35 _require_attrs
36
37 # max(16384, PAGE_SIZE) is the default leaf/node size on btrfs-progs v3.12+.
38 # Older versions just use max(4096, PAGE_SIZE).
39 # mkfs.btrfs can't create an fs with a leaf/node size smaller than PAGE_SIZE.
40 leaf_size=$(echo -e "16384\n`getconf PAGE_SIZE`" | sort -nr | head -1)
41
42 send_files_dir=$TEST_DIR/btrfs-test-$seq
43
44 rm -fr $send_files_dir
45 mkdir $send_files_dir
46
47 _scratch_mkfs "-l $leaf_size" >/dev/null 2>&1
48 _scratch_mount
49
50 echo "hello world" > $SCRATCH_MNT/foobar
51
52 $SETFATTR_PROG -n user.xattr_name_1 -v `$PERL_PROG -e 'print "A" x 6000;'` \
53         $SCRATCH_MNT/foobar
54
55 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
56 run_check $FSSUM_PROG -A -f -w $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
57
58 # Update existing xattr value and add a new xattr too.
59 $SETFATTR_PROG -n user.xattr_name_1 -v `$PERL_PROG -e 'print "Z" x 6666;'` \
60         $SCRATCH_MNT/foobar
61 $SETFATTR_PROG -n user.xattr_name_2 -v `$PERL_PROG -e 'print "U" x 5555;'` \
62         $SCRATCH_MNT/foobar
63
64 _run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
65 run_check $FSSUM_PROG -A -f -w $send_files_dir/2.fssum \
66         -x $SCRATCH_MNT/mysnap2/mysnap1 $SCRATCH_MNT/mysnap2
67
68 _run_btrfs_util_prog send -f $send_files_dir/1.snap $SCRATCH_MNT/mysnap1
69 _run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
70         $SCRATCH_MNT/mysnap2
71
72 _scratch_unmount
73 _check_scratch_fs
74
75 _scratch_mkfs "-l $leaf_size" >/dev/null 2>&1
76 _scratch_mount
77
78 _run_btrfs_util_prog receive -f $send_files_dir/1.snap $SCRATCH_MNT
79 run_check $FSSUM_PROG -r $send_files_dir/1.fssum $SCRATCH_MNT/mysnap1
80
81 _run_btrfs_util_prog receive -f $send_files_dir/2.snap $SCRATCH_MNT
82 run_check $FSSUM_PROG -r $send_files_dir/2.fssum $SCRATCH_MNT/mysnap2
83
84 status=0
85 exit