Thread (8 messages) 8 messages, 5 authors, 2016-08-30

Re: xfstests xfs fuzzers fail with DAX

From: Dan Williams <hidden>
Date: 2016-08-30 16:25:49
Also in: lkml, nvdimm
Subsystem: the rest · Maintainer: Linus Torvalds

On Tue, Aug 30, 2016 at 7:53 AM, Dan Williams [off-list ref] wrote:
On Mon, Aug 29, 2016 at 7:37 PM, Darrick J. Wong
[off-list ref] wrote:
quoted
On Mon, Aug 29, 2016 at 06:50:05PM -0700, Dan Williams wrote:
quoted
[ Adding Darrick on the off chance that this triggers an "aha, of
course it does!" ]
Aha!  Of course it does!!! :)
Heh, thanks :).  And apologies to Dave for missing his earlier note
pointing out the delalloc failure, linux-nvdimm list ate the response.
quoted
quoted
Darrick these corruption tests you added to xfstests last year all
fail the same way with DAX enabled.  They spew:

    "pwrite64: Structure needs cleaning"

...reports that are cleaned up by running without "-o dax".
I think this happens because in non-dax mode, the pwrite is a buffered
write and so long as we can create a delalloc reservation, everything
is ok and nothing fails.  Whereas for dax we have to allocate the
blocks for the pwrite immediately, thereby triggering the cntbt
verifier error.

Proceeding from the assumption "DAX behaves a lot like DIO", all the
tests that rely on buffered mode semantics are going to choke if DAX
is turned on without them knowing about it.
quoted
Alternatively you could sit back and watch me try to figure it out,
that should be quite entertaining... as a start I'll try to pin down a
stack trace when the error is returned.
As for how to fix this, probably the best option is to change line 98
to 'pwrite -W -S 0x62...' and update the output to include the
'structure needs cleaning' message.
I'll give it a shot.
So, that did not modulate the failure or the passing case.  However,
using -d at line 122 makes the no-dax case fail the same as the dax
case.

Would a change like this be acceptable in the interim while we figure
out which tests are delalloc sensitive, or did I just invalidate the
test?
diff --git a/tests/xfs/086 b/tests/xfs/086
index 143915bafaa1..26607c7a4697 100755
--- a/tests/xfs/086
+++ b/tests/xfs/086
@@ -96,7 +96,7 @@ _scratch_mount

 echo "+ modify files"
 for x in `seq 1 64`; do
-       $XFS_IO_PROG -f -c "pwrite -S 0x62 0 ${blksz}"
"${TESTFILE}.${x}" >> $seqres.full
+       $XFS_IO_PROG -f -c "pwrite -d -S 0x62 0 ${blksz}"
"${TESTFILE}.${x}" >> $seqres.full
 done
 umount "${SCRATCH_MNT}"
@@ -119,7 +119,7 @@ echo "broken: ${broken}"
 # Try appending again, now that we've fixed the fs
 echo "+ modify files (2)"
 for x in `seq 1 64`; do
-       $XFS_IO_PROG -f -c "pwrite -S 0x62 ${blksz} ${blksz}"
"${TESTFILE}.${x}" >> $seqres.fu
+       $XFS_IO_PROG -f -c "pwrite -d -S 0x62 ${blksz} ${blksz}"
"${TESTFILE}.${x}" >> $seqres
 done
 umount "${SCRATCH_MNT}"
diff --git a/tests/xfs/086.out b/tests/xfs/086.out
index 6c053f42deea..e2ec84e6b90f 100644
--- a/tests/xfs/086.out
+++ b/tests/xfs/086.out
@@ -16,5 +16,5 @@ broken: 1
 + mount image
 + chattr -R -i
 + check files (2)
-broken: 0
+broken: 1
 + check fs (2)
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help