Commit Graph

255 Commits

Author SHA1 Message Date
David Sterba 2fd80caf71 btrfs: use full subcommand names
Update the remaining calls to 'btrfs' that use shortened command
names.  Use of full names is recommended to avoid any ambiguities.

Signed-off-by: David Sterba <dsterba@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-03-31 13:09:27 +08:00
David Sterba df8c7225ba btrfs: reorder arguments so that options come first
The option parser in the btrfs utility is going to be updated and
will accept arguments in a stricter form, namely that options must
come before their non-option argument. Otherwise eg. the -f option
in send would be understood as another path and not an option
leading to many test failures.

The canonical form should be:

  btrfs command subcommand [-options] [arguments]

Signed-off-by: David Sterba <dsterba@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-03-31 13:09:16 +08:00
Goldwyn Rodrigues c26958bc5d btrfs/139: creation/deletion within qgroup limits
If we create and delete files within the qgroup limits, qg->reserved
(allocations before commits) over-inflates and causes -EDQUOT to be
returned pre-maturely.

Also, 32/64bit data-type exchanges can cause reserved (u64) to go
negative (very large) and -EDQUOT is returned pre-maturely.

Will be fixed by patches with subjects:
btrfs: Retry after commit on getting EDQUOT
btrfs: Change qgroup_meta_rsv to 64bit

Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-03-15 18:55:38 +08:00
Eric Biggers fe5461d6e3 btrfs/020: add _require_loop
btrfs/020 uses a loopback device, so it should have _require_loop.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-03-13 11:59:04 +08:00
Omar Sandoval 69924090d3 btrfs: test decompression in the middle of large extents
This is a regression test for "Btrfs: fix btrfs_decompress_buf2page()".
It fails for zlib on v4.10-rc[1-7].

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-02-19 07:59:33 +08:00
Filipe Manana c8abfdd930 btrfs: send/receive with sparse files
Test that both a full and incremental btrfs send operation preserves
file holes.

This used to fail when the filesystem had the NO_HOLES feature enabled,
that is, when the test is run with MKFS_OPTIONS="-O no-holes".

This is fixed by the following patch for the linux kernel:

  "Btrfs: incremental send, fix unnecessary hole writes for sparse files"

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-02-15 18:02:15 +08:00
Anand Jain 96459fb687 fstests: btrfs: Use compressible data
/dev/urandom is incompressible and, /dev/zero is highly compressible,
so both are less effective in testing the compress code logic in btrfs.

This patch introduces a text data generator
 cat /dev/urandom | od
to populate the files where /dev/urandom is currently being used in the
btrfs test cases.

And updates the _populate_fs() with a new option -c, so to instruct
to use the compressible data to populate the file(s).

[eguan: add comments, fix indention]

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-02-07 12:15:33 +08:00
Lakshmipathi.G 34d728d280 btrfs: check btrfs-convert with extent and non-extent source
This is used to check the source which contains combination of Ext3
files in non-extent format and  Ext4 extent-files. And validate the
file md5sums before and after conversion.

btrfs/012: BTRFS_CONVERT_PROG,E2FSCK_PROG definitions reused from
common/config

Signed-off-by: Lakshmipathi.G <Lakshmipathi.G@giis.co.in>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-02-03 12:48:23 +08:00
Omar Sandoval 06e8d3e000 btrfs: setxattr on subvolume directory
This is a regression test for "Btrfs: disable xattr operations on
subvolume directories". On v4.9, it will result in an aborted
transaction.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-27 16:06:12 +08:00
Filipe Manana 8485d738b4 btrfs: incremental send after replacing directory
Test that an incremental send operation works when in both snapshots
there are two directory inodes that have the same number but
different generations and have an entry with the same name that
corresponds to different inodes in each snapshot.

The btrfs issue is fixed by the following patch for the linux kernel:

  "Btrfs: incremental send, do not issue invalid rmdir operations"

