Commit Graph

2775 Commits

Author SHA1 Message Date
Ross Zwisler 490baac380 build: fix build warnings and notify_others() bug
This patch addresses the following build warnings:

fsx.c: In function 'do_punch_hole':
fsx.c:940:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   if (!quiet && testcalls > simulatedopcount)
   ^~
fsx.c:942:4: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
log4(OP_PUNCH_HOLE, offset, length, FL_SKIPPED);
^~~~
fsx.c:947:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   if (!quiet && testcalls > simulatedopcount)
   ^~
fsx.c:949:4: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
log4(OP_PUNCH_HOLE, offset, length, FL_SKIPPED);
^~~~
fsx.c: In function 'do_zero_range':
fsx.c:995:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   if (!quiet && testcalls > simulatedopcount)
   ^~
fsx.c:997:4: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
log4(OP_ZERO_RANGE, offset, length, FL_SKIPPED |
^~~~
[CC]    growfiles
growfiles.c: In function 'notify_others':
growfiles.c:1458:6: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
  if ( Forker_pids[ind] != Pid )
  ^~
growfiles.c:1462:10: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the 'if'
  kill(Forker_pids[ind], SIGUSR2);
  ^~~~

The warnings in fsx.c were just spacing issues of the form:

	if (length == 0) {
		if (!quiet && testcalls > simulatedopcount)
			prt("skipping zero length punch hole\n");
			log4(OP_PUNCH_HOLE, offset, length, FL_SKIPPED);
		return;
	}

Where the log4() call just needs to be unindented.  log4() calls
elsewhere in that same file are not protected with any sort of
'quiet' check, and commonly follow prt() calls which are.  See
doread(), domapread(), etc.

The warning from growfiles.c was actually a bug.  notify_others() is
looping through the Forker_pids[] array and sending SIGUSR2 to all
other processes.  However, with the current logic it only *logs* the
kill for other processes, and kills all other processes plus the
Forker_pids[] entry that matches 'Pid'.

Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Lukas Czerner <lczerner@redhat.com>
Cc: Allison Henderson <achender@vnet.ibm.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Nathan Scott <nathans@sgi.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-07 17:21:11 +08:00
Omar Sandoval 8c96cfbfe5 generic/35[67]: disable swapfile tests on Btrfs
Btrfs doesn't support swapfiles (yet?), so generic/356 fails
erroneously, and generic/357 only passes by accident. Let's add a
_require_scratch_swapfile helper and add it to these tests.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-06 19:04:19 +08:00
Eric Biggers adcc60c6bf build: allow building with latest xfslibs on 32-bit Linux
The next version of xfslibs will require that its users enable
transparent largefile support.  This broke building xfstests on
32-bit Linux because _FILE_OFFSET_BITS=64 was not getting defined
when testing for xfs headers.  Fix this by defining
_FILE_OFFSET_BITS=64 when doing configure checks for the xfs
headers.

It was not necessary to define _FILE_OFFSET_BITS=64 for the actual
build because it's already done, in builddefs.in.

The problem could also be solved by adding AC_SYS_LARGEFILE to
configure.ac.  It's debatable, but I chose not to do that because it
might give the impression that it affects the actual compilation of
the test programs and not just the configure checks.  (Since not all
.c files include config.h first, a _FILE_OFFSET_BITS definition in
config.h wouldn't always take effect.)

Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-02 19:31:02 +08:00
Dave Chinner c3aba25afa common: split Btrfs functions from common/rc
Similar to common/xfs, for the same reasons.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-01 00:19:17 +08:00
Dave Chinner 7d4f483f1b common: split XFS functions from common/rc
common/rc has become a dumping ground for common functions that
don't have a specific topic file. It's getting huge and difficiult
to manage, and people are duplicating functionality because they
can't easily find existing functions in the mess.

Let's start to make it a little easier to manage by splitting out
the XFS specific functions into common/xfs and source that from
common/rc automatically.  Other filesytems can follow suit in
future, leaving us with only generic functionality in common/rc.

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-12-01 00:19:17 +08:00
Dave Chinner 3d7ed77c68 generic/095: add iomap_dio_rw() to the dmesg filter
Oops, we did it again - we moved the XFS dio code warning to a new
function with the iomap direct IO rework. Update the filter to pick
up the new warning location.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-12-01 00:19:12 +08:00
Dave Chinner 37d78d97f6 check: add brief result summaries
When running multiple sections and hundreds of tests in each config
section, it's hard to see what failed from the summary output
because of the hundreds of tests listed in the "tests run" and
"tests not run" output. Add a "-b" option for brief result summaries
that only output the tests that failed and the summary count of
tests failed.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-29 14:49:33 +08:00
J. Bruce Fields 64ea47a87e src/dirstress: Allow ESTALE as well as ENOENT
In the NFS case an attempt to chdir out of a removed directory could
result in ESTALE, and that should not cause the test to fail.

This was causing intermittent failures on generic/011 on NFS.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-29 14:39:29 +08:00
J. Bruce Fields 0240a9c12f README: Document fstests mailing list
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-29 14:31:19 +08:00
Jan Kara 79a1c38082 ext4/001: Fixup file layout with DAX
Since commit 9538d1b69399 (ext4: avoid split extents for DAX
writes), currently sitting in ext4 tree, the block layout of files
has changed when the filesystem is mounted with -o dax and now
matches 'nodelalloc' variant instead of 'nozero'. Fixup the test
configuration.

Signed-off-by: Jan Kara <jack@suse.cz>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-27 18:42:45 +08:00
Amir Goldstein d04d4bc07d overlay: test ro/rw fd data inconsistecies
Introduce a new test to demonstrates a known issue with overlayfs:
- process A opens file F for read
- process B writes new data to file F
- process A reads old data from file F

This issue is about to be fixed with a patch set by Miklos Szeredi.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-25 22:54:46 +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
Darrick J. Wong 738938aab2 generic/182: retain existing btrfs behavior when len == 0
Since btrfs has always interpreted src_length=0 as "return 0 having
taken no action", test for that instead.

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>
2016-11-24 16:25:36 +08:00
Jaegeuk Kim 9520450542 generic: check some inline truncation behaviors
This patch introduces a new testcase to test some small truncations
to check inline_data and its cached data are truncated correctly at
the same time.

The inline_data feature was introduced in ext4 and f2fs as follows.
 ext4 : http://lwn.net/Articles/468678/
 f2fs : http://lwn.net/Articles/573408/

The basic idea is embedding small-sized file's data into relatively
large inode space.
In ext4, up to 132 bytes of data can be stored in 256 bytes-sized inode.
In f2fs, up to 3.4KB of data can be embedded into 4KB-sized inode block.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-22 13:49:01 +08:00
Jaegeuk Kim c74b1f84f9 generic: check inode metadata on f{data}sync after power-cut
This patch adds case to test fsync and fdatasync with power-cuts.

The rule to check is:
1) fsync should guarantee all the inode metadata after power-cut,
2) fdatasync should guarantee i_size and i_blocks at least after
   power-cut.

