xfs/111: make it work better
authorEric Sandeen <sandeen@redhat.com>
Tue, 26 May 2015 02:51:57 +0000 (12:51 +1000)
committerDave Chinner <david@fromorbit.com>
Tue, 26 May 2015 02:51:57 +0000 (12:51 +1000)
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@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
src/itrash.c
tests/xfs/111
tests/xfs/111.out

index 21e1c5c534c8bb2e4e5ffcb3634802de6f1c544b..42692d071a0ae3bb7db5ff0ab8dbfbb073d9f76b 100644 (file)
@@ -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;
                }
 }
 
 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;
index f33f3396d7d815dbb7cce0b5aff04ffbfe10de29..7c8f2638c0eff536e43e77033ec15fe3d6aaee30 100755 (executable)
@@ -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
index 88a5c99769842ef45e896a2dfb8f1d37624439df..fd56c3c8c1cd05c2b9af276faa15bd464d5537a8 100644 (file)
@@ -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