xfs: test handling of invalid inode modes

Set all possible file type values for different types of files
and verify that xfs_repair detects the correct errors.

When setting invalid file type values (e.g. core.mode = 0170644),
all files are expected to have been junked by xfs_repair.

When setting valid file type values to non matching file types,
xfs_repair would either detect wrong format and junk the file, e.g.:
  would have junked entry "DATA" in directory PARENT_INO
or detect a ftype mismatch error, e.g.:
  would fix ftype mismatch (5/3) in directory/child PARENT_INO/FIFO_INO

If ftype feature is enabled, when setting file type to one of the
special types (i.e. FIFO(1), CHRDEV(2),BLKDEV(6),SOCKET(14)),
xfs_repair is expected to detect ftype mismatch error. Otherwise,
xfs_repair is not expected to detect ftype mismatch error.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
Amir Goldstein
2017-01-09 15:39:11 +02:00
committed by Eryu Guan
parent 466369dc92
commit 726f8c357f
3 changed files with 378 additions and 0 deletions
+248
View File
@@ -0,0 +1,248 @@
QA output created by 348
===== Find inode by file type:
dt=1 => FIFO_INO
dt=2 => CHRDEV_INO
dt=4 => DIR_INO
dt=6 => BLKDEV_INO
dt=10 => DATA_INO
dt=10 => EMPTY_INO
dt=12 => SYMLINK_INO
===== Setting dt=0 to all files:
core.mode = 0644
core.mode = 0644
core.mode = 0644
core.mode = 0644
core.mode = 0644
core.mode = 0644
core.mode = 0644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=1 to all files:
core.mode = 010644
core.mode = 010644
core.mode = 010644
core.mode = 010644
core.mode = 010644
core.mode = 010644
core.mode = 010644
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=2 to all files:
core.mode = 020644
core.mode = 020644
core.mode = 020644
core.mode = 020644
core.mode = 020644
core.mode = 020644
core.mode = 020644
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=3 to all files:
core.mode = 030644
core.mode = 030644
core.mode = 030644
core.mode = 030644
core.mode = 030644
core.mode = 030644
core.mode = 030644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=4 to all files:
core.mode = 040644
core.mode = 040644
core.mode = 040644
core.mode = 040644
core.mode = 040644
core.mode = 040644
core.mode = 040644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
===== Setting dt=5 to all files:
core.mode = 050644
core.mode = 050644
core.mode = 050644
core.mode = 050644
core.mode = 050644
core.mode = 050644
core.mode = 050644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=6 to all files:
core.mode = 060644
core.mode = 060644
core.mode = 060644
core.mode = 060644
core.mode = 060644
core.mode = 060644
core.mode = 060644
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=7 to all files:
core.mode = 070644
core.mode = 070644
core.mode = 070644
core.mode = 070644
core.mode = 070644
core.mode = 070644
core.mode = 070644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=10 to all files:
core.mode = 0100644
core.mode = 0100644
core.mode = 0100644
core.mode = 0100644
core.mode = 0100644
core.mode = 0100644
core.mode = 0100644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=11 to all files:
core.mode = 0110644
core.mode = 0110644
core.mode = 0110644
core.mode = 0110644
core.mode = 0110644
core.mode = 0110644
core.mode = 0110644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=12 to all files:
core.mode = 0120644
core.mode = 0120644
core.mode = 0120644
core.mode = 0120644
core.mode = 0120644
core.mode = 0120644
core.mode = 0120644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
===== Setting dt=13 to all files:
core.mode = 0130644
core.mode = 0130644
core.mode = 0130644
core.mode = 0130644
core.mode = 0130644
core.mode = 0130644
core.mode = 0130644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=14 to all files:
core.mode = 0140644
core.mode = 0140644
core.mode = 0140644
core.mode = 0140644
core.mode = 0140644
core.mode = 0140644
core.mode = 0140644
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=15 to all files:
core.mode = 0150644
core.mode = 0150644
core.mode = 0150644
core.mode = 0150644
core.mode = 0150644
core.mode = 0150644
core.mode = 0150644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=16 to all files:
core.mode = 0160644
core.mode = 0160644
core.mode = 0160644
core.mode = 0160644
core.mode = 0160644
core.mode = 0160644
core.mode = 0160644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO
===== Setting dt=17 to all files:
core.mode = 0170644
core.mode = 0170644
core.mode = 0170644
core.mode = 0170644
core.mode = 0170644
core.mode = 0170644
core.mode = 0170644
would have junked entry "BLKDEV" in directory PARENT_INO
would have junked entry "CHRDEV" in directory PARENT_INO
would have junked entry "DATA" in directory PARENT_INO
would have junked entry "DIR" in directory PARENT_INO
would have junked entry "EMPTY" in directory PARENT_INO
would have junked entry "FIFO" in directory PARENT_INO
would have junked entry "SYMLINK" in directory PARENT_INO