Eric Biggers [Sun, 18 Jul 2021 15:17:46 +0000 (10:17 -0500)]
generic/423: test stx_size of symlink
Update generic/423 to test that the reported size of a symlink is equal
to the length of the symlink target, as required by POSIX and as
documented in various man pages.
When the test_dummy_encryption mount option is enabled, this serves as a
regression test for the bug that will be fixed by the patch series
"fscrypt: report correct st_size for encrypted symlinks"
(https://lkml.kernel.org/r/20210702065350.209646-1-ebiggers@kernel.org).
However, this test is applicable to all filesystems and mount options.
Darrick J. Wong [Wed, 7 Jul 2021 00:21:45 +0000 (17:21 -0700)]
generic/371: disable speculative preallocation regressions on XFS
Once in a very long while, the fallocate calls in this test will fail
due to ENOSPC conditions. While in theory this test is careful only to
allocate at most 160M of space from a 256M filesystem, there's a twist
on XFS: speculative preallocation.
The first loop in this test is an 80M appending write done in units of
4k. Once the file size hits 64k, XFS will begin speculatively
preallocating blocks past the end of the file; as the file grows larger,
so will the speculative preallocation.
Since the pwrite/rm loop races with the fallocate/rm loop, it's possible
that the fallocate loop will free that file just before the buffered
write extends the speculative preallocation out to 160MB. With fs and
log overhead, that doesn't leave enough free space to start the 80MB
fallocate request, which tries to avoid disappointing the caller by
freeing all speculative preallocations. That fails if the pwriter
thread owns the IOLOCK on $testfile1, so fallocate returns ENOSPC and
the test fails.
The simple solution here is to disable speculative preallocation by
setting an extent size hint if the fs is XFS.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 7 Jul 2021 00:21:39 +0000 (17:21 -0700)]
xfs/084: fix test program status collection and processing
On a test VM with 1.2GB memory, I noticed that the test will
sometimes fail because resvtest leaks too much memory and gets OOM
killed. It would be useful to _notrun the test when this happens so
that it doesn't appear as an intermittent regression.
The exit code processing in this test is incorrect, since "$?" will
get us the exit status of _filter_resv, not $here/src/resvtest. Fix
that as part of learning to detect a SIGKILL and skip the test.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 7 Jul 2021 00:21:34 +0000 (17:21 -0700)]
check: run _check_filesystems in an OOM-happy subshell
While running fstests one night, I observed that fstests stopped
abruptly because ./check ran _check_filesystems to run xfs_repair.
In turn, repair (which inherited oom_score_adj=-1000 from ./check)
consumed so much memory that the OOM killer ran around killing other
daemons, rendering the system nonfunctional.
This is silly -- we set an OOM score adjustment of -1000 on the
./check process so that the test framework itself wouldn't get
OOM-killed, because that aborts the entire run. Everything else is
fair game for that, including subprocesses started by
_check_filesystems.
Therefore, adapt _check_filesystems (and its children) to run in a
subshell with a much higher oom score adjustment.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
7016996765293437281 is of course the magic number 0x6161616161616161,
which are stale ondisk contents left behind by previous tests that wrote
known tests patterns to files on the scratch device. This is a bit
surprising, since _dmthin_init supposedly zeroes the first 4k of the
thin pool metadata device before initializing the pool. Or does it?
Herein lies the problem: the dd process writes zeroes into the page
cache and exits. Normally the block layer will flush the page cache
after the last file descriptor is closed, but once in a while the
terminating dd process won't be the only process in the system with an
open file descriptor!
That process is of course udev. The write() call from dd triggers a
kernel uevent, which starts udev. If udev is running particularly
slowly, it'll still be running an instant later when dd terminates,
thereby preventing the page cache flush. If udev is still running a
moment later when we call dmsetup to set up the thin pool, the pool
creation will issue a bio to read the ondisk superblock. This read
isn't coherent with the page cache, so it sees old disk contents and the
test fails even though we supposedly formatted the metadata device.
Fix this by explicitly flushing the page cache after writing the zeroes.
Fixes: 4b52fffb ("dm-thinp helpers in common/dmthin") Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 7 Jul 2021 00:21:12 +0000 (17:21 -0700)]
xfs/172: disable test when file writes don't use delayed allocation
This test tries to exploit an interaction between delayed allocation and
writeback on full filesystems to see if it can trip up the filestreams
allocator. The behaviors do not present if the filesystem allocates
space at write time, so disable it under these scenarios.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Matthew Wilcox [Tue, 6 Jul 2021 20:14:46 +0000 (21:14 +0100)]
src/seek_sanity_test: test seeks from LLONG_MIN
We don't currently test seeking from LLONG_MIN, which apparently can
produce an UBSAN warning, although I've been unable to reproduce
that. In any case, it's a good corner case to test and
straightforward to add.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Pavel Reichl [Thu, 8 Jul 2021 16:35:18 +0000 (18:35 +0200)]
generic/{453,454}: Don't run for FSs restricting names
Running generic/{453,454} tests is probably only useful for filesystems
that allow unrestricted byte streams for names.
Signed-off-by: Pavel Reichl <preichl@redhat.com> Suggested-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Tue, 6 Jul 2021 14:42:17 +0000 (15:42 +0100)]
btrfs: test fsync after increasing file size with truncate
Test that if we explicitly fsync a file that was previously renamed and
its size was increased through a truncate operation, after a power failure
the file has the size set by the truncate operation. Also, in between the
truncation and the fsync, there was a rename of another file in the same
directory and that file was also fsynced before we fsynced the file that
was truncated.
This currently fails on a 5.13 kernel and on Linus' master branch. It is
fixed by a patch with the following subject:
"btrfs: fix unpersisted i_size on fsync after expanding truncate"
Theodore Ts'o [Mon, 21 Jun 2021 16:48:51 +0000 (12:48 -0400)]
ext4/048: skip test of filename wipe if journal checkpoint is not supported
ext4/048 will fail when running on older kernels that don't support
the filename wipe feature. The journal checkpoint ioctl is a related
feature, and landed just a little bit after filename wipe feature, so
use support for the journal checkpoint ioctl as a proxy for support
for the filename wipe feature.
Without this change, this test will fail when tesing 5.10, 5.4, and
other LTS kernels.
Darrick J. Wong [Sat, 3 Jul 2021 03:05:48 +0000 (20:05 -0700)]
tools: make convert-group ignore converted test files
Teach the tool that rewrites tests files to use _begin_fstest group
tagging to ignore tests that have already been treated. This will make
it easier for people to rebase their dev branches.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Jeff Layton [Fri, 2 Jul 2021 13:40:24 +0000 (09:40 -0400)]
generic: ensure that page is properly filled before write
We had a broken optimization in cephfs and netfs lib that could
cause part of a page to be improperly zeroed-out when writing to an
offset that was beyond the EOF but in an existing page.
Anju T Sudhakar [Mon, 28 Jun 2021 08:52:57 +0000 (14:22 +0530)]
xfs/504: Add scratch_mount before checking for xfs_scrub unicode support
We may not detect the error `Inappropriate ioctl for device`, while running
`$XFS_IO_PROG -c "scrub probe" "$mountpoint"`, if scratch device is not
mounted before invoking _check_xfs_scrub_does_unicode(). So do
_scratch_mount before checking for xfs_scrub support.
Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
check: exit with exit code 1 after printing the usage message
If check is passed an invalid command line option, exit with a
non-zero exit code so that a script calling check can detect the
failure. The check script already performs an "exit 1" if a valid
option has an invalid argument, so this is consistent with existing
practice.
Sun Ke [Wed, 30 Jun 2021 11:37:36 +0000 (19:37 +0800)]
generic/260: f2fs is also special
It fail on f2fs:
[+] Default length with start set (should succeed)
[+] Length beyond the end of fs (should succeed)
[+] Length beyond the end of fs with start set (should succeed)
+After the full fs discard 0 bytes were discarded however the file system is 12882804736 bytes long.
+It seems that fs logic handling len argument overflows
The root cause is f2fs can tag a special flag TRIMMED_FLAG to
indicate the whole filesystem is trimmed, so after mkfs/fstrim(),
following fstrim() won't trim any block.
Suggested-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Sun Ke <sunke32@huawei.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Sun Ke [Wed, 30 Jun 2021 11:37:34 +0000 (19:37 +0800)]
generic/042: make a bigger img for f2fs
f2fs-utils 1.9.0 needs at least 38 MB space for f2fs image. However,
f2fs-utils 1.14.0 needs at least 52 MB. Not sure if it will change
again. So, just set it to 128M.
Suggested-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Sun Ke <sunke32@huawei.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 21 Jun 2021 15:55:09 +0000 (08:55 -0700)]
fstests: automatically generate group files
Now that we've moved the group membership details into the test case
files themselves, automatically generate the group files during build.
The autogenerated files are named "group.list" instead of "group" to
avoid conflicts between generated and (stale) SCM files as everyone
rebases.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 21 Jun 2021 15:55:09 +0000 (08:55 -0700)]
fstests: move test group info to test files
Refactor every test in the entire test suite to use the new boilerplate
functions. This also migrates all the test group information into the
test files. This patch has been autogenerated via the command:
Darrick J. Wong [Mon, 21 Jun 2021 15:54:54 +0000 (08:54 -0700)]
fstests: add tool migrate group membership data to test files
Create a tool to migrate the mapping of tests <-> groups out of the
group file and into the individual test file as a _begin_fstest
call. In the next patches we'll rewrite all the test files and auto
generate the group files from the tests.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 21 Jun 2021 15:54:54 +0000 (08:54 -0700)]
fstests: refactor test boilerplate code
Create two new helper functions to deal with boilerplate test code:
A helper function to set the seq and seqnum variables. We will expand
on this in the next patch so that fstests can autogenerate group files
from now on.
A helper function to register cleanup code that will run if the test
exits or trips over a standard range of signals.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 21 Jun 2021 15:54:53 +0000 (08:54 -0700)]
misc: move exit status into trap handler
Move the "exit $status" clause of the _cleanup function into the
argument to the "trap" command so that we can standardize the
registration of the atexit cleanup code in the next few patches.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Mon, 21 Jun 2021 15:54:53 +0000 (08:54 -0700)]
fstests: fix group check in new script
In the tests/*/group files, group names are found in the Nth columns of
the file, where N > 1. The grep expression to warn about unknown groups
is not correct (since it currently checks column 1), so fix this.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Wed, 9 Jun 2021 10:25:14 +0000 (11:25 +0100)]
btrfs: test incremental send swapping location of a directory with a file
Test that an incremental send operation succeeds, and produces the
correct results, after renaming and moving around directories and files
with multiple hardlinks, in such a way that one of the files gets the old
name and location of a directory and another name (hardlink) with the old
name and location of another file that was located in that same directory.
This currently fails on btrfs but is fixed by a kernel patch with the
following subject:
"btrfs: send: fix invalid path for unlink operations after parent orphanization"
Leah Rumancik [Mon, 7 Jun 2021 21:55:09 +0000 (21:55 +0000)]
ext4: test journal checkpoint ioctl
Test for commit "ext4: add ioctl EXT4_IOC_CHECKPOINT". Tests journal
checkpointing and journal erasing via EXT4_IOC_CHECKPOINT with flag
EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT set.
Leah Rumancik [Mon, 7 Jun 2021 21:36:38 +0000 (21:36 +0000)]
ext4/048: add check for od endian flag
od --endian=little is used to read bytes in little endian when on a
big endian machine. Update test ext4/048 to require od endian flag
support on big endian machines, otherwise, skip test.
Anand Jain [Mon, 7 Jun 2021 12:08:19 +0000 (20:08 +0800)]
btrfs: support other sectorsizes in _scratch_mkfs_blocksized
When btrfs supports sectorsize != pagesize it can run these test cases
now,
generic/205 generic/206 generic/216 generic/217 generic/218 generic/220
generic/222 generic/227 generic/229 generic/238
This change is backward compatible for kernels without non pagesize
sectorsize support.
Amir Goldstein [Sun, 6 Jun 2021 15:18:11 +0000 (18:18 +0300)]
overlay/075: add test coverage for clearing immutable/append-only flags
overlay/075 is a variant of check -overlay generic/079.
check -overlay generic/079 does the following operations on overlay fs:
1. Create files
2. Set immutable/append-only flags
3. Verify files/dirs behaving as immutable/append-only
4. Clear immutable/append-only flags
5. Remove files
overlay/075 performs steps 1,2,4,5 on upper and lower layers
and only step 3 is performed on overlay fs (before and after copy up
and mount cycle).
Add also steps 4,5 to be performed on overlay fs to increase the
test coverage of the "merged" inode xflags feature.
Amir Goldstein [Fri, 11 Jun 2021 13:10:29 +0000 (16:10 +0300)]
generic/507: support more filesystems
The commit message introducing the test says:
"We only check below attribute modification which most filesystem
supports:
- no atime updates (A)
- secure deletion (s)
- synchronous updates (S)
- undeletable (u)
"
But in fact, very few filesystems support the (s) and (u) flags.
xfs and btrfs do not support them for example.
The test doesn't need to check those specific flags, so replace those
flags with immutable (i) and append-only (a), which most filesystems
really do support.
Zorro Lang [Tue, 25 May 2021 04:46:41 +0000 (12:46 +0800)]
common/config: remove default 4k blocksize from XFS_MKFS_OPTIONS
xfstests set "-bsize=4k" to XFS_MKFS_OPTIONS by default, then give
it to MKFS_OPTIOPNS. So MKFS_OPTIOPNS always contains "-bsize=4k"
except we set XFS_MKFS_OPTIONS manually.
It's useless to set XFS_MKFS_OPTIONS to "-bsize=4096" by default,
especially that will cause all cases with _scratch_mkfs_blocksized()
always fail as "-b size option respecified", when test on XFS. For
exmaple: generic/222
Signed-off-by: Zorro Lang <zlang@redhat.com> Acked-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Amir Goldstein [Sat, 5 Jun 2021 09:43:26 +0000 (12:43 +0300)]
overlay/075: fix wrong invocation of t_immutable
t_immutable cannot be run twice on the same test directoty, because
append-only directory tests create files in append-only.d and those
file already exist from the first run.
Use separate test directories for the first and second t_immutable runs.
Anand Jain [Fri, 4 Jun 2021 06:25:47 +0000 (14:25 +0800)]
btrfs/029: fix the test compatible with older cp(1)
cp(1) versions 8.30 and 8.32 are compared with its --reflink=always option
and they have different semantic if the target-file (with zero sizes) must be
created when the cp --reflink=alaways fails with a cross-device link
error. As shown below.
$ cp --version | head -1
cp (GNU coreutils) 8.30
$ cp --reflink=always /mnt/scratch/original /mnt/test/test-029/copy
cp: failed to clone '/mnt/test/test-029/copy' from '/mnt/scratch/original': Invalid cross-device link
$ ls -l /mnt/test/test-029/copy
ls: cannot access '/mnt/test/test-029/copy': No such file or directory
$ cp --version | head -1
cp (GNU coreutils) 8.32
$ cp --reflink=always /mnt/scratch/original /mnt/test/test-029/copy;
cp: failed to clone '/mnt/test/test-029/copy' from '/mnt/scratch/original': Invalid cross-device link
$ ls -l /mnt/test/test-029/copy
-rw------- 1 root root 0 Jun 4 13:29 /mnt/test/test-029/copy
chenlong [Fri, 28 May 2021 03:13:07 +0000 (11:13 +0800)]
ext4: prevent initializing reserved inodes
Check the block group zero and prevent initializing reserved inodes.
But in some special cases, the reserved inode may not all belong to
the group zero, it may exist into the second group if we formatÂ
filesystem below.
Kent Overstreet [Tue, 25 May 2021 22:19:53 +0000 (18:19 -0400)]
fstests: initial bcachefs support
To get started, you'll need to get bcachefs from the kernel repository
https://evilpiepirate.org/git/bcachefs.git/
and tools from
https://evilpiepirate.org/git/bcache-tools.git/
Build kernel as normal, enabling CONFIG_BCACHEFS_FS (and probably
CONFIG_BCACHEFS_DEBUG), and build and install tools. Then running
fstests is exactly the same as other local filesystems - just set
FSTYP=bcachefs
Also see https://evilpiepirate.org/git/ktest.git/ for a tool for
conveniently building kernel and running fstests inside a qemu VM.
This patch also updates generic/441 to run the more thorough test on
bcachefs, and generic/425 to not run on bcachefs (since bcachefs does
not store xattrs in blocks)
Sun Ke [Tue, 18 May 2021 11:47:00 +0000 (07:47 -0400)]
generic/042: set size to 38M for f2fs
25M is too small for f2fs:
Info: Disable heap-based policy
Info: Debug level = 0
Info: Label =
Info: Trim is enabled
Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 51200 (25 MB)
Info: zone aligned segment0 blkaddr: 512
Error: Device size is not sufficient for F2FS volume
Error: Failed to prepare a super block!!!
Error: Could not format the device!!!
So, set size to 38M for f2fs.
Signed-off-by: Sun Ke <sunke32@huawei.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Mon, 24 May 2021 10:37:21 +0000 (11:37 +0100)]
btrfs: add test for multiple fsync with adjacent preallocated extents
Test a scenario where we do several partial writes into multiple
preallocated extents across two transactions and with several fsyncs
in between. The goal is to check that the fsyncs succeed.
Currently the last fsync fails with an -EIO error, and it aborts the
current transaction. This issue is fixed by a patch with the following
subject:
"btrfs: fix fsync failure and transaction abort after writes to prealloc extents"
Yang Xu [Fri, 28 May 2021 09:41:10 +0000 (17:41 +0800)]
common/xfs: Fix _require_scratch_xfs_shrink bug
Since local declaration can't pass function return value, this
helper never detects whether kernel or xfsprogs supports xfs shrink
feature successfully. Fit it by separating declaration and
assignment of local variables.
Zorro Lang [Fri, 21 May 2021 08:01:45 +0000 (16:01 +0800)]
generic: mmap and copy file data with page overlapping
Mmap 2 pages of file, write 64 bytes to the first and second pages,
copy the data from the first page and then second page to the second
page offset with $pagesize - 64. Verify the data at the end.
Qu Wenruo [Mon, 17 May 2021 09:29:22 +0000 (17:29 +0800)]
btrfs/215: avoid false alert for subpage case
[BUG]
When running btrfs/215 with 64K page size, 4K sectorsize (subpage RW
support), it fails with the following error:
btrfs/215 [failed, exit status 1]- output mismatch (see ~/xfstests-dev/results//btrfs/215.out.bad)
--- tests/btrfs/215.out 2021-03-19 16:34:26.069634953 +0800
+++ ~/xfstests-dev/results//btrfs/215.out.bad 2021-05-17 16:52:34.743514224 +0800
@@ -1,2 +1,3 @@
QA output created by 215
-Silence is golden
+Errors: 8 expected: 2
+(see ~/xfstests-dev/results//btrfs/215.full for details)
...
(Run 'diff -u ~/xfstests-dev/tests/btrfs/215.out ~/xfstests-dev/results//btrfs/215.out.bad' to see the entire diff)
[CAUSE]
For subpage case, btrfs still tries to read the full page, other than
read just one sector for PAGE_SIZE == sectorsize case.
This means for the 2 sectors corrupted case, since they are in the same
page, all the errors will be reported.
[FIX]
Change the following values:
- filesize
Now it's 8 * pagesize.
- expected error number
Now it's 2 * sectors_per_page or 6 * sectors_per_page.
This program fails on filesystems where the stat() block size isn't a
strict power of two because it foolishly feeds that to posix_memalign to
allocate an aligned memory buffer for directio. posix_memalign requires
the alignment value to be a power of two, so generic/586 fails.
The system page size generally works well for directio buffers, so use
that instead.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 19 May 2021 23:57:10 +0000 (16:57 -0700)]
xfs/178: fix mkfs success test
Fix the obviously incorrect code here that wants to fail the test if
mkfs doesn't succeed. The return value ("$?") is always the status of
the /last/ command in the pipe.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 19 May 2021 23:57:04 +0000 (16:57 -0700)]
fsx/fsstress: round blocksize properly
The block sizes reported by stat and DIOINFO aren't required to be
powers of two. This can happen on an XFS filesystem with a realtime
extent size that isn't a power of two; on such filesystems, certain IO
calls will fail due to alignment issues. Fix that by providing rounding
helpers that work for all sizes.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 19 May 2021 23:56:58 +0000 (16:56 -0700)]
xfs/117: fix fragility in this fuzz test
This fuzz test has some fragility problems -- it doesn't do anything to
guarantee that the inodes that it checks for EFSCORRUPTED are the same
ones that it fuzzed, and it doesn't explicitly try to avoid victimizing
inodes in the same chunk as the root directory. As a result, this test
fails annoyingly frequently.
Fix both of these problems and get rid of the confusingly named TESTDIR
variable.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 19 May 2021 23:56:52 +0000 (16:56 -0700)]
xfs: force file creation to the data device for certain layout tests
I found a bunch more tests in the xfs/ directory that try to create
specific metadata layouts on the data device, either because they're
fuzz tests or because they're testing specific edge cases of the code
base. Either way, these test need to override '-d rtinherit' in the
MKFS_OPTIONS, so do that with _xfs_force_bdev.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 19 May 2021 23:56:46 +0000 (16:56 -0700)]
common/xfs: refactor commands to select a particular xfs backing device
Refactor all the places where we try to force new file data allocations
to a specific xfs backing device so that we don't end up open-coding the
same xfs_io command lines over and over.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Sidong Yang [Sun, 23 May 2021 05:08:59 +0000 (05:08 +0000)]
btrfs/012: check free size of scratch device before copying files
This test failed when scratch device don't have enough space for
copying files. This patch gets size of files by du command and
checks if there is enough space in the device.
Jinhui Huang [Mon, 17 May 2021 03:34:13 +0000 (11:34 +0800)]
xfs: Add the appropriate _require helper
1.xfs/162 uses xfs_db -c 'fuzz' but forgets to check if the feature
is supported. This will cause the case to fail on a system without
fuzz support. so we add _require to check if the fuzz is supported.
2.xfs/495 use _require_scratch_xfs_fuzz_fields to check the features
required by field fuzzing, but some of the features are not used in
this case like xfs_scrub, this will cause the case to skip on a system
without xfs_scrub support, even if the features being uesd are supported.
So we just need to use _require to check the features being used.
Signed-off-by: Jinhui Huang <huangjh.jy@cn.fujitsu.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Filipe Manana [Wed, 12 May 2021 15:27:35 +0000 (16:27 +0100)]
btrfs: test log replay after directory fsync and moving a child directory
Test a particular scenario where we fsync a directory, then move one of
its children directories into another directory and then finally sync the
log trees by fsyncing any other inode. We want to check that after a power
failure we are able to mount the filesystem and that the moved directory
exists only as a child of the directory we moved it into.
This currently fails on a 5.12 kernel (and 5.13-rc1) but is fixed by a
patch with the following subject:
"btrfs: fix removed dentries still existing after log is synced"
The failure is due to ending up with a directory that has 2 hard links
(two parent directories) as soon as the log replay procedure finishes,
which causes the tree checker to detect the issue and cause the mount
operation to fail with -EIO.
Darrick J. Wong [Wed, 12 May 2021 02:02:19 +0000 (19:02 -0700)]
fsx: fix backwards parameters in complaint about overly long copy
If fsx encounters a situation where copy_file_range reports that it
copied more than it was asked to, we report this as a failure.
Unfortunately, the parameters to the print function are backwards,
leading to this bogus complaint about a short copy:
do_copy_range: asked 28672, copied 24576??
When we really asked to copy 24k but 28k was copied instead.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 12 May 2021 02:02:08 +0000 (19:02 -0700)]
common: always pass -f to $DUMP_COMPRESSOR
If the test runner gave us the name of a program to use to compress
dumps, always pass -f to overwrite older compressed images, like the
documentation says we do. This prevents the test suite from stalling on
"foo.md.gz exists, overwrite?" prompts.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 12 May 2021 02:01:56 +0000 (19:01 -0700)]
xfs: fix old fuzz test invocations of xfs_repair
Some of the older blocktrash-based fuzz tests cause the fs to go down
due to the corrupted image and fail to remount. Offline repair fails
because _repair_scratch_fs is the helper that is smart enough to call
xfs_repair -L, not _scratch_xfs_repair. Fix these instances.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
btrfs/187 436s ... - output mismatch (see /xfstests/results//btrfs/187.out.bad)
--- tests/btrfs/187.out 2020-10-16 23:13:46.550152492 +0100
+++ /xfstests/results//btrfs/187.out.bad 2021-04-27 14:57:02.623941700 +0100
@@ -1,3 +1,4 @@
QA output created by 187
Create a readonly snapshot of 'SCRATCH_MNT' in 'SCRATCH_MNT/snap1'
Create a readonly snapshot of 'SCRATCH_MNT' in 'SCRATCH_MNT/snap2'
+/xfstests/tests/btrfs/187: line 1: warning: wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = 16
...
(Run 'diff -u /xfstests/tests/btrfs/187.out /xfstests/results//btrfs/187.out.bad' to see the entire diff)
Ran: btrfs/187
Failures: btrfs/187
Failed 1 of 1 tests
This is because the process running dedupe_files_loop() executes the 'wait'
command in the trap it has setup and very often it receives the SIGTERM
signal while it is running the 'wait' command in the while loop of that
function - so executing the trap makes bash run 'wait' while it is already
running 'wait', triggering the warning message from bash.
That warning message was added in bash 5.0 by commit 36f89ff1d8b761
("SIGINT trap handler SIGINT loop fix"):
Anand Jain [Mon, 3 May 2021 11:08:00 +0000 (19:08 +0800)]
btrfs: add fstrim test case on the sprout device
Add fstrim test case on the sprout device, verify seed device
integrity. Targeting kernel commit 5e753a817b2d ("btrfs: fix
unmountable seed device after fstrim")
Darrick J. Wong [Thu, 29 Apr 2021 01:31:54 +0000 (18:31 -0700)]
xfs/49[12]: skip pre-lazysbcount filesystems
Prior to lazysbcount, the xfs mount code blindly trusted the value of
the fdblocks counter in the primary super, which means that the kernel
doesn't detect the fuzzed fdblocks value at all. V4 is deprecated and
pre-lazysbcount V4 hasn't been the default for ~14 years, so we'll just
skip these two tests on those old filesystems.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 28 Apr 2021 04:09:18 +0000 (21:09 -0700)]
xfs/004: don't fail test due to realtime files
This test exercises xfs_db functionality that relates to the free space
btrees on the data device. Therefore, make sure that the files we
create are not realtime files.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 28 Apr 2021 04:09:12 +0000 (21:09 -0700)]
generic/449: always fill up the data device
This is yet another one of those tests that looks at what happens when
we run out of space for more metadata (in this case, xattrs). Make sure
that the 256M we write to the file to try to stimulate ENOSPC gets
written to the same place that xfs puts xattr data -- the data device.
Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 28 Apr 2021 04:09:00 +0000 (21:09 -0700)]
xfs/276: remove unnecessary mkfs golden output
A previous update to this test dropped the clause where the mkfs
standard output gets sent to /dev/null. The filtered mkfs output isn't
needed here and it breaks the test, so fix that.
Fixes: e97f96e5 ("xfs/27[26]: force realtime on or off as needed") Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Shreeya Patel [Mon, 3 May 2021 10:26:54 +0000 (15:56 +0530)]
generic/631: Add a check for extended attributes
Test case 631 fails for filesystems like exfat or vfat or any other
which does not support extended attributes.
The main reason for failure is not being able to mount overlayfs
with filesystems that do not support extended attributes.
mount -t overlay overlay -o "$l,$u,$w,$i" $mergedir
Above command would return an error as -
/var/mnt/scratch/merged0: wrong fs type, bad option, bad superblock
on overlay, missing codepage or helper program, or other error.
dmesg log reports the following -
overlayfs: filesystem on '/var/mnt/scratch/upperdir1' not supported
As per the overlayfs documentation -
"A wide range of filesystems supported by Linux can be the lower
filesystem, but not all filesystems that are mountable by Linux
have the features needed for OverlayFS to work. The lower filesystem
does not need to be writable. The lower filesystem can even be another
overlayfs. The upper filesystem will normally be writable and if it
is it must support the creation of trusted.* and/or user.* extended
attributes, and must provide valid d_type in readdir responses,
so NFS is not suitable. A read-only overlay of two read-only
filesystems may use any filesystem type."
As per the above statements from the overlayfs documentation,
it is clear that filesystems that do not support extended
attributes or d_type would not work with overlayfs.
This is why we see the error in dmesg log for upperdir1
which had an exfat filesystem.
This test case already checks for d_type but does not check for
extended attributes, hence add a check for it which would avoid
running this tests for filesystems that are not supported.
Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
DAX doesn't support swapfile. Without this patch,
_require_scratch_swapfile always returns fail for fsdax. Now
change to notrun.
Fixes: 725feeff ("common/rc: swapon should not fail for given FS in _require_scratch_swapfile()") Signed-off-by: Xiaoli Feng <xifeng@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Darrick J. Wong [Wed, 28 Apr 2021 04:09:47 +0000 (21:09 -0700)]
common/rc: relax xfs swapfile support checks
In commit 725feeff, I forgot that xfs has *not* always supported all
swap file configurations -- the bmap swapfile activation prior to the
introduction of iomap_swapfile_activate did not permit the use of
unwritten extents in the swap file. Therefore, kick xfs out of the
always-supported list.
Fixes: 725feeff ("common/rc: swapon should not fail for given FS in _require_scratch_swapfile()") Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Introduce some zone related helper functions: _zone_type(),
_require_zoned_device(), and _require_non_zoned_device(). They all
take a device path as an argument.
_zone_type() return the zone type of the device according to the
value returned from "/sys/block/<disk>/queue/zoned". See
Documentation/ABI/testing/sysfs-block for a detail.
_require_zoned_device() checks if the device is zoned. If not, it
skips the current test. _require_non_zoned_device() does the
opposite.
When this case runs on system without mount_setattr syscall support, it
will report errors rather than skip. so we add _require_idmapped_mounts
to check if mount_setattr syscall is supported.
Signed-off-by: Jinhui Huang <huangjh.jy@cn.fujitsu.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Eryu Guan <guaneryu@gmail.com>