aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2008-02-28 13:22:12 -0600
committerTheodore Ts'o <tytso@mit.edu>2008-02-28 19:50:09 -0500
commit09fbe0fb330ef8cd851b6044cf5333a138b79074 (patch)
treea6f451bcf3f46d2443dff0f776757ad527d8bd6f
parent4ef28824ca29e86053398c3e4cecca6d88b2b397 (diff)
downloadandroid_external_e2fsprogs-09fbe0fb330ef8cd851b6044cf5333a138b79074.tar.gz
android_external_e2fsprogs-09fbe0fb330ef8cd851b6044cf5333a138b79074.tar.bz2
android_external_e2fsprogs-09fbe0fb330ef8cd851b6044cf5333a138b79074.zip
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 <sandeen@redhat.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r--tests/r_inline_xattr/expect16
-rw-r--r--tests/r_inline_xattr/image.gzbin0 -> 18907 bytes
-rw-r--r--tests/r_inline_xattr/name1
-rw-r--r--tests/r_inline_xattr/script55
4 files changed, 72 insertions, 0 deletions
diff --git a/tests/r_inline_xattr/expect b/tests/r_inline_xattr/expect
new file mode 100644
index 00000000..f72ce879
--- /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 00000000..ead28693
--- /dev/null
+++ b/tests/r_inline_xattr/image.gz
Binary files differ
diff --git a/tests/r_inline_xattr/name b/tests/r_inline_xattr/name
new file mode 100644
index 00000000..97654fbd
--- /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 00000000..eb923de4
--- /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
+