From: Sheng Yong <shengyo...@xiaomi.com> Signed-off-by: Sheng Yong <shengyo...@xiaomi.com> --- tests/f_dentry_lost_dots/README | 7 ++++++ tests/f_dentry_lost_dots/expect.in | 16 +++++++++++++ tests/f_dentry_lost_dots/script | 37 ++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 tests/f_dentry_lost_dots/README create mode 100644 tests/f_dentry_lost_dots/expect.in create mode 100644 tests/f_dentry_lost_dots/script
diff --git a/tests/f_dentry_lost_dots/README b/tests/f_dentry_lost_dots/README new file mode 100644 index 000000000000..f07a1165b8cc --- /dev/null +++ b/tests/f_dentry_lost_dots/README @@ -0,0 +1,7 @@ +1. create f2fs image +2. mount f2fs +3. create a directory, and create a file in it +4. inject dot dentry in the directory by invalidating its valid bit +5. fsck fixes by adding a new dot dentry +6. inject dotdot dentry in the directory by invalidating its valid bit +7. fsck fixes by adding a new dotdot dentry diff --git a/tests/f_dentry_lost_dots/expect.in b/tests/f_dentry_lost_dots/expect.in new file mode 100644 index 000000000000..c024e683908d --- /dev/null +++ b/tests/f_dentry_lost_dots/expect.in @@ -0,0 +1,16 @@ +Info: Force to fix corruption +[ASSERT] (fsck_chk_inode_blk:x) --> ino: _INO_HEX_ has no '.' and/or '..' dirents, dot: 0, dotdot: 1 +[FIX] (fsck_chk_inode_blk:x) --> convert inline dentry ino: _INO_DEC_, pino: _PINO_DEC_, ret: 0 +[FIX] (fsck_chk_inode_blk:x) --> add missing '.' dirent in ino: _INO_DEC_, pino: _PINO_DEC_, ret:0 +[fsck_chk_quota_files:x] Fixing Quota file ([ 0] ino [0x4]) +[FIX] (nullify_nat_entry:x) --> Remove nid [0x4] in NAT +[fsck_chk_quota_files:x] Fixing Quota file ([ 1] ino [0x5]) +[FIX] (nullify_nat_entry:x) --> Remove nid [0x5] in NAT +[fsck_chk_quota_files:x] Fixing Quota file ([ 2] ino [0x6]) +[FIX] (nullify_nat_entry:x) --> Remove nid [0x6] in NAT +Info: Force to fix corruption +Info: Force to fix corruption +[ASSERT] (fsck_chk_inode_blk:x) --> ino: _INO_HEX_ has no '.' and/or '..' dirents, dot: 1, dotdot: 0 +[FIX] (fsck_chk_inode_blk:x) --> convert inline dentry ino: _INO_DEC_, pino: _PINO_DEC_, ret: 0 +[FIX] (fsck_chk_inode_blk:x) --> add missing '..' dirent in ino: _INO_DEC_, pino: _PINO_DEC_, ret:0 +Info: Force to fix corruption diff --git a/tests/f_dentry_lost_dots/script b/tests/f_dentry_lost_dots/script new file mode 100644 index 000000000000..38bfd36f0266 --- /dev/null +++ b/tests/f_dentry_lost_dots/script @@ -0,0 +1,37 @@ +#!/bin/bash + +DESC="directory missing dot or dotdot" + +. $TOPDIR/tests/helpers + +cleanup +make_f2fs > $LOG + +mkdir $TESTDIR/mntdir +safe_mount $MNT_OPTS $META $TESTDIR/mntdir >> $LOG +mkdir $TESTDIR/mntdir/testdir +touch $TESTDIR/mntdir/testdir/testfile +ino=`stat -c "%i" $TESTDIR/mntdir/testdir` +pino=`stat -c "%i" $TESTDIR/mntdir/testdir/..` +safe_umount $TESTDIR/mntdir >> $LOG +rm -rf $TESTDIR/mntdir + +echo "ino:$ino pino:$pino" >> $LOG + +# inject dot +$INJECT --dent --nid $ino --mb d_bitmap --dots 1 --val 0 $META >> $LOG +$FSCK $FSCK_OPTS -f $META > $OUT +$FSCK $FSCK_OPTS -f $META >> $OUT + +# inject dotdot +$INJECT --dent --nid $ino --mb d_bitmap --dots 2 --val 0 $META >> $LOG +$FSCK $FSCK_OPTS -f $META >> $OUT +$FSCK $FSCK_OPTS -f $META >> $OUT +cat $OUT >> $LOG + +INO_HEX=`printf "0x%x" $ino` +sed "s/_INO_HEX_/$INO_HEX/g" $TESTDIR/expect.in > $TESTDIR/expect +sed -i "s/_INO_DEC_/$ino/g" $TESTDIR/expect +sed -i "s/_PINO_DEC_/$pino/g" $TESTDIR/expect + +check_result -- 2.43.0 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel