On Mon, May 18, 2015 at 10:32:26PM -0500, Eric Sandeen wrote: > xfs/111 is failing today, primarily because it obliterates the > root inode chunk and the verifiers fail the mount - i.e. the test > fails to properly test the thing it's meant to test. > > Change the test so that the induced corruption is further into the > filesystem, but still hitting the inodes which have been created > for the test, so that the fs can mount and continue. > > This requires that the helper binary (itrash) take an offset, which > we will figure out by using xfs_db. > > This changes the locations of the inodes we hit; we're not really > going to be able to predict that terribly well, so remove the > output which shows inode offsets, and just keep track of whether > we managed to obliterate any at all. > > The test still fails, because the fs is corrupted; this was done > intentionally, so run xfs_repair before the test exits to fix > things up. > > (This test doesn't run often; it's not in the auto group, and > all the failures are extremely noisy and time consuming...) > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > > diff --git a/src/itrash.c b/src/itrash.c > index 21e1c5c..42692d0 100644 > --- a/src/itrash.c > +++ b/src/itrash.c > @@ -8,6 +8,7 @@ > #include <fcntl.h> > > char buffer[32768]; > +int overwrote; > > void die(char *func) > { > @@ -21,20 +22,32 @@ void nuke() > for (i = 2048; i < 32768-1; i++) > if (buffer[i] == 'I' && buffer[i+1] == 'N') { > buffer[i] = buffer[i+1] = 'X'; > - printf("Overwrote IN @offset %d\n", i); > + overwrote = 1; I'd probably do something like return a count of corrupted headers here but it's probably not worth getting into the minutiae of this test. This seems plenty good enough to me: Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > } > } > > int main(int argc, char* argv[]) > { > - int f = open(argv[1], O_RDWR); > + int f; > + loff_t offset; > + > + if (argc != 3) { > + printf("%s <device> <offset>\n", argv[0]); > + exit(1); > + } > + > + f = open(argv[1], O_RDWR); > + offset = atoll(argv[2]); > + > if (f < 0) die("open"); > - if (lseek(f, 32768, SEEK_SET) < 0) die("lseek"); > + if (lseek(f, offset, SEEK_SET) < 0) die("lseek"); > if (read(f, buffer, 32768) != 32768) die("read"); > printf("Starting overwrite\n"); > nuke(); > - if (lseek(f, 32768, SEEK_SET) < 0) die("lseek"); > + if (lseek(f, offset, SEEK_SET) < 0) die("lseek"); > if (write(f, buffer, 32768) != 32768) die("write"); > + if (!overwrote) > + printf("Did not overwrite any inodes\n"); > printf("Overwrite complete\n"); > close(f); > return 0; > diff --git a/tests/xfs/111 b/tests/xfs/111 > index f33f339..7c8f263 100755 > --- a/tests/xfs/111 > +++ b/tests/xfs/111 > @@ -40,6 +40,8 @@ _supported_fs xfs > _supported_os Linux > _require_scratch > > +rm -f $seqres.full > + > [ "$XFS_FSR_PROG" = "" ] && _notrun "xfs_fsr not found" > > # real QA test starts here > @@ -56,16 +58,27 @@ do > $XFS_IO_PROG -f -c "pwrite 0 512" $SCRATCH_MNT/${I} > /dev/null > let I=$I+1 > done > + > +# Roughly the middle of the created inodes > +INO=`ls -i $SCRATCH_MNT/512 | awk '{print $1}'` > umount $SCRATCH_DEV > > +# Figure out where that middle inode starts > +BYTE=`$XFS_DB_PROG -c "convert inode $INO byte" $SCRATCH_DEV \ > + | awk '{print $2}' | sed s/[\(\)]//g` > + > echo Blat inode clusters > -src/itrash $SCRATCH_DEV > +src/itrash $SCRATCH_DEV $BYTE > > -_scratch_mount > +_scratch_mount || _fail "Couldn't mount after itrash" > > echo Attempting bulkstat > #src/bstat -q $SCRATCH_MNT > -xfs_fsr $SCRATCH_MNT > +$XFS_FSR_PROG $SCRATCH_MNT | _filter_scratch > + > +# Fix up intentional corruption so test can pass > +umount $SCRATCH_DEV > +$XFS_REPAIR_PROG $SCRATCH_DEV >> $seqres.full 2>&1 > > status=0 > exit > diff --git a/tests/xfs/111.out b/tests/xfs/111.out > index 88a5c99..fd56c3c 100644 > --- a/tests/xfs/111.out > +++ b/tests/xfs/111.out > @@ -8,93 +8,6 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX > Create some files > Blat inode clusters > Starting overwrite > -Overwrote IN @offset 2048 > -Overwrote IN @offset 2304 > -Overwrote IN @offset 2560 > -Overwrote IN @offset 2816 > -Overwrote IN @offset 3072 > -Overwrote IN @offset 3328 > -Overwrote IN @offset 3584 > -Overwrote IN @offset 3840 > -Overwrote IN @offset 4096 > -Overwrote IN @offset 4352 > -Overwrote IN @offset 4608 > -Overwrote IN @offset 4864 > -Overwrote IN @offset 5120 > -Overwrote IN @offset 5376 > -Overwrote IN @offset 5632 > -Overwrote IN @offset 5888 > -Overwrote IN @offset 6144 > -Overwrote IN @offset 6400 > -Overwrote IN @offset 6656 > -Overwrote IN @offset 6912 > -Overwrote IN @offset 7168 > -Overwrote IN @offset 7424 > -Overwrote IN @offset 7680 > -Overwrote IN @offset 7936 > -Overwrote IN @offset 8192 > -Overwrote IN @offset 8448 > -Overwrote IN @offset 8704 > -Overwrote IN @offset 8960 > -Overwrote IN @offset 9216 > -Overwrote IN @offset 9472 > -Overwrote IN @offset 9728 > -Overwrote IN @offset 9984 > -Overwrote IN @offset 10240 > -Overwrote IN @offset 10496 > -Overwrote IN @offset 10752 > -Overwrote IN @offset 11008 > -Overwrote IN @offset 11264 > -Overwrote IN @offset 11520 > -Overwrote IN @offset 11776 > -Overwrote IN @offset 12032 > -Overwrote IN @offset 12288 > -Overwrote IN @offset 12544 > -Overwrote IN @offset 12800 > -Overwrote IN @offset 13056 > -Overwrote IN @offset 13312 > -Overwrote IN @offset 13568 > -Overwrote IN @offset 13824 > -Overwrote IN @offset 14080 > -Overwrote IN @offset 14336 > -Overwrote IN @offset 14592 > -Overwrote IN @offset 14848 > -Overwrote IN @offset 15104 > -Overwrote IN @offset 15360 > -Overwrote IN @offset 15616 > -Overwrote IN @offset 15872 > -Overwrote IN @offset 16128 > -Overwrote IN @offset 24576 > -Overwrote IN @offset 24832 > -Overwrote IN @offset 25088 > -Overwrote IN @offset 25344 > -Overwrote IN @offset 25600 > -Overwrote IN @offset 25856 > -Overwrote IN @offset 26112 > -Overwrote IN @offset 26368 > -Overwrote IN @offset 26624 > -Overwrote IN @offset 26880 > -Overwrote IN @offset 27136 > -Overwrote IN @offset 27392 > -Overwrote IN @offset 27648 > -Overwrote IN @offset 27904 > -Overwrote IN @offset 28160 > -Overwrote IN @offset 28416 > -Overwrote IN @offset 28672 > -Overwrote IN @offset 28928 > -Overwrote IN @offset 29184 > -Overwrote IN @offset 29440 > -Overwrote IN @offset 29696 > -Overwrote IN @offset 29952 > -Overwrote IN @offset 30208 > -Overwrote IN @offset 30464 > -Overwrote IN @offset 30720 > -Overwrote IN @offset 30976 > -Overwrote IN @offset 31232 > -Overwrote IN @offset 31488 > -Overwrote IN @offset 31744 > -Overwrote IN @offset 32000 > -Overwrote IN @offset 32256 > -Overwrote IN @offset 32512 > Overwrite complete > Attempting bulkstat > +SCRATCH_MNT start inode=0 > > > > > -- > To unsubscribe from this list: send the line "unsubscribe fstests" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe fstests" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html