From d7449233c12bca3bc590b3d46ac265d09a2ecb8d Mon Sep 17 00:00:00 2001 From: Artem Blagodarenko Date: Wed, 27 Jul 2016 19:01:06 +0300 Subject: [PATCH] LU-8444 tests: test for unsigned xattr inode number The patch for "MRP-3025 Hitting "LDISKFS-fs error (device md66): ldiskfs_xattr_inode_iget: error while reading EA inode -2147483347" on large MDT volumes with large_xattr feature enabled." Added test: 1. MDS should have more than 2G inodes 2. mdt fs should be created with large_xattr flag. 3. set inode_goal to get higher inode number allocated: echo 2147483947 > /sys/fs/ldiskfs//inode_goal 3. create a file 4. start adding hard links to that file Test-Parameters: trivial testlist=conf-sanity Signed-off-by: Artem Blagodarenko Seagate-bug-id: MRP-3378 Change-Id: Id9c0fe9d8047935e5cf5be1b9209a74588565f2e Reviewed-on: https://review.whamcloud.com/21547 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Alexander Zarochentsev Reviewed-by: Alexander Lezhoev Reviewed-by: Oleg Drokin --- lustre/tests/conf-sanity.sh | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index d4bb962..7297ba7 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -7790,6 +7790,73 @@ test_108b() { } run_test 108b "migrate from ZFS to ldiskfs" +cleanup_115() +{ + trap 0 + stopall + rm -f $TMP/$tdir/lustre-mdt + formatall +} + +test_115() { + IMAGESIZE=$((3072 << 30)) # 3072 GiB + + if [ $(facet_fstype $SINGLEMDS) != ldiskfs ]; then + skip "Only applicable to ldiskfs-based MDTs" + return + fi + + stopall + # We need MDT size 3072GB, because it is smallest + # partition that can store 2B inodes + do_facet $SINGLEMDS "mkdir -p $TMP/$tdir" + local mdsimgname=$TMP/$tdir/lustre-mdt + do_facet $SINGLEMDS "rm -f $mdsimgname" + do_facet $SINGLEMDS "touch $mdsimgname" + trap cleanup_115 RETURN EXIT + do_facet $SINGLEMDS "$TRUNCATE $mdsimgname $IMAGESIZE" || + { skip "Backend FS doesn't support sparse files"; return 0; } + local mdsdev=$(do_facet $SINGLEMDS "losetup -f") + do_facet $SINGLEMDS "losetup $mdsdev $mdsimgname" + + local mds_opts="$(mkfs_opts mds1 ${mdsdev}) --device-size=$IMAGESIZE \ + --mkfsoptions='-O lazy_itable_init,large_xattr,^resize_inode,meta_bg \ + -i 1024'" + add mds1 $mds_opts --mgs --reformat $mdsdev || + { skip_env "format large MDT failed"; return 0; } + add ost1 $(mkfs_opts ost1 $(ostdevname 1)) --index=$i \ + --reformat $(ostdevname 1) $(ostvdevname 1) + + start $SINGLEMDS ${mdsdev} $MDS_MOUNT_OPTS || error "start MDS failed" + start_ost || error "start OSS failed" + mount_client $MOUNT || error "mount client failed" + + mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir fail" + for goal in $(do_facet $SINGLEMDS "ls /sys/fs/ldiskfs/*/inode_goal"); do + do_facet $SINGLEMDS "echo 2147483947 >> $goal; grep . $goal" + done + + touch $DIR/$tdir/$tfile + + # Add > 5k bytes to xattr + for i in {1..30}; do + ln $DIR/$tdir/$tfile $DIR/$tdir/$(printf "link%0250d" $i) || + error "Can't make link" + done + + sync; sleep 5; sync + + local inode_num=$(do_facet $SINGLEMDS \ + "$DEBUGFS -c -R 'stat ROOT/$tdir/$tfile' $mdsimgname" | + awk '/link =/ { print $4 }' | + sed -e 's/>//' -e 's/