Note that, in XFS, it allocates more blocks when doing writes, so it
should close the file before fsync in order to get actual i_blocks
after power-cut.  Or, it needs to do truncate the file with a
specific size to turn it off at the beginning.

Suggested-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-22 13:45:33 +08:00
Qu Wenruo 083ff5827b fstests: Introduce check for explicit SHARED extent flag reporting
For fs support reflink, some of them (OK, btrfs again) doesn't split
SHARED flag for extent fiemap reporting.

For example:
  0         4K         8K
   / File1: Extent 0  \
  /                    \
  |<- On disk Extent-->|
  |        /
  | File2 /
    Extent: 0

Fs supports explicit SHARED extent reporting should report fiemap like:
File1: 2 extents
Extent 0-4K: SHARED
Extent 4-8K:
File2: 1 extents
Extent 0-4K: SHARED

Fs doesn't support explicit reporting will report fiemap like:
File1: 1 extent
Extent 0-8K: SHARED
File2: 1 extent
Extent 0-4K: SHARED

Test case like generic/372 require explicit reporting will cause
false alert on btrfs.

Add such runtime check for that requirememt.

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-18 16:41:06 +08:00
Omar Sandoval 21616145d2 generic: concurrent non-overlapping direct I/O on the same extents
There have been a couple of logic bugs in `btrfs_get_extent()` which
could lead to spurious -EEXIST errors from read or write. This test
exercises those conditions by having two threads race to add an
extent to the extent map.

