From 09fbe0fb330ef8cd851b6044cf5333a138b79074 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Thu, 28 Feb 2008 13:22:12 -0600 Subject: [PATCH] Add regression test for resize2fs moving inodes with inline xattrs The image contains an inode past the resize point with an inline xattr value of "propervalue". It also contains deleted inodes which had the xattr value "oldvalue". When resize2fs moves the inode, it should copy the xattr as well, so that post-resize we see "propervalue" not "oldvalue". Signed-off-by: Eric Sandeen Signed-off-by: "Theodore Ts'o" --- tests/r_inline_xattr/expect | 16 ++++++++++ tests/r_inline_xattr/image.gz | Bin 0 -> 18907 bytes tests/r_inline_xattr/name | 1 + tests/r_inline_xattr/script | 55 ++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 tests/r_inline_xattr/expect create mode 100644 tests/r_inline_xattr/image.gz create mode 100644 tests/r_inline_xattr/name create mode 100644 tests/r_inline_xattr/script diff --git a/tests/r_inline_xattr/expect b/tests/r_inline_xattr/expect new file mode 100644 index 000000000..f72ce8793 --- /dev/null +++ b/tests/r_inline_xattr/expect @@ -0,0 +1,16 @@ +resize2fs test +debugfs -R ''stat file'' ./test.img 2>&1 | grep ''^Inode\|in inode body\|name = '' +Inode: 1550 Type: regular Mode: 0644 Flags: 0x0 Generation: 3498507810 +Extended attributes stored in inode body: + name = "propervalue" (11) +Exit status is 0 +resize2fs ./test.img 5M +Resizing the filesystem on ./test.img to 5120 (1k) blocks. +The filesystem on ./test.img is now 5120 blocks long. + +Exit status is 0 +debugfs -R ''stat file'' ./test.img 2>&1 | grep ''^Inode\|in inode body\|name = '' +Inode: 12 Type: regular Mode: 0644 Flags: 0x0 Generation: 3498507810 +Extended attributes stored in inode body: + name = "propervalue" (11) +Exit status is 0 diff --git a/tests/r_inline_xattr/image.gz b/tests/r_inline_xattr/image.gz new file mode 100644 index 0000000000000000000000000000000000000000..ead286932427db342ca4e9858b00a60f243b5a54 GIT binary patch literal 18907 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 CmTva| literal 0 Hc-jL100001 diff --git a/tests/r_inline_xattr/name b/tests/r_inline_xattr/name new file mode 100644 index 000000000..97654fbdc --- /dev/null +++ b/tests/r_inline_xattr/name @@ -0,0 +1 @@ +shrinking filesystem with in-inode extended attributes diff --git a/tests/r_inline_xattr/script b/tests/r_inline_xattr/script new file mode 100644 index 000000000..eb923de43 --- /dev/null +++ b/tests/r_inline_xattr/script @@ -0,0 +1,55 @@ +if test -x $RESIZE2FS_EXE; then + +IMAGE=$test_dir/image.gz +FSCK_OPT=-yf +OUT=$test_name.log +EXP=$test_dir/expect + +gunzip < $IMAGE > $TMPFILE + +echo "resize2fs test" > $OUT + +# Look at existing inline extended attribute +echo "debugfs -R ''stat file'' $TMPFILE 2>&1 | grep ''^Inode\|in inode body\|name = ''" >> $OUT +$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|name = " >> $OUT +status=$? +echo Exit status is $status >> $OUT + +# resize it +echo "resize2fs $TMPFILE 5M" >> $OUT +$RESIZE2FS $TMPFILE 5M 2>&1 >> $OUT.new 2>&1 +status=$? +echo Exit status is $status >> $OUT.new +sed -e '1d' $OUT.new >> $OUT + +# Look at inline extended attribute in resized fs +echo "debugfs -R ''stat file'' $TMPFILE 2>&1 | grep ''^Inode\|in inode body\|name = ''" >> $OUT +$DEBUGFS -R "stat file" $TMPFILE 2>&1 | grep "^Inode\|in inode body\|name = " >> $OUT +status=$? +echo Exit status is $status >> $OUT + +rm $TMPFILE $OUT.new + +# +# Do the verification +# + +rm -f $test_name.ok $test_name.failed +cmp -s $OUT $EXP +status=$? + +if [ "$status" = 0 ] ; then + echo "ok" + touch $test_name.ok +else + echo "failed" + diff $DIFF_OPTS $EXP $OUT > $test_name.failed +fi + +unset IMAGE FSCK_OPT OUT EXP + +else #if test -x $RESIZE2FS; then + rm -f $test_name.ok $test_name.failed + echo "skipped" +fi + -- 2.47.2