Signed-off-by: Robbie Ko <robbieko@synology.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-20 20:05:56 +08:00
Filipe Manana 7cf665d9a4 btrfs: incremental send after moving a directory
Test that an incremental send operation works after moving a
directory into a new parent directory, deleting its previous parent
directory and creating a new inode that has the same inode number as
the old parent.

This issue is fixed by the following patch for the linux kernel:

  "Btrfs: incremental send, do not delay rename when parent inode is new"

Signed-off-by: Robbie Ko <robbieko@synology.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-20 20:05:56 +08:00
Filipe Manana 6fc65f42eb btrfs: incremental send after replacing a top level inode
Test that an incremental send operation does not fail when a new
inode replaces an old inode that has the same number but different
generation, and both are direct children of the subvolume/snapshot
root.

This is fixed by the following patch for the linux kernel:

  "Btrfs: send, fix failure to rename top level inode due to name
   collision"

Signed-off-by: Robbie Ko <robbieko@synology.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-20 20:05:56 +08:00
David Sterba acb8acd236 common/btrfs: add helper to detect dump-super or btrfs-show-super
The command btrfs-show-super is not supposed to be distributed but
was useful for testing. The same functionality is now present as
'btrfs inspect-internal dump-super', let's detect which one is
available and use it in btrfs/011 that fails with btrfs-progs 4.8.4+

Signed-off-by: David Sterba <dsterba@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-17 11:59:59 +08:00
Darrick J. Wong 0bfb84110b common: add leading underscore to get_block_size
Add a leading underscore to the get_block_size helper since it's a
common function.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-15 13:56:45 +08:00
Su Yue 5858c3eb39 btrfs/006: Fix false alert due to output change
Btrfs-progs v4.9 changed "device status" output by adding one more
space, which differs from golden output.

Fix it by using filter '_filter_spaces' to convert multi space into
one.

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-03 11:41:36 +08:00
Su Yue 06557299a5 btrfs/104: Redirect mkfs output to avoid false alert
btrfs/104 doesn't redirect mkfs output correctly, which leads to
false alert.

Fix it.

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-30 14:18:30 +08:00
Chandan Rajendra f7a52fc6db btrfs/012: Enable test to be executed on non-4k block size filesystems
To get the test to work on non-4k block sized filesystems, this
commit obtains the block size of the Btrfs filesystem from
$TEST_DIR.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-28 19:35:47 +08:00
Qu Wenruo 2333197d30 btrfs/132: wait the writer to avoid EBUSY
The kill and wait method will only wait for the children process to
exit, while the xfs_io can still run at background.

This makes the test always fails on HDD backed physical machine.

Use the "while ps aux | grep" method in btrfs/069 to truely wait the
xfs_io to finish.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-28 19:19:03 +08:00
Qu Wenruo 312e7ce2da btrfs/047: Remove test since upstream don't accept stream-version
Btrfs upstream doesn't accept stream-version, so the test is never
ran on upstream kernel nor btrfs-progs.

Just remove it.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-24 16:47:12 +08:00
Eryu Guan 596a068bf1 fstests: teach _scratch_mkfs to handle mkfs option conflicts
Currently in _scratch_mkfs only xfs and ext4 could handle the mkfs
failure caused by conflicts between $MKFS_OPTIONS and mkfs options
specified by tests, because of _scratch_mkfs_xfs and
_scratch_mkfs_ext4. This is a very useful functionality that allows
tests to specify mkfs options safely and to test specific fs
configurations, without worrying about mkfs failures caused by these
options.

Now teach _scratch_mkfs to handle such mkfs option conflicts for
other filesystems too, i.e. mkfs again only with mkfs options
specified by tests. Also add the ability to filter unnecessary
messages from mkfs stderr.

Also update some btrfs tests to throw away _scratch_mkfs stdout,
because previously _scratch_mkfs did this for btrfs.

Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-19 10:34:49 +08:00
Qu Wenruo 180843c1f4 btrfs: Use _require_btrfs_qgroup_report to replace open code
Introduce new _require_btrfs_qgroup_report function, which will
check the accessibility to "btrfs check --qgroup-report", then set a
global flag to info _check_scratch_fs() to do extra qgroup check.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-09 15:55:19 +08:00
Qu Wenruo 47bb69de19 common/btrfs: rename and enhance _require_btrfs to _require_btrfs_command
Rename _require_btrfs() to _require_btrfs_command() to avoid
confusion, as all other _require_btrfs_* has a quite clear suffix,
like _require_btrfs_mkfs_feature() or _require_btrfs_fs_feature().