This is fixed by Linux commit 8dff9c853410 ("Btrfs: deal with
duplciates during extent_map insertion in btrfs_get_extent") and the
patch "Btrfs: deal with existing encompassing extent map in
btrfs_get_extent()"
(http://marc.info/?l=linux-btrfs&m=147873402311143&w=2).

Although the bug is Btrfs-specific, nothing about the test is.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-18 16:41:06 +08:00
Liu Bo 775e2d0c03 generic/098: update test for truncating a file into the middle of a hole
This updates generic/098 by adding a sync option, i.e. 'sync' after
the second write, and with btrfs's NO_HOLES, we could still get
wrong isize after remount.

This gets fixed by the patch

'Btrfs: fix truncate down when no_holes feature is enabled'

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-18 16:41:02 +08:00
Omar Sandoval 9c5a3fa344 xfs/298: cd to / instead of ~
In our kernel testing infrastructure, "$HOME" isn't defined.
Everywhere else in xfstests does `cd /` instead, so let's just do
that.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-18 16:40:45 +08:00
Eryu Guan 1b244cdab2 generic: fix $tmp path in tests
Some tests use "tmp/$$" as $tmp, and this would result in ENOENT
failure if $tmp is referenced in helpers or tests, because we have
no "tmp" dir in pwd.

Fix them to use "/tmp/$$" as all other tests do.

Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-14 10:37:49 +08:00
Eryu Guan 23f60ef304 generic/38[3-6]: require project quota to be enabled on SCRATCH_DEV
generic/38[3-6] are made generic from xfs tests to test project
quota on other filesystems, e.g. ext4. But we should make sure
project quota is enabled in between of _scratch_enable_pquota and
_qmount. Otherwise mount will fail if there's no project quota
support on SCRATCH_DEV, e.g. ext2 and ext3.

Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-14 10:37:05 +08:00
Amir Goldstein cbc87660d5 generic/37[3-4]: use bind mount instead of 2nd _scratch_mount
generic/373 and generic/374 test that cross-mountpoint reflink/dedupe
fail with EXDEV.

For this test, _scratch_mount is called a 2nd time with same mount
arguments, but a different value of SCRATCH_MNT.

This practice is incorrect for overlayfs, which should not be using
the same upper/work dirs on two different overlay super blocks.

Change the test to use bind mount instead, which results in the
expected setup for both block device mount and overlay mount.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-14 10:35:45 +08:00
Christoph Hellwig e53bdf39d4 fstests: fix fsx fallocate error messages
Many of the commands using fallocate had an extra % at the beggining
of the error messages, missed the 0x prefix for hex output and printed
the length where it should print the end of the region.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-14 10:31:10 +08:00
Eric Sandeen 052b0777d7 xfs: testcase for kernelspace xfs_fsr extent handling flaw
This is a testcase for a bug which goes way back; googling
"xfs_trans_log_inode NULL pointer dereference" yields sporadic
reports over several years.

The test sets up several two-extent files with speculative
preallocation on them, and then runs xfs_fsr.  The kernelside
code ignores the preallocation, and therefore sets up the
temporary inode incorrectly after the inode fork swap.

It is a "dangerous" test because the extent mishandling on
the temporary inode causes a null pointer dereference and
oops when the inode's i_itemp pointer gets overwritten
and we blow up in logging code that tries to use it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-13 14:01:07 +08:00
Eryu Guan 00d42708c2 xfs/021: filter out detailed array element info from xfs_db
Starting from xfsprogs commit 384283555871 ("xfs_db: print one array
element per line"), xfs_db prints one array element per line. This
breaks the filter in xfs/021, which now fails as:

  hdr.freemap[0-2] = [base,size] [FREEMAP..]
 +0:[104,1892]
 +1:[0,0]
 +2:[0,0]
  entries[0-2] = [hashval,nameidx,incomplete,root,local] [ENTRIES..]

So we have extra lines that need to be filtered out,

Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2016-11-13 14:01:07 +08:00