common/fuzzy: try to clear blocking flags first in _scratch_fuzz_modify
authorGao Xiang <hsiangkao@redhat.com>
Fri, 12 Jun 2020 01:40:18 +0000 (09:40 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 21 Jun 2020 14:27:23 +0000 (22:27 +0800)
When stressing xfs/083, I found it sometimes fails as the following:

+++ touch 50000 files
setfattr: /home/fsgqa/scratchmnt/INOBT/20627: Operation not permitted
./common/fuzzy: line 18: /home/fsgqa/scratchmnt/INOBT/20627: Operation not permitted
mv: cannot move '/home/fsgqa/scratchmnt/INOBT/20627' to '/home/fsgqa/scratchmnt/INOBT/20627.longer': Operation not permitted
...
xfs_repair did not fix everything

It's simply that INOBT/20627 was an immutable file generated from
fuzzing. Therefore, this patch tries to clear append, immutable flag
first before modification. Note that it clears dax flag as well
since it prevents immutable flag from clearing.

Signed-off-by: Gao Xiang <hsiangkao@redhat.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
common/fuzzy

index 988203b..bd08af1 100644 (file)
@@ -14,6 +14,8 @@ _scratch_fuzz_modify() {
        $XFS_IO_PROG -f -c "pwrite -S 0x63 0 ${blk_sz}" "/tmp/afile" > /dev/null
        date="$(date)"
        find "${SCRATCH_MNT}/" -type f 2> /dev/null | head -n "${nr}" | while read f; do
+               # try to remove append, immutable (and even dax) flag if exists
+               $XFS_IO_PROG -rc 'chattr -x -i -a' "$f" > /dev/null 2>&1
                setfattr -n "user.date" -v "${date}" "$f"
                cat "/tmp/afile" >> "$f"
                mv "$f" "$f.longer"