Amir Goldstein [Tue, 5 Feb 2019 19:31:18 +0000 (21:31 +0200)]
xfs/068: Verify actual file count instead of reported file count
This test has the number of files/dirs created by xfsrestore hardcoded
in golden output.
When fsstress is added new ops, the number of files/dirs created with
the same random seed changes and this regularly breaks this test,
so when new fsstress ops are added they should be either added to the
dump test blacklist or golden output of this test needs to be ammended
to reflect the change.
The golden output includes only the file count reported by xfsrestore
and test does not even verify that this is the correct file count.
Instead, leave the golden output neutral and explicitly verify that
file count before and after the test are the same.
With this change, the test becomes agnostic to fsstress ops and we
could also stop blacklisting clone/dedup/copy ops if we want.
xfs/252: requires fallocate support for preallocation
xfs/252 has a few feature tests, but misses checking for preallocation
support. Because of that it will fail instead of not being run for
and XFS file system in always COW mode.
It generates a pseudorandom 64-bit candidate offset for the
destination file where we'll land the splice data, and then caps the
offset at maxfsize (which is 2^63- 1 on x64), which effectively means
that the data will appear at a very high file offset which creates
large (sparse) files very quickly.
That's not what we want, and some case likes shared/009 will take
forever to run md5sum on lots of huge files.
Vivek Goyal [Mon, 4 Feb 2019 18:34:54 +0000 (13:34 -0500)]
overlay/060: Use falloc to make sure a meta copy file got copied up
Overlayfs might copy up data of file on first write of file (and
not necessarily upon open of file). So call falloc file opened
with O_RDWR and after that data must have been copied up.
[Eryu: add _require_xfs_io_command "falloc" to make sure underlying
fs have fallocate(2) support]
Amir Goldstein [Sun, 27 Jan 2019 08:38:50 +0000 (10:38 +0200)]
overlay/061: enhance mmap ro/rw inconsistencies test
overlay/061 is currently the only overlay test that is expected to
fail on upstream kernel.
It is a flavor of test overlay/016 with mread in stead of pread.
The ro/rw inconsistencies related to file read()/write() API were
fixed with stacked file operations in v4.19, but the ro/rw
inconsistencies related to shared mmap read/write remain to be
fixed.
The test currently checks cache coherency between mmap read and file
write(), but this sort of cache coherency is a Linux implementation
detail not a requirement of the API.
Instead of mread vs. pwrite, check consistency of mread vs. mwrite
to shared mmap, which is required by the MMAP_SHARED API.
Because we can, perform the test on shared memory that maps files
that are already close and check also that mwrite after file is
closed is persistent. This adds test coverage for future overlayfs
writeback code.
Vivek Goyal [Wed, 30 Jan 2019 18:59:37 +0000 (13:59 -0500)]
overlay: Do not lose security.capability xattr over metadata only file copy-up
Extend test 064 to check security.capability xattr is not lost over
copy-up of a metadata only file. This requires mounting overlay with
option metacopy=on and first trigger metadata only copy-up and then
trigger data copy-up.
Qu Wenruo [Tue, 29 Jan 2019 12:32:21 +0000 (20:32 +0800)]
btrfs: Test if btrfs will commit too many transactions for balance
Kernel commit 64403612b73a ("btrfs: rework
btrfs_check_space_for_delayed_refs") is introducing a regression for
btrfs balance performance.
Since that commit will cause btrfs to commit too many transactions
for nothing during balance/relocation, it will slow balance
dramatically even we only need to relocate several megabytes.
This test case will catch the problem by using super block
generation as failure criteria.
For small chunk relocated, we will commit 6 transactions for each
block group, and the test case should only have 2 block groups, it
should only commit 12 transactions.
This test case will use 120 as the threshold to detect the failure.
And in my test environment, with kernel fix btrfs committed 14
transactions. While without the fix btrfs committed 209
transactions.
So the test case should be enough to detect the regression, while still
keep the runtime small enough for failure.
Qu Wenruo [Tue, 29 Jan 2019 12:32:20 +0000 (20:32 +0800)]
btrfs: Test if btrfs hits EDQUOT without trying to reclaim some space
Commit a514d63882c3 ("btrfs: qgroup: Commit transaction in advance
to reduce early EDQUOT") is no longer forcing transaction commit to
reclaim space, and only commits transaction asynchronously in
advance to address it.
However the criteria used in async transaction commit is not
comprehensive, thus it doesn't reclaim space automatically.
This test case will check the behavior by:
1) Falloc a large padding file
This file will take 90% of the qgroup limit
2) Sync the fs
To reflect the qgroup changes
3) Delete the file
Qgroup won't reclaim the space until transaction committed.
4) Try to write a file
If kernel not fixed, qgroup will not automatically commit transaction
to reclaim the freed space and hit EDQUOT.
This bug is going to be fixed by a patch for kernel titled:
"btrfs: qgroup: Make qgroup async transaction commit more aggressive".
Jeff Mahoney [Mon, 21 Jan 2019 16:33:10 +0000 (11:33 -0500)]
btrfs/010: don't run without /sys/fs/btrfs
Older kernels don't have /sys/fs/btrfs. btrfs/010 will happily run
until it goes to check its work against sysfs and finds those files
don't exist. This patch introduces a require check to ensure that
the sysfs files are present before running.
Signed-off-by: Jeff Mahoney <jeffm@suse.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Fri, 25 Jan 2019 11:46:24 +0000 (11:46 +0000)]
btrfs/081: fix killing of reader loop subshell
The test creates a subshell that keeps running the 'cat' command
against a test file in an infinite loop, and after it kills the
subshell it unmounts the filesystem, after which point any 'cat'
subcommand that runs after or at that time will fail resulting in an
unexpected golden output:
$ ./check btrfs/081
btrfs/081 3s ... - output mismatch (see /home/fdmanana/git/hub/xfstests/results//btrfs/081.out.bad)
--- tests/btrfs/081.out 2018-09-16 21:30:48.501104179 +0100
+++ /home/fdmanana/git/hub/xfstests/results//btrfs/081.out.bad 2019-01-24 20:36:18.989746185 +0000
@@ -206,5 +206,6 @@
Verifying file digests after cloning 14968c092c68e32fa35e776392d14523 SCRATCH_MNT/foo 14968c092c68e32fa35e776392d14523 SCRATCH_MNT/bar
+cat: /mnt/scratch/bar: No such file or directory
Verifying target file digest after umount + mount 14968c092c68e32fa35e776392d14523 SCRATCH_MNT/bar
...
(Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/btrfs/081.out /home/fdmanana/git/hub/xfstests/results//btrfs/081.out.bad' to see the entire diff)
Ran: btrfs/081
Failures: btrfs/081
Failed 1 of 1 tests
Fix that by adding a proper trap to the reader loop function so that
the subshell waits for executed 'cat' commands when it receives
SIGTERM.
Zorro Lang [Wed, 23 Jan 2019 07:34:55 +0000 (15:34 +0800)]
common/dump: disable splice from FSSTRESS_AVOID
New fsstress operation breaks fs dump/restore testing which use
fsstress, e.g xfs/068.
In _create_dumpdir_stress_num, disable splice in fsstress so that we
dump exactly the same set of files and directories.
Quote Dave's comments for future reference
"
fsstress is just creating regular files differently. It has no
impact on xfsdump does except to change the number of files created
and the directory layout.
If this new functionality were creating a new type of file that
xfsdump has to handle, or adding new attributes or changing the
metadata of the existing files, then we want to make sure xfsdump is
tested against that, and so we'd be changing the golden output after
careful checking that both xfsdump and xfs_restore are working
correctly and the file count is correct.
But when all we are doing is creating normal, regular files just
with a different syscall, it makes no sense to perturb the existing
test then we have to go and validate that the new set of files being
tested is actually scanned correctly, is complete and correct. Using
a blacklist to avoid unnecessary perturbation such as in cases like
this is the right thing to do because we've had to determine if the
new functionality is a useful addition to xfsdump/restore test
coverage or not.
"
[Eryu: add Dave's comments in commit log for future reference]
Signed-off-by: Zorro Lang <zlang@redhat.com> Suggested-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Brian Foster [Tue, 15 Jan 2019 14:09:45 +0000 (09:09 -0500)]
generic: test writepage cached mapping validity
XFS has a bug where page writeback can end up sending data to the
wrong location due to a stale, cached file mapping. Add a test to
trigger this problem by racing background writeback with a
truncate/rewrite of the final page of the file.
Qu Wenruo [Fri, 11 Jan 2019 05:01:51 +0000 (13:01 +0800)]
btrfs: test for deadlock between snapshot delete and other read-write operations
Commit fb235dc06fac ("btrfs: qgroup: Move half of the qgroup
accounting time out of commit trans") could cause ABBA deadlock
between backref lookup with write lock hold (subvolume deletion) and
other read/write operations.
It's going to be fixed by "btrfs: qgroup: Don't trigger backref walk
at delayed ref insert time".
This test will generate pwrite background workload, along with
constant subvolume creation and deletion to trigger the bug.
It needs some time to generate enough files to bump the tree height
to trigger the bug.
In my test environment, with 'unsafe' cache mode for the VM, it
triggers the bug at around 70~90 seconds. So I leave the default
runtime to 120s to make sure the bug will be triggered.
Darrick J. Wong [Fri, 4 Jan 2019 23:14:48 +0000 (15:14 -0800)]
generic: test that xattrs can have slashes in their names
Eric Sandeen recently found a bug in xfs_repair that flagged extended
attribute names containing "/" as corrupt and purged them. There's
nothing in the IRIX or Linux manuals that say anything about slashes not
being allowed (and Linux certainly allows this) so let's make sure this
continues to work.
[Eryu: use $SETFATTR and _getfattr helper]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Cui Yue [Thu, 10 Jan 2019 03:14:59 +0000 (22:14 -0500)]
generic/423: statx mask of the reference file is different from the original file
When running xfstests generic/423 to test system call statx() on
hard link files of NFS, it fails. error message:
[!] attr 'stx_mask' differs from ref file, 7ff != e0
The values of parameter "mask" between the original file and the
reference file are different. One is STATX_ALL;
The other is STATX_ATIME | STATX_BTIME | STATX_CTIME | STATX_MTIME.
Modify the function get_reference() to pass the "mask" in, and
change STATX_ATIME | STATX_BTIME | STATX_CTIME | STATX_MTIME to
"mask".
Nikolay Borisov [Fri, 4 Jan 2019 14:31:16 +0000 (16:31 +0200)]
Revert "common/config: create $RESULT_BASE before dumping kmemleak leaks"
This commit tried to fix the brokennes of the kmemleak support but it
inadvertently broke the creation of the RESULT_BASE directory which lead to
problems creating check.time file. Turns out kmemleak support in xfstests has
more problems and it needs to be majorly refactor and this commit doesn't
really solve the problem. For the time being just revert to at least allow
older configuration files, which have explicitly set RESULT_BASE to work.
Hou Tao [Fri, 4 Jan 2019 08:19:26 +0000 (16:19 +0800)]
generic/131: wait until the server is ready or timeout
When running xfstests under KVM VM and the load of host is high,
only delaying 1s and checking the readiness of server are not
enough, and the test case will fail early.
Fix it by repeatedly checking the readiness signal until it's found,
or timeout is triggered.
[Eryu: check if lock server died or not, like v1 patch did]
Hou Tao [Fri, 4 Jan 2019 08:19:27 +0000 (16:19 +0800)]
fsx: check ENOSYS in test_copy_range() & test_fallocate()
In configure script, we only check whether or not the build of test
program succeeds, but that doesn't mean the kernel has implemented
the syscall, so checking for this case.
Signed-off-by: Hou Tao <houtao1@huawei.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Zorro Lang [Wed, 2 Jan 2019 04:03:19 +0000 (12:03 +0800)]
xfs/139-140: skip testing on large scratch dev
x/139 and x/140 makes XFS with very small agsize. That agsize is too
small for a large fs. And it's not necessary to test on large fs, so
skip it directly if scratch dev is large dev.
Zorro Lang [Wed, 2 Jan 2019 04:03:18 +0000 (12:03 +0800)]
generic/474: shift target directory to a sub-dir of SCRATCH_MNT
If testing on large fs (--large-fs option), there's a huge size
.use_space file in $SCRATCH_MNT, then `fssum $SCRATCH_MNT` trys to
read whole huge file. That's wasting time, so change the target path
to a sub-dir of $SCRATCH_MNT.
Darrick J. Wong [Tue, 18 Dec 2018 20:36:16 +0000 (12:36 -0800)]
xfs: filter out mount options that don't work on v4 filesystems
A few tests require v4 filesystems and enforce this by disabling
crc's in the _scratch_mkfs call. However, if the user specified
MOUNT_OPTIONS that only work with v5 filesystems, these tests fail.
If we detect a test creating a v4 scratch filesystem, filter out
incompatible mount options that don't work on v4, such as
simultaneous group/project quota.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Tue, 18 Dec 2018 20:36:03 +0000 (12:36 -0800)]
generic/050: fix ro blockdev mount of xfs with quota
In XFS, mounting with quota always require a writable device. If
the block device is read only, the mount fails, which fails this
test. Since this is expected, work around this by simulating the
golden output when we expect a mount failure.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
In this test we try to create a remote symlink block by creating a
symlink target buffer large enough to exceed the size of an inode.
Unfortunately we don't use the correct block size or symlink header
size, which on a 1k block filesystem causes there to be two remote
blocks. This causes crc verification errors in xfs_db (because it's
too dumb to load both blocks as one like the kernel does) which we
don't care about because we're about to corrupt the block anyway.
So, fix the block size calculation so that we end up with one block.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Tue, 18 Dec 2018 20:35:50 +0000 (12:35 -0800)]
xfs/111: fix golden output
In commit f4eee5126, this test was changed to run xfs_fsr to
bulkstat its way through the filesystem until it finds the corrupt
inode. The golden output was changed to capture xfs_fsr's output,
but neglects the fact that when fsr's output is not a tty, all the
status and error messages are sent to syslog, not stdout.
Therefore, this test consistently fails because it expects output of
"$SCRATCH_MNT start inode=0" but this never appears.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Xiao Yang [Fri, 21 Dec 2018 09:33:28 +0000 (17:33 +0800)]
common: Fix mismatched output from standard mkswap
With older util-linux(e.g. v2.17.2), running some tests(e.g.
generic/472, generic/495) got the following output:
-------------------------------------------------------
+mkswap: /mnt/xfstests/scratch/swap: warning: don't erase bootbits sectors
+ on whole disk. Use -f to force.
+mkswap: unable to relabel /mnt/xfstests/scratch/swap to system_u:object_r:swapfile_t:s0: Operation not supported
-------------------------------------------------------
1) Before commit c1f1b30 of util-linux, standard mkswap didn't zap bootbits
sectors and printed a warning until force option(i.e. -f) was given. We
define "mkswap -f" as MKSWAP_PROG and replace all standard mkswap with
$MKSWAP_PROG.
2) With mounting default SELinux context(e.g. system_u:object_r:root_t:s0),
standard mkswap tried to reset the type of default context to swapfile_t
if it is not swapfile_t, and then it failed and returned ENOTSUP expectedly
as we don't want to create any SELinux attr on purpose. standard mkswap
ignored this relabel error by commit d97dc0e of util-linux, but it still
reported the error before commit d97dc0e. We try to skip the reset step
in standard mkswap by mounting swapfile context directly.
Note:
We just mount swapfile context in related tests, and keep default context
in the rest of tests.
[Eryu: make mkswap a non-mandatory requirement and add comments on
"-f" option]
common/config: create $RESULT_BASE before dumping kmemleak leaks
In _init_kmemleak() we're touching a check_kmemleak file in
${RESULT_BASE} if ${DEBUGFS_MNT/kmemleak} exists as a marker that we
have to check for kmemleak output after running a test.
In 'check' we're calling _init_kmemleak() at around 60% of the file,
but ${RESULT_BASE} is created later at around 62% of the file,
causing the 'touch' in _init_kmemleak() to fail.
Create the ${RESULT_BASE} just after assigning the default value in
get_next_config()
[Eryu: check for mkdir failure and remove the $RESULT_BASE creation
in check.]
Xiao Yang [Tue, 11 Dec 2018 06:36:17 +0000 (14:36 +0800)]
generic/062, 520: Don't remove lost+found during cleanup
On older e2fsprogs, fsck command will check lost+found for extX,
so that it will get error if lost+found has been removed during
cleanup. For example:
----------------------------------------------------------
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found. Create? no
...
---------------------------------------------------------- Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Fri, 7 Dec 2018 06:24:39 +0000 (22:24 -0800)]
common/dump: disable copyrange
In _create_dumpdir_stress_num, disable copyrange in fsstress so that we
dump exactly the same set of files and directories no matter how the xfs
is configured.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Fri, 7 Dec 2018 06:24:33 +0000 (22:24 -0800)]
fsx: add copy_file_range support
Add support for the copy_file_range system call to fsx.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
[dchinner: copy_file_range() needs to obey read/write constraints
otherwise is blows up when direct IO is used] Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Fri, 7 Dec 2018 06:23:52 +0000 (22:23 -0800)]
fsx: use an enum to define the operation commands
Use an enum to define operation codes and the boundaries between
operation classes so that we can add new commands without having to
change a bunch of unrelated #defines.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-By: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Jayashree [Tue, 20 Nov 2018 23:51:04 +0000 (17:51 -0600)]
fstest: CrashMonkey 'hard link' tests ported to xfstest
This patch aims to add more tests to the xfstest suite to check
whether the target file system recovers correctly after a crash.
These test cases are generated by CrashMonkey, a
crash-consistency testing framework built at the SASLab at UT Austin.
This patch batches 37 crash-consistency tests into a xfstest test,
each of which checks the hard link behavior under different scenarios.
This test creates hard-links between files in the same directory or
across directories, while allowing fsync of either the files involved,
their parent directories, or unrelated sibling files. After each sub
test, the metadata of the persisted file is checked for the correct
link count. Additionally, each sub test is followed by fsck to check
for inconsistencies. The tests run on a 256MB file system, and
the working directory is cleaned up after every sub test.
Xiao Yang [Thu, 29 Nov 2018 07:15:32 +0000 (15:15 +0800)]
ext4/002: Fix obsolete TEST_DEV/TEST_DIR in _check_ext4_eof_flag()
Commit 6b06a9bb6fb0 has used SCRATCH_DEV/SCRATCH_MNT rather than
TEST_DEV/TEST_DIR for holding the test files, so we need to use
SCRATCH_DEV/SCRATCH_MNT in _check_ext4_eof_flag() as well.
Fixes: 6b06a9bb6fb0 ("ext4/002: Work with 64k block size") Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Chandan Rajendra [Fri, 23 Nov 2018 05:59:30 +0000 (11:29 +0530)]
ext4/021: Work with 64k block size
For 64k blocksize, 10MiB as the filesystem size isn't sufficient to have
a journal included. Hence this commit computes the test FS size based on
the block size of the underlying filesystem.
Chandan Rajendra [Fri, 23 Nov 2018 05:59:29 +0000 (11:29 +0530)]
ext4/002: Work with 64k block size
This commit changes the script to operate on FS blocks by obtaining the
block size from the underlying filesystem and using it to perform I/O in
units of block sizes.
This commit also uses $SCRATCH_MNT rather than $TEST_DIR for holding the
test files since the FS on $TEST_DIR might be created with a different
block size than the one specified in $MKFS_OPTIONS.
Xiao Yang [Fri, 23 Nov 2018 05:24:23 +0000 (13:24 +0800)]
common/rc: Add _require_filefrag_options() to check options for filefrag
In generic/519, filefrag command use FIBMAP ioctl(-B option) to print
output in extent format(-e option) on purpose and sync file(-s option),
so add _require_filefrag_options() to check if the command supports
all of these options.
References:
1) filefrag supports -e option by commit 2508eaa since e2fsprogs v1.42.7.
2) filefrag supports -B option by commit 5d5e01d since e2fsprogs v1.41.9.
3) filefrag supports -s option by commit e62847c since e2fsprogs v1.41.6.
Chandan Rajendra [Wed, 21 Nov 2018 16:26:46 +0000 (21:56 +0530)]
src/t_stripealign.c: Use block size reported by fstatfs()
On ppc64le, block size reported by fstat(2) is 64k (the page size)
i.e. the "preferred I/O size". However src/t_stripealign.c requires the
actual block size of the filesystem. Hence this commit now makes use of
the block size reported by fstatfs(2) syscall.
xfs: xfs_fsr requires working preallocation support
Check that the file system actually supports preallocation for defrag
tests that end up calling xfs_fsr, as they can't be supported in
always_cow mode.
xfs: don't assume preallocation is always supported on XFS
The always_cow mode can't usefull preallocate space gіven that it
always has to write out of place, and thus will reject falloc or
ioctl calls to preallocate space in a file. Add explicit checks for
preallocation support in various XFS-specific tests to support this.
Filipe Manana [Wed, 14 Nov 2018 18:32:56 +0000 (18:32 +0000)]
btrfs: test send after radical changes in a complex directory hierarchy
Test an incremental send operation in a scenario where the relationship
of ancestor-descendant between multiple directories is inversed, and
where multiple directories that were previously ancestors of another
directory now become descendents of multiple directories that used to be
their ancestors in the parent snapshot. This used to trigger an
infinite loop in the kernel code.
This is motivated by a bug found in btrfs which is fixed by the following
patch for the linux kernel:
"Btrfs: send, fix infinite loop due to directory rename dependencies"
Xiao Yang [Mon, 12 Nov 2018 08:01:03 +0000 (16:01 +0800)]
xfs/205: Fix that b2 variable is treated as octal vaule
Running xfs/205 triggers the following error:
----------------------------------------------
QA output created by 205
+./tests/xfs/205: line 61: 098: value too great for base (error token is "098")
...
----------------------------------------------
If b2 variable is a 2-digit number beginning with 0(e.g. 098),
it will be treated as octal vaule instaed of decimal value. We
try to declare it as decimal value forcely.
Miklos Szeredi [Mon, 12 Nov 2018 09:48:18 +0000 (10:48 +0100)]
overlay: create directory over deleted whiteout
There's a bug in the overlayfs implementation starting from the very
first merged version that may cause an Oops of various forms if a
directory is created over a whiteout dentry, but the actual whiteout
on the upper layer was removed to the directory creation.
generic/398: filter out extra string from newer mv
mv command produces a leading string "renamed" from some time.
This breaks generic/398. Adding a _filter_mv to filter it out.
Tested this patch on Fedora 28.
Filipe Manana [Tue, 6 Nov 2018 15:34:37 +0000 (15:34 +0000)]
btrfs: fix computation of max fs size for multiple device fs tests
We were sorting numerical values with the 'sort' tool without telling it
that we are sorting numbers, giving us unexpected ordering. So just pass
the '-n' option to the 'sort' tool.
Filipe Manana [Mon, 5 Nov 2018 11:15:24 +0000 (11:15 +0000)]
btrfs: add new filter for file cloning error translation
A bug in file cloning/reflinking was recently found that afftected both
Btrfs and XFS, which was caused by allowing the cloning of an eof block
into the middle of a file when the eof is not aligned to the filesystem's
block size.
The fix consists of returning the errno -EINVAL to user space when the
arguments passed to the system call lead to the scenario of data
corruption. However this overlaps with some cases where the system call,
in Btrfs, returned -EOPNOTSUPP, which means we are trying to reflink
inline extents. That is unsupported in Btrfs due to the huge complexity
of supporting it (due to copying and trimming inline extents, deal with
eventual compression, etc).
We have a few btrfs test cases that verify that attempts to clone inline
extents result in a failure, and are currently expecting an -EINVAL error
message from the output of the cloner program. So create a filter that
converts error messages related to the -EOPNOTSUPP error to messages
related to the -EINVAL error, so that the test can run both on patched
and non-patched linux kernels.
The corresponding btrfs patch for the linux kernel is titled:
"Btrfs: fix data corruption due to cloning of eof block"
And the VFS change that introduces the -EINVAL error return was introduced
by the following linux kernel commit (landed in 4.20-rc1):
07d19dc9fbe9 ("vfs: avoid problematic remapping requests into partial EOF block")
The btrfs patch is not yet in Linus' tree (it was submitted around the
same time as this change) and the VFS change was introduced in 4.10-rc1.
Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Mon, 5 Nov 2018 11:15:01 +0000 (11:15 +0000)]
generic: test attempt to reflink eof block into the middle of a file
Test that we can not clone a range from a file A into the middle of a file B
when the range includes the last block of file A and file A's size is not
aligned with the filesystem's block size. Allowing such case would lead to
data corruption since the data between EOF and the end of its block is
undefined.
This is motivated by a bug recently found that affects both Btrfs and XFS
and is fixed by the following commits/patches for the linux kernel:
07d19dc9fbe9 ("vfs: avoid problematic remapping requests into partial EOF block") b39989009bdb ("xfs: fix data corruption w/ unaligned reflink ranges")
Btrfs: fix data corruption due to cloning of eof block
The VFS patch landed in kernel 4.20-rc1 and the XFS patch landed in 4.19.
The Btrfs fix is very recent and it is not yet in Linus' tree.
Filipe Manana [Mon, 5 Nov 2018 11:14:45 +0000 (11:14 +0000)]
generic: test attempt to dedup eof block into the middle of a file
Test that deduplication of an entire file that has a size that is not
aligned to the filesystem's block size into the middle of a different
file does not corrupt the destination's file data by reflinking the last
(eof) block.
This test is motivated by a bug recently found that affects both Btrfs
and XFS, and is fixed by the following commits/patches for the linux
kernel:
07d19dc9fbe9 ("vfs: avoid problematic remapping requests into partial EOF block") dceeb47b0ed6 ("xfs: fix data corruption w/ unaligned dedupe ranges") de02b9f6bb65 ("Btrfs: fix data corruption when deduplicating between different files")
Btrfs: fix infinite loop on inode eviction after deduplication of eof block
The VFS patch was added to kernel 4.20-rc1 and the XFS and first Btrfs
patches were added to kernel 4.19. The second patch for Btrfs is very
recent and it is not yet in Linus' tree.
Amir Goldstein [Mon, 5 Nov 2018 05:18:15 +0000 (07:18 +0200)]
overlay: test file handle decode with multi lower layers on same fs
This test is for a regression that was introduced in kernel v4.17 by
commit 8b58924ad55c ("ovl: lookup in inode cache first when decoding
lower file handle").
Darrick J. Wong [Thu, 1 Nov 2018 23:19:46 +0000 (16:19 -0700)]
misc: force the exact quota options coded into the test
Several tests require setting exactly the quota mount options that are
encoded in the test. Unfortunately, quota mount options set by the user
in MOUNT_OPTIONS can turn on other quota types, which causes the golden
outputs to be off for various reasons (quota report output, behavior
changes, etc.)
So use _qmount_option to delete all the quota mount options in these
tests so that the test itself can run with exactly the config for which
it was written.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Thu, 1 Nov 2018 23:19:40 +0000 (16:19 -0700)]
xfs/205: update for v5 filesystems
Update this test to work with v5 filesystems, which have a minimum block
size of 1k. Adapt the script to sense the amount of free space reported
so that we can get close to ENOSPC instead of hardcoding.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Thu, 1 Nov 2018 23:19:33 +0000 (16:19 -0700)]
xfs/266: fix restore summary counter when quotas are enabled
When quotas are enabled, an incremental backup has to record the quota
file updates too. Inside a dump the quota files are stored as special
files under the root dump directory. xfsrestore reports the dump dir
in its restore summary counts even if the dump dir was only there for
the sake of the quota updates, which makes the test fail. Fix this by
massaging the output when quotas are turned on.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Thu, 1 Nov 2018 23:19:27 +0000 (16:19 -0700)]
dump: don't fail if multi-file dumps don't all contain quota info
When xfsdump is making multi-file dumps, the quota information are
written into the last dump file. However, the multi-file restore script
(as written) expects to see quota information restored by every dump
file and fails. This is silly, so fix it.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Thu, 1 Nov 2018 23:19:15 +0000 (16:19 -0700)]
xfs: force unlink metadata updates to disk
In xfs/318 and xfs/325 we inject errors on extent freeing then delete
some files to see if we can make the filesystem go offline. However,
with the advent of deferred inode inactivation, sync won't guarantee
that unlinked inodes removal is actually pushed to disk since the "inode
needs to be deallocated" state is persisted to disk. Freeze achieves
this, however, so inject a freeze/thaw cycle to make sure we hit the
injected error.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Thu, 1 Nov 2018 23:19:09 +0000 (16:19 -0700)]
quota: clean out speculative preallocations when checking quota usage
On XFS, the only reliable way to clean out speculative post-eof
preallocations, delayed allocations, and speculative cow preallocations
is to cycle the filesystem mount. Since we're comparing the post-test
quota counts against a freshly quotacheck to look for leaks, it's fine
to cycle the mount. This eliminates sporadic quota count failures when
running xfstests with quotas enabled.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Tue, 30 Oct 2018 18:03:28 +0000 (11:03 -0700)]
populate: create leafn dir when populating xfs filesystem
We've had some problems lately with directories containing a single
leafn directory. It turns out that the populate script doesn't create
these, so teach it to do so.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 29 Oct 2018 18:12:42 +0000 (11:12 -0700)]
xfs: test packaged crc32c code
Use the new crc32selftest command in xfs_io to check the correct
operation of the packaged xfsprogs, on the off chance that the packages
were cross compiled on a different machine type (which means the build
time test doesn't hold much water).
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Dave Chinner [Fri, 2 Nov 2018 01:09:48 +0000 (12:09 +1100)]
check: use full paths for diff on error
i don't run fstests from the source directory, so when I get a
golden image mismatch the relative path to the golden output is
not useful:
(Run 'diff -u tests/generic/013.out /home/dave/src/xfstests-dev/results//xfs_64k/generic/013.out.bad' to see the entire diff)
Change the output to emit the real path for the golden out so this
can be cut and pasted and run from anywhere.
(Run 'diff -u /home/dave/src/xfstests-dev/tests/generic/013.out /home/dave/src/xfstests-dev/results//xfs_64k/generic/013.out.bad' to see the entire diff)
Filipe Manana [Mon, 29 Oct 2018 09:43:40 +0000 (09:43 +0000)]
fstests: fix fssum to actually ignore file holes when supposed to
Unless the '-s' option is passed to fssum, it should not detect file holes
and have their existence influence the computed checksum for a file. This
tool was added to test btrfs' send/receive feature, so that it checks for
any metadata and data differences between the original filesystem and the
filesystem that receives send streams.
For a long time the test btrfs/007, which tests btrfs' send/receive with
fsstress, fails sporadically reporting data differences between files.
However the md5sum/sha1sum from the reported files in the original and
new filesystems are the same. The reason why fssum fails is because even
in normal mode it still accounts for number of holes that exist in the
file and their respective lengths. This is done using the SEEK_DATA mode
of lseek. The btrfs send feature does not preserve holes nor prealloc
extents (not supported by the current protocol), so whenever a hole or
prealloc (unwritten) extent is detected in the source filesystem, it
issues a write command full of zeroes, which will translate to a regular
(written) extent in the destination filesystem. This is why fssum reports
a different checksum. A prealloc extent also counts as hole when using
lseek.
For example when passing a seed of 1540592967 to fsstress in btrfs/007,
the test fails, as file p0/d0/f7 has a prealloc extent in the original
filesystem (in the incr snapshot).
Fix this by making fssum just read the hole file and feed its data to the
digest calculation function when option '-s' is not given. If we ever get
btrfs' send/receive to support holes and fallocate, we can just change
the test and pass the '-s' option to all fssum calls.
Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>