+test_102() {
+ [[ $(lustre_version_code $SINGLEMDS) -gt $(version_code 2.9.53) ]] ||
+ skip "Need server version greater than 2.9.53"
+ cleanup || error "cleanup failed with $?"
+
+ local mds1dev=$(mdsdevname 1)
+ local mds1mnt=$(facet_mntpt mds1)
+ local mds1fstype=$(facet_fstype mds1)
+ local mds1opts=$MDS_MOUNT_OPTS
+
+ if [ $mds1fstype == ldiskfs ] &&
+ ! do_facet mds1 test -b $mds1dev; then
+ mds1opts=$(csa_add "$mds1opts" -o loop)
+ fi
+ if [[ $mds1fstype == zfs ]]; then
+ import_zpool mds1 || return ${PIPESTATUS[0]}
+ fi
+
+ # unload all and only load libcfs to allow fail_loc setting
+ do_facet mds1 $LUSTRE_RMMOD || error "unable to unload modules"
+ do_facet mds1 modprobe libcfs || error "libcfs not loaded"
+ do_facet mds1 lsmod \| grep libcfs || error "libcfs not loaded"
+
+ #define OBD_FAIL_OBDCLASS_MODULE_LOAD 0x60a
+ do_facet mds1 "$LCTL set_param fail_loc=0x8000060a"
+
+ do_facet mds1 $MOUNT_CMD $mds1dev $mds1mnt $mds1opts &&
+ error "mdt start must fail"
+ do_facet mds1 lsmod \| grep obdclass && error "obdclass must not load"
+
+ do_facet mds1 "$LCTL set_param fail_loc=0x0"
+
+ do_facet mds1 $MOUNT_CMD $mds1dev $mds1mnt $mds1opts ||
+ error "mdt start must not fail"
+
+ cleanup || error "cleanup failed with $?"
+}
+run_test 102 "obdclass module cleanup upon error"
+
+test_renamefs() {
+ local newname=$1
+
+ echo "rename $FSNAME to $newname"
+
+ if ! combined_mgs_mds ; then
+ local facet=$(mgsdevname)
+
+ do_facet mgs \
+ "$TUNEFS --fsname=$newname --rename=$FSNAME -v $facet"||
+ error "(7) Fail to rename MGS"
+ if [ "$(facet_fstype $facet)" = "zfs" ]; then
+ reimport_zpool mgs $newname-mgs
+ fi
+ fi
+
+ for num in $(seq $MDSCOUNT); do
+ local facet=$(mdsdevname $num)
+
+ do_facet mds${num} \
+ "$TUNEFS --fsname=$newname --rename=$FSNAME -v $facet"||
+ error "(8) Fail to rename MDT $num"
+ if [ "$(facet_fstype $facet)" = "zfs" ]; then
+ reimport_zpool mds${num} $newname-mdt${num}
+ fi
+ done
+
+ for num in $(seq $OSTCOUNT); do
+ local facet=$(ostdevname $num)
+
+ do_facet ost${num} \
+ "$TUNEFS --fsname=$newname --rename=$FSNAME -v $facet"||
+ error "(9) Fail to rename OST $num"
+ if [ "$(facet_fstype $facet)" = "zfs" ]; then
+ reimport_zpool ost${num} $newname-ost${num}
+ fi
+ done
+}
+
+test_103_set_pool() {
+ local pname=$1
+ local ost_x=$2
+
+ do_facet mgs $LCTL pool_add $FSNAME.$pname ${FSNAME}-$ost_x ||
+ error "Fail to add $ost_x to $FSNAME.$pname"
+ wait_update $HOSTNAME \
+ "lctl get_param -n lov.$FSNAME-clilov-*.pools.$pname |
+ grep $ost_x" "$FSNAME-${ost_x}_UUID" ||
+ error "$ost_x is NOT in pool $FSNAME.$pname"
+}
+
+test_103_check_pool() {
+ local save_fsname=$1
+ local errno=$2
+
+ stat $DIR/$tdir/test-framework.sh ||
+ error "($errno) Fail to stat"
+ do_facet mgs $LCTL pool_list $FSNAME.pool1 ||
+ error "($errno) Fail to list $FSNAME.pool1"
+ do_facet mgs $LCTL pool_list $FSNAME.$save_fsname ||
+ error "($errno) Fail to list $FSNAME.$save_fsname"
+ do_facet mgs $LCTL pool_list $FSNAME.$save_fsname |
+ grep ${FSNAME}-OST0000 ||
+ error "($errno) List $FSNAME.$save_fsname is invalid"
+
+ local pname=$($LFS getstripe --pool $DIR/$tdir/d0)
+ [ "$pname" = "$save_fsname" ] ||
+ error "($errno) Unexpected pool name $pname"
+}
+
+test_103() {
+ check_mount_and_prep
+ rm -rf $DIR/$tdir
+ mkdir $DIR/$tdir || error "(1) Fail to mkdir $DIR/$tdir"
+ cp $LUSTRE/tests/test-framework.sh $DIR/$tdir ||
+ error "(2) Fail to copy test-framework.sh"
+
+ if ! combined_mgs_mds ; then
+ mount_mgs_client
+ fi
+ do_facet mgs $LCTL pool_new $FSNAME.pool1 ||
+ error "(3) Fail to create $FSNAME.pool1"
+ # name the pool name as the fsname
+ do_facet mgs $LCTL pool_new $FSNAME.$FSNAME ||
+ error "(4) Fail to create $FSNAME.$FSNAME"
+
+ test_103_set_pool $FSNAME OST0000
+
+ $SETSTRIPE -p $FSNAME $DIR/$tdir/d0 ||
+ error "(6) Fail to setstripe on $DIR/$tdir/d0"
+
+ if ! combined_mgs_mds ; then
+ umount_mgs_client
+ fi
+ KEEP_ZPOOL=true
+ stopall
+
+ test_renamefs mylustre
+
+ local save_fsname=$FSNAME
+ FSNAME="mylustre"
+ setupall
+
+ if ! combined_mgs_mds ; then
+ mount_mgs_client
+ fi
+ test_103_check_pool $save_fsname 7
+
+ if [ $OSTCOUNT -ge 2 ]; then
+ test_103_set_pool $save_fsname OST0001
+ fi
+
+ $SETSTRIPE -p $save_fsname $DIR/$tdir/f0 ||
+ error "(16) Fail to setstripe on $DIR/$tdir/f0"
+ if ! combined_mgs_mds ; then
+ umount_mgs_client
+ fi
+
+ stopall
+
+ test_renamefs tfs
+
+ FSNAME="tfs"
+ setupall
+
+ if ! combined_mgs_mds ; then
+ mount_mgs_client
+ fi
+ test_103_check_pool $save_fsname 17
+
+ if ! combined_mgs_mds ; then
+ umount_mgs_client
+ fi
+ stopall
+
+ test_renamefs $save_fsname
+
+ FSNAME=$save_fsname
+ setupall
+ KEEP_ZPOOL=false
+}
+run_test 103 "rename filesystem name"
+
+test_104() { # LU-6952
+ local mds_mountopts=$MDS_MOUNT_OPTS
+ local ost_mountopts=$OST_MOUNT_OPTS
+ local mds_mountfsopts=$MDS_MOUNT_FS_OPTS
+ local lctl_ver=$(do_facet $SINGLEMDS $LCTL --version |
+ awk '{ print $2 }')
+
+ [[ $(version_code $lctl_ver) -lt $(version_code 2.9.55) ]] &&
+ { skip "this test needs utils above 2.9.55" && return 0; }
+
+ # specify "acl" in mount options used by mkfs.lustre
+ if [ -z "$MDS_MOUNT_FS_OPTS" ]; then
+ MDS_MOUNT_FS_OPTS="acl,user_xattr"
+ else
+
+ MDS_MOUNT_FS_OPTS="${MDS_MOUNT_FS_OPTS},acl,user_xattr"
+ fi
+
+ echo "mountfsopt: $MDS_MOUNT_FS_OPTS"
+
+ #reformat/remount the MDT to apply the MDT_MOUNT_FS_OPT options
+ formatall
+ if [ -z "$MDS_MOUNT_OPTS" ]; then
+ MDS_MOUNT_OPTS="-o noacl"
+ else
+ MDS_MOUNT_OPTS="${MDS_MOUNT_OPTS},noacl"
+ fi
+
+ for num in $(seq $MDSCOUNT); do
+ start mds$num $(mdsdevname $num) $MDS_MOUNT_OPTS ||
+ error "Failed to start MDS"
+ done
+
+ for num in $(seq $OSTCOUNT); do
+ start ost$num $(ostdevname $num) $OST_MOUNT_OPTS ||
+ error "Failed to start OST"
+ done
+
+ mount_client $MOUNT
+ setfacl -m "d:$RUNAS_ID:rwx" $MOUNT &&
+ error "ACL is applied when FS is mounted with noacl."
+
+ MDS_MOUNT_OPTS=$mds_mountopts
+ OST_MOUNT_OPTS=$ost_mountopts
+ MDS_MOUNT_FS_OPTS=$mds_mountfsopts
+
+ formatall
+ setupall
+}
+run_test 104 "Make sure user defined options are reflected in mount"
+
+error_and_umount() {
+ umount $TMP/$tdir
+ rmdir $TMP/$tdir
+ error $*
+}
+
+test_105() {
+ cleanup -f
+ reformat
+ setup
+ mkdir -p $TMP/$tdir
+ mount --bind $DIR $TMP/$tdir || error "mount bind mnt pt failed"
+ rm -f $TMP/$tdir/$tfile
+ rm -f $TMP/$tdir/${tfile}1
+
+ # Files should not be created in ro bind mount point
+ # remounting from rw to ro
+ mount -o remount,ro $TMP/$tdir ||
+ error_and_umount "readonly remount of bind mnt pt failed"
+ touch $TMP/$tdir/$tfile &&
+ error_and_umount "touch succeeds on ro bind mnt pt"
+ [ -e $TMP/$tdir/$tfile ] &&
+ error_and_umount "file created on ro bind mnt pt"
+
+ # Files should be created in rw bind mount point
+ # remounting from ro to rw
+ mount -o remount,rw $TMP/$tdir ||
+ error_and_umount "read-write remount of bind mnt pt failed"
+ touch $TMP/$tdir/${tfile}1 ||
+ error_and_umount "touch fails on rw bind mnt pt"
+ [ -e $TMP/$tdir/${tfile}1 ] ||
+ error_and_umount "file not created on rw bind mnt pt"
+ umount $TMP/$tdir || error "umount of bind mnt pt failed"
+ rmdir $TMP/$tdir
+ cleanup || error "cleanup failed with $?"
+}
+run_test 105 "check file creation for ro and rw bind mnt pt"
+
+test_106() {
+ local repeat=5
+
+ reformat
+ setupall
+ mkdir -p $DIR/$tdir || error "create $tdir failed"
+ lfs setstripe -c 1 -i 0 $DIR/$tdir
+#define OBD_FAIL_CAT_RECORDS 0x1312
+ do_facet mds1 $LCTL set_param fail_loc=0x1312 fail_val=$repeat
+
+ for ((i = 1; i <= $repeat; i++)); do
+
+ #one full plain llog
+ createmany -o $DIR/$tdir/f- 64768
+
+ createmany -u $DIR/$tdir/f- 64768
+ done
+ wait_delete_completed $((TIMEOUT * 7))
+#ASSERTION osp_sync_thread() ( thread->t_flags != SVC_RUNNING ) failed
+#shows that osp code is buggy
+ do_facet mds1 $LCTL set_param fail_loc=0 fail_val=0
+
+ stopall
+}
+run_test 106 "check osp llog processing when catalog is wrapped"
+
+test_107() {
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.50) ]] ||
+ { skip "Need MDS version > 2.10.50"; return; }
+ local cmd
+
+ start_mgsmds || error "start_mgsmds failed"
+ start_ost || error "unable to start OST"
+
+ # add unknown configuration parameter.
+ if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ cmd="$PERM_CMD ost.$FSNAME-OST0000*.unknown_param"
+ else
+ cmd="$PERM_CMD $FSNAME-OST0000*.ost.unknown_param"
+ fi
+ do_facet mgs "$cmd=50"
+ cleanup_nocli || error "cleanup_nocli failed with $?"
+ load_modules
+
+ # unknown param should be ignored while mounting.
+ start_ost || error "unable to start OST after unknown param set"
+
+ cleanup || error "cleanup failed with $?"
+}
+run_test 107 "Unknown config param should not fail target mounting"
+
+t_108_prep() {
+ local facet
+
+ $rcmd rm -rf $tmp > /dev/null 2>&1
+ $rcmd mkdir -p $tmp/{mnt,images} || error "failed to mkdir remotely"
+
+ for facet in $facets; do
+ [ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
+ $rcmd $ZPOOL -f export lustre-$facet > /dev/null 2>&1
+ $rcmd mkdir $tmp/mnt/$facet ||
+ error "failed to mkdir $tmp/mnt/$facet"
+ $rcmd dd if=/dev/zero of=$tmp/images/$facet \
+ seek=199 bs=1M count=1 ||
+ error "failed to create $tmp/images/$facet"
+ done
+}
+
+t_108_mkfs() {
+ local role=$1
+ local idx=$2
+ local bkfs=$3
+ local mgs=$4
+ local facet=${role}$((idx + 1))
+ local pool=""
+ [ $# -eq 5 ] && pool=$5
+
+ do_facet $SINGLEMDS $MKFS --fsname=lustre --$mgs \
+ --$role --index=$idx --replace --backfstype=$bkfs \
+ --device-size=200000 --reformat $pool $tmp/images/$facet ||
+ error "failed to mkfs for $facet"
+}
+
+t_108_check() {
+ echo "mounting client..."
+ mount -t lustre ${nid}:/lustre $MOUNT ||
+ error "failed to mount lustre"
+
+ echo "check list"
+ ls -l $MOUNT/local_dir || error "failed to list"
+
+ echo "check truncate && write"
+ echo "dummmmmmmmmmmmm" > $MOUNT/remote_dir/fsx.c ||
+ error "failed to tuncate & write"
+
+ echo "check create"
+ touch $MOUNT/foooo ||
+ error "failed to create"
+
+ echo "check read && write && append"
+ sha1sum $MOUNT/conf-sanity.sh |
+ awk '{ print $1 }' > $MOUNT/checksum.new ||
+ error "failed to read(1)"
+ sha1sum $MOUNT/remote_dir/unlinkmany.c |
+ awk '{ print $1 }' >> $MOUNT/checksum.new ||
+ error "failed to read(2)"
+ sha1sum $MOUNT/striped_dir/lockahead_test.o |
+ awk '{ print $1 }' >> $MOUNT/checksum.new ||
+ error "failed to read(3)"
+
+ echo "verify data"
+ diff $MOUNT/checksum.new $MOUNT/checksum.src ||
+ error "failed to verify data"
+
+ echo "done."
+}
+
+t_108_cleanup() {
+ trap 0
+ local facet
+
+ echo "cleanup..."
+ umount -f $MOUNT || error "failed to umount client"
+ for facet in $facets; do
+ $rcmd umount -f $tmp/mnt/$facet ||
+ error "failed to umount $facet"
+ if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
+ $rcmd $ZPOOL export -f lustre-$facet ||
+ error "failed to export lustre-$facet"
+ fi
+ done
+
+ $rcmd rm -rf $tmp || error "failed to rm the dir $tmp"
+}
+
+test_108a() {
+ [ "$CLIENTONLY" ] && skip "Client-only testing" && return
+
+ [ $(facet_fstype $SINGLEMDS) != "zfs" ] &&
+ skip "zfs only test" && return
+
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.58) ] &&
+ skip "Need server version at least 2.10.58" && return
+
+ stopall
+ load_modules
+
+ local tmp=$TMP/$tdir
+ local rcmd="do_facet $SINGLEMDS"
+ local facets="mdt1 mdt2 ost1 ost2"
+ local nid=$($rcmd $LCTL list_nids | head -1)
+ local facet
+
+ trap t_108_cleanup EXIT ERR
+ t_108_prep
+
+ t_108_mkfs mdt 0 zfs mgs lustre-mdt1/mdt1
+ t_108_mkfs mdt 1 zfs mgsnode=$nid lustre-mdt2/mdt2
+ t_108_mkfs ost 0 zfs mgsnode=$nid lustre-ost1/ost1
+ t_108_mkfs ost 1 zfs mgsnode=$nid lustre-ost2/ost2
+
+ for facet in $facets; do
+ $rcmd zfs set mountpoint=$tmp/mnt/$facet canmount=on \
+ lustre-$facet/$facet ||
+ error "failed to zfs set for $facet (1)"
+ $rcmd zfs mount lustre-$facet/$facet ||
+ error "failed to local mount $facet"
+ $rcmd tar jxf $LUSTRE/tests/ldiskfs_${facet}_2_11.tar.bz2 \
+ --xattrs --xattrs-include="trusted.*" \
+ -C $tmp/mnt/$facet/ > /dev/null 2>&1 ||
+ error "failed to untar image for $facet"
+ $rcmd "cd $tmp/mnt/$facet && rm -rf oi.* OI_* lfsck_* LFSCK" ||
+ error "failed to cleanup for $facet"
+ $rcmd zfs umount lustre-$facet/$facet ||
+ error "failed to local umount $facet"
+ $rcmd zfs set canmount=off lustre-$facet/$facet ||
+ error "failed to zfs set $facet (2)"
+ done
+
+ echo "changing server nid..."
+ $rcmd mount -t lustre -o nosvc lustre-mdt1/mdt1 $tmp/mnt/mdt1
+ $rcmd lctl replace_nids lustre-MDT0000 $nid
+ $rcmd lctl replace_nids lustre-MDT0001 $nid
+ $rcmd lctl replace_nids lustre-OST0000 $nid
+ $rcmd lctl replace_nids lustre-OST0001 $nid
+ $rcmd umount $tmp/mnt/mdt1
+
+ for facet in $facets; do
+ echo "mounting $facet from backup..."
+ $rcmd mount -t lustre -o abort_recov lustre-$facet/$facet \
+ $tmp/mnt/$facet || error "failed to mount $facet"
+ done
+
+ # ZFS backend can detect migration and trigger OI scrub automatically
+ # sleep 3 seconds for scrub done
+ sleep 3
+
+ t_108_check
+ t_108_cleanup
+}
+run_test 108a "migrate from ldiskfs to ZFS"
+
+test_108b() {
+ [ "$CLIENTONLY" ] && skip "Client-only testing" && return
+
+ [ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] &&
+ skip "ldiskfs only test" && return
+
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.58) ] &&
+ skip "Need server version at least 2.10.58" && return
+
+ stopall
+ load_modules
+
+ local tmp=$TMP/$tdir
+ local rcmd="do_facet $SINGLEMDS"
+ local facets="mdt1 mdt2 ost1 ost2"
+ local scrub_list="MDT0000 MDT0001 OST0000 OST0001"
+ local nid=$($rcmd $LCTL list_nids | head -1)
+ local facet
+
+ trap t_108_cleanup EXIT ERR
+ t_108_prep
+
+ t_108_mkfs mdt 0 ldiskfs mgs
+ t_108_mkfs mdt 1 ldiskfs mgsnode=$nid
+ t_108_mkfs ost 0 ldiskfs mgsnode=$nid
+ t_108_mkfs ost 1 ldiskfs mgsnode=$nid
+
+ for facet in $facets; do
+ $rcmd mount -t ldiskfs -o loop $tmp/images/$facet \
+ $tmp/mnt/$facet ||
+ error "failed to local mount $facet"
+ $rcmd tar jxf $LUSTRE/tests/zfs_${facet}_2_11.tar.bz2 \
+ --xattrs --xattrs-include="*.*" \
+ -C $tmp/mnt/$facet/ > /dev/null 2>&1 ||
+ error "failed to untar image for $facet"
+ $rcmd "cd $tmp/mnt/$facet && rm -rf oi.* OI_* lfsck_* LFSCK" ||
+ error "failed to cleanup for $facet"
+ $rcmd umount $tmp/mnt/$facet ||
+ error "failed to local umount $facet"
+ done
+
+ echo "changing server nid..."
+ $rcmd mount -t lustre -o nosvc,loop $tmp/images/mdt1 $tmp/mnt/mdt1
+ $rcmd lctl replace_nids lustre-MDT0000 $nid
+ $rcmd lctl replace_nids lustre-MDT0001 $nid
+ $rcmd lctl replace_nids lustre-OST0000 $nid
+ $rcmd lctl replace_nids lustre-OST0001 $nid
+ $rcmd umount $tmp/mnt/mdt1
+
+ for facet in $facets; do
+ echo "mounting $facet from backup..."
+ $rcmd mount -t lustre -o loop,abort_recov $tmp/images/$facet \
+ $tmp/mnt/$facet || error "failed to mount $facet"
+ done
+
+ for facet in $scrub_list; do
+ $rcmd $LCTL lfsck_start -M lustre-$facet -t scrub ||
+ error "failed to start OI scrub on $facet"
+ done
+
+ # sleep 3 seconds for scrub done
+ sleep 3
+
+ t_108_check
+ t_108_cleanup
+}
+run_test 108b "migrate from ZFS to ldiskfs"
+
+
+#
+# set number of permanent parameters
+#
+test_109_set_params() {
+ local fsname=$1
+
+ set_persistent_param_and_check mds \
+ "mdd.$fsname-MDT0000.atime_diff" \
+ "$fsname-MDT0000.mdd.atime_diff" \
+ "62"
+ set_persistent_param_and_check mds \
+ "mdd.$fsname-MDT0000.atime_diff" \
+ "$fsname-MDT0000.mdd.atime_diff" \
+ "63"
+ set_persistent_param_and_check client \
+ "llite.$fsname*.max_read_ahead_mb" \
+ "$fsname.llite.max_read_ahead_mb" \
+ "32"
+ set_persistent_param_and_check client \
+ "llite.$fsname*.max_read_ahead_mb" \
+ "$fsname.llite.max_read_ahead_mb" \
+ "64"
+ create_pool $fsname.pool1 || error "create pool failed"
+ do_facet mgs $LCTL pool_add $fsname.pool1 OST0000 ||
+ error "pool_add failed"
+ do_facet mgs $LCTL pool_remove $fsname.pool1 OST0000 ||
+ error "pool_remove failed"
+ do_facet mgs $LCTL pool_add $fsname.pool1 OST0000 ||
+ error "pool_add failed"
+}
+
+#
+# check permanent parameters
+#
+test_109_test_params() {
+ local fsname=$1
+
+ local atime_diff=$(do_facet mds $LCTL \
+ get_param -n mdd.$fsname-MDT0000.atime_diff)
+ [ $atime_diff == 63 ] || error "wrong mdd parameter after clear_conf"
+ local max_read_ahead_mb=$(do_facet client $LCTL \
+ get_param -n llite.$fsname*.max_read_ahead_mb)
+ [ $max_read_ahead_mb == 64 ] ||
+ error "wrong llite parameter after clear_conf"
+ local ost_in_pool=$(do_facet mds $LCTL pool_list $fsname.pool1 |
+ grep -v "^Pool:" | sed 's/_UUID//')
+ [ $ost_in_pool = "$fsname-OST0000" ] ||
+ error "wrong pool after clear_conf"
+}
+
+#
+# run lctl clear_conf, store CONFIGS before and after that
+#
+test_109_clear_conf()
+{
+ local clear_conf_arg=$1
+
+ local mgsdev
+ if ! combined_mgs_mds ; then
+ mgsdev=$MGSDEV
+ stop_mgs || error "stop_mgs failed"
+ start_mgs "-o nosvc" || error "start_mgs nosvc failed"
+ else
+ mgsdev=$(mdsdevname 1)
+ start_mdt 1 "-o nosvc" || error "start_mdt 1 nosvc failed"
+ fi
+
+ do_facet mgs "rm -rf $TMP/${tdir}/conf1; mkdir -p $TMP/${tdir}/conf1;" \
+ "$DEBUGFS -c -R \\\"rdump CONFIGS $TMP/${tdir}/conf1\\\" \
+ $mgsdev"
+
+ #
+ # the command being tested
+ #
+ do_facet mgs $LCTL clear_conf $clear_conf_arg ||
+ error "clear_conf failed"
+ if ! combined_mgs_mds ; then
+ stop_mgs || error "stop_mgs failed"
+ else
+ stop_mdt 1 || error "stop_mdt 1 failed"
+ fi
+
+ do_facet mgs "rm -rf $TMP/${tdir}/conf2; mkdir -p $TMP/${tdir}/conf2;" \
+ "$DEBUGFS -c -R \\\"rdump CONFIGS $TMP/${tdir}/conf2\\\" \
+ $mgsdev"
+}
+
+test_109_file_shortened() {
+ local file=$1
+ local sizes=($(do_facet mgs "stat -c %s " \
+ "$TMP/${tdir}/conf1/CONFIGS/$file" \
+ "$TMP/${tdir}/conf2/CONFIGS/$file"))
+ [ ${sizes[1]} -lt ${sizes[0]} ] && return 0
+ return 1
+}
+
+test_109a()
+{
+ [ "$(facet_fstype mgs)" == "zfs" ] &&
+ skip "LU-8727: no implementation for ZFS" && return
+ stopall
+ reformat
+ setup_noconfig
+ client_up || error "client_up failed"
+
+ #
+ # set number of permanent parameters
+ #
+ test_109_set_params $FSNAME
+
+ umount_client $MOUNT || error "umount_client failed"
+ stop_ost || error "stop_ost failed"
+ stop_mds || error "stop_mds failed"
+
+ test_109_clear_conf $FSNAME
+ #
+ # make sure that all configs are cleared
+ #
+ test_109_file_shortened $FSNAME-MDT0000 ||
+ error "failed to clear MDT0000 config"
+ test_109_file_shortened $FSNAME-client ||
+ error "failed to clear client config"
+
+ setup_noconfig
+
+ #
+ # check that configurations are intact
+ #
+ test_109_test_params $FSNAME
+
+ #
+ # Destroy pool.
+ #
+ destroy_test_pools || error "destroy test pools failed"
+
+ cleanup
+}
+run_test 109a "test lctl clear_conf fsname"
+
+test_109b()
+{
+ [ "$(facet_fstype mgs)" == "zfs" ] &&
+ skip "LU-8727: no implementation for ZFS" && return
+ stopall
+ reformat
+ setup_noconfig
+ client_up || error "client_up failed"
+
+ #
+ # set number of permanent parameters
+ #
+ test_109_set_params $FSNAME
+
+ umount_client $MOUNT || error "umount_client failed"
+ stop_ost || error "stop_ost failed"
+ stop_mds || error "stop_mds failed"
+
+ test_109_clear_conf $FSNAME-MDT0000
+ #
+ # make sure that only one config is cleared
+ #
+ test_109_file_shortened $FSNAME-MDT0000 ||
+ error "failed to clear MDT0000 config"
+ test_109_file_shortened $FSNAME-client &&
+ error "failed to clear client config"
+
+ setup_noconfig
+
+ #
+ # check that configurations are intact
+ #
+ test_109_test_params $FSNAME
+
+ #
+ # Destroy pool.
+ #
+ destroy_test_pools || error "destroy test pools failed"
+
+ cleanup
+}
+run_test 109b "test lctl clear_conf one config"
+
+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,ea_inode,^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/<//' -e 's/\"//')
+ echo "inode num: $inode_num"
+ [ $inode_num -ge 2147483947 ] || error "inode $inode_num too small"
+ do_facet $SINGLEMDS "losetup -d $mdsdev"
+ cleanup_115
+}
+run_test 115 "Access large xattr with inodes number over 2TB"
+
+test_116() {
+ [ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] &&
+ skip "ldiskfs only test" && return
+
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.10.59) ] &&
+ skip "Need server version at least 2.10.59" && return
+
+ do_facet $SINGLEMDS which mkfs.xfs || {
+ skip_env "No mkfs.xfs installed"
+ return
+ }
+
+ stopall
+ load_modules
+
+ local tmpmnt=$TMP/$tdir
+ local mdtimg=$tfile-mdt0
+
+ do_facet $SINGLEMDS mkdir -p $tmpmnt
+ stack_trap "do_facet $SINGLEMDS rmdir $tmpmnt" EXIT
+
+ do_facet $SINGLEMDS touch $TMP/$mdtimg
+ stack_trap "do_facet $SINGLEMDS rm -f $TMP/$mdtimg" EXIT
+ do_facet $SINGLEMDS mkfs -t xfs -d file,size=1t,name=$TMP/$mdtimg ||
+ error "mkfs temporary xfs image"
+
+ do_facet $SINGLEMDS mount $TMP/$mdtimg $tmpmnt ||
+ error "mount temporary xfs image"
+ stack_trap "do_facet $SINGLEMDS umount $tmpmnt" EXIT
+ local old_mdssize=$MDSSIZE
+ local old_mdsisize=$MDSISIZE
+
+ MDSSIZE=$((17 * 1024 * 1024 * 1024)) # 17T MDT
+ MDSISIZE=$((16 << 20))
+ local opts17t="$(mkfs_opts $SINGLEMDS)"
+
+ MDSSIZE=$old_mdssize
+ MDSISIZE=$old_mdsisize
+ do_facet $SINGLEMDS $MKFS $opts17t $tmpmnt/$mdtimg ||
+ error "failed to mkfs for $tmpmnt/$mdtimg"
+
+ do_facet $SINGLEMDS $TUNE2FS -l $tmpmnt/$mdtimg |
+ grep -qw 'features.*extent' || error "extent should be enabled"
+}
+run_test 116 "big size MDT support"
+
+test_117() {
+ setup
+ do_facet ost1 "$LCTL set_param ost.OSS.ost_io.nrs_policies=fifo"
+ do_facet ost1 "$LCTL get_param -n ost.OSS.ost_io.nrs_tbf_rule" &&
+ error "get_param should fail"
+ cleanup || error "cleanup failed with rc $?"
+}
+run_test 117 "lctl get_param return errors properly"
+
+test_120() { # LU-11130
+ [ "$MDSCOUNT" -lt 2 ] && skip "mdt count < 2"
+ [ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] &&
+ skip "ldiskfs only test"
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+ skip "Need DNE2 capable MD target with LU-11130 fix"
+
+ setup
+
+ local mds1host=$(facet_active_host mds1)
+ local mds1dev=$(mdsdevname 1)
+
+ $LFS mkdir -i 1 $DIR/$tdir
+ $LFS mkdir -i 0 $DIR/$tdir/mds1dir
+
+ ln -s foo $DIR/$tdir/bar
+ mv $DIR/$tdir/bar $DIR/$tdir/mds1dir/bar2 ||
+ error "cross-target rename failed"
+
+ stopall
+
+ run_e2fsck $mds1host $mds1dev "-n"
+}
+run_test 120 "cross-target rename should not create bad symlinks"
+
+test_122() {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ [[ $(lustre_version_code ost1) -ge $(version_code 2.11.53) ]] ||
+ { skip "Need OST version at least 2.11.53" && return 0; }
+
+
+ reformat
+ LOAD_MODULES_REMOTE=true load_modules
+#define OBD_FAIL_OFD_SET_OID 0x1e0
+ do_facet ost1 $LCTL set_param fail_loc=0x00001e0
+
+ setupall
+ $LFS mkdir -i1 -c1 $DIR/$tdir
+ $LFS setstripe -i0 -c1 $DIR/$tdir
+ do_facet ost1 $LCTL set_param fail_loc=0
+ createmany -o $DIR/$tdir/file_ 1000 ||
+ error "Fail to create a new sequence"
+
+ reformat
+}
+run_test 122 "Check OST sequence update"
+
+test_123() {
+ setupall
+ local yaml_file="$TMP/$tfile.yaml"
+ do_facet mgs rm "$yaml_file"
+ local cfgfiles=$(do_facet mgs "lctl --device MGS llog_catlist |"\
+ " sed 's/config_log://'")
+
+ # set jobid_var to a different value for test
+ local orig_val=$(do_facet mgs $LCTL get_param jobid_var)
+ do_facet mgs $LCTL set_param -P jobid_var="testname"
+
+ for i in params $cfgfiles; do
+ do_facet mgs "lctl --device MGS llog_print ${i} >> $yaml_file"
+ done
+
+ echo "Unmounting FS"
+ stopall
+ echo "Writeconf"
+ writeconf_all
+ echo "Remounting"
+ mountmgs
+ mountmds
+ mountoss
+ mountcli
+
+ # Reapply the config from before
+ echo "Setting configuration parameters"
+ do_facet mgs "lctl set_param -F $yaml_file"
+
+ local set_val=$(do_facet mgs $LCTL get_param jobid_var)
+ do_facet mgs $LCTL set_param -P $orig_val
+
+ [ $set_val == "jobid_var=testname" ] ||
+ error "$set_val is not testname"
+
+ do_facet mgs rm "$yaml_file"
+}
+run_test 123 "clear and reset all parameters using set_param -F"
+