Also enhance _require_btrfs_command() to accept 2nd level commands
or options.

Options will be determined by the first "-" char.  This is quite
useful for case like "btrfs inspect-internal dump-tree" and "btrfs
check --qgroup-report".

[eguan: make local vars in _require_btrfs_command "local"]

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-09 15:54:19 +08:00
Filipe Manana 47038bbea5 btrfs/124-5: add missing umount for raid5 tests
The tests mount the second device in the device pool but never
unmount it, causing the next test to fail.

Example:

$ cat local.config
export TEST_DEV=/dev/sdb
export TEST_DIR=/home/fdmanana/btrfs-tests/dev
export SCRATCH_MNT="/home/fdmanana/btrfs-tests/scratch_1"
export SCRATCH_DEV_POOL="/dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg"
export FSTYP=btrfs

$ ./check btrfs/125 btrfs/126
FSTYP         -- btrfs
PLATFORM      -- Linux/x86_64 debian3 4.8.0-rc8-btrfs-next-35+
MKFS_OPTIONS  -- /dev/sdc
MOUNT_OPTIONS -- /dev/sdc /home/fdmanana/btrfs-tests/scratch_1

btrfs/125 23s ... 22s
btrfs/126 1s ... - output mismatch (see /home/fdmanana/git/hub/xfstests/results//btrfs/126.out.bad)
    --- tests/btrfs/126.out	2016-11-24 06:11:42.048372385 +0000
    +++ /home/fdmanana/git/hub/xfstests/results//btrfs/126.out.bad	2016-11-24 06:16:35.987988895 +0000
    @@ -1,2 +1,5 @@
     QA output created by 126
    -pwrite: Disk quota exceeded
    +ERROR: /dev/sdc is mounted
    +mount: /dev/sdc is already mounted or /home/fdmanana/btrfs-tests/scratch_1 busy
    +       /dev/sdc is already mounted on /home/fdmanana/btrfs-tests/scratch_1
    +/home/fdmanana/btrfs-tests/scratch_1/test_file: Disk quota exceeded
    ...
    (Run 'diff -u tests/btrfs/126.out /home/fdmanana/git/hub/xfstests/results//btrfs/126.out.bad'  to see the entire diff)
Ran: btrfs/125 btrfs/126
Failures: btrfs/126
Failed 1 of 2 tests

So just make sure those test unmount the device before they finish.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-25 20:19:03 +08:00
Qu Wenruo 089ecbf486 btrfs: Check false ENOSPC bug caused by incorrect metadata reserve
Due to the fact that btrfs uses different max extent size for
compressed and non-compressed write, it calculates metadata
reservation incorrectly.

This can leads to false ENOSPC alert for compressed write.

This test case will check it by using small fs and do parallel write
to trigger it.

It's highly recommened to use MOUNT_OPTIONS="-o compress" and
MKFS_OPTIONS="-n 64k" to trigger it. Without compression, it won't
be triggered.

The fix is not merged and may change in the future, but the function
is good enough:

btrfs: improve inode's outstanding_extents computation
btrfs: fix false enospc for compression

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-13 14:01:06 +08:00
Dave Chinner c52086226b filter: xfs_io output has dropped "64" from error messages
Upstream xfs_io has been converted to always use LFS compliant
(i.e. 64 bit) pwrite() rather than pwrite64(). Similar changes have
been made for multiple syscalls that have "*64" variants. hence the
error output of all these commands has changed, such as "pwrite64:
..." to "pwrite: ....".

Make a filter to catch the *64 variants and strip it, and
convert all the golden output to use the non-*64 variant. This will
make all golden output matching work correctly regardless of what
version of xfs_io is in use.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-03 10:41:41 +08:00