ONLY=${ONLY:-"$*"}
-# bug number for skipped test:
+# bug number for skipped test: LU-8972
ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
! $mdt2_is_available || poolname_list+=" t32fs-mdt2"
for poolname in $poolname_list; do
- $r "$ZPOOL list -H $poolname >/dev/null 2>&1 ||
+ $r "modprobe zfs;
+ $ZPOOL list -H $poolname >/dev/null 2>&1 ||
$ZPOOL import -f -d $tmp $poolname"
done
if [[ $fstype == zfs ]]; then
local poolname=t32fs-mdt1
- $r "$ZPOOL list -H $poolname >/dev/null 2>&1 ||
+ $r "modprobe zfs;
+ $ZPOOL list -H $poolname >/dev/null 2>&1 ||
$ZPOOL import -f -d $tmp $poolname"
fi
$server_version -lt $(version_code 2.5.11) ]] ||
{ skip "Need MDS version 2.5.4+ or 2.5.26+ or 2.6.52+"; return; }
+ # ensure mds1 ost1 have been created even if running sub-test standalone
cleanup
+ setup
+ cleanup || error "cleanup failed"
+
+ # using directly mount command instead of start() function to avoid
+ # any side effect of // with others/externals tools/features
+ # ("zpool import", ...)
+
# MDT concurrent start
LOAD_MODULES_REMOTE=true load_modules
do_facet $SINGLEMDS "lsmod | grep -q libcfs" ||
error "MDT concurrent start: libcfs module not loaded"
+ 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
+
#define OBD_FAIL_TGT_MOUNT_RACE 0x716
- do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x716"
- start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
+ do_facet mds1 "$LCTL set_param fail_loc=0x80000716"
+
+ do_facet mds1 mount -t lustre $mds1dev $mds1mnt $mds1opts &
local pid=$!
- start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
- do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x0"
- local pid2=$!
- wait $pid2
+
+ do_facet mds1 mount -t lustre $mds1dev $mds1mnt $mds1opts
local rc2=$?
wait $pid
local rc=$?
+ do_facet mds1 "$LCTL set_param fail_loc=0x0"
if [ $rc -eq 0 ] && [ $rc2 -ne 0 ]; then
echo "1st MDT start succeed"
echo "2nd MDT start failed with $rc2"
do_rpc_nodes $oss_list "lsmod | grep -q libcfs" ||
error "OST concurrent start: libcfs module not loaded"
+ local ost1dev=$(ostdevname 1)
+ local ost1mnt=$(facet_mntpt ost1)
+ local ost1fstype=$(facet_fstype ost1)
+ local ost1opts=$OST_MOUNT_OPTS
+
+ if [ $ost1fstype == ldiskfs ] &&
+ ! do_facet ost1 test -b $ost1dev; then
+ ost1opts=$(csa_add "$ost1opts" -o loop)
+ fi
+ if [[ $ost1fstype == zfs ]]; then
+ import_zpool ost1 || return ${PIPESTATUS[0]}
+ fi
+
#define OBD_FAIL_TGT_MOUNT_RACE 0x716
- do_facet ost1 "$LCTL set_param fail_loc=0x716"
- start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
+ do_facet ost1 "$LCTL set_param fail_loc=0x80000716"
+
+ do_facet ost1 mount -t lustre $ost1dev $ost1mnt $ost1opts &
pid=$!
- start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
- do_facet ost1 "$LCTL set_param fail_loc=0x0"
- pid2=$!
- wait $pid2
+
+ do_facet ost1 mount -t lustre $ost1dev $ost1mnt $ost1opts
rc2=$?
wait $pid
rc=$?
+ do_facet ost1 "$LCTL set_param fail_loc=0x0"
if [ $rc -eq 0 ] && [ $rc2 -ne 0 ]; then
echo "1st OST start succeed"
echo "2nd OST start failed with $rc2"
fi
echo "$inode_slab ldisk inodes per page"
- [ "$inode_slab" -ge "3" ] ||
- error "ldisk inode size is too big, $inode_slab objs per page"
+ if [ "$inode_slab" -ge "3" ] ; then
+ # If kmalloc-128 is also 1 per page - this is a debug kernel
+ # and so this is not an error.
+ local kmalloc128=$(do_facet $SINGLEMDS \
+ "awk '/^(kmalloc|size)-128 / { print \\\$5 }' /proc/slabinfo")
+ # 32 128-byte chunks in 4k
+ [ "$kmalloc128" -eq "32" ] ||
+ error "ldisk inode size is too big, $inode_slab objs per page"
+ fi
+
return
}
run_test 63 "Verify each page can at least hold 3 ldisk inodes"
{
[[ $(facet_fstype ost1) != ldiskfs ]] &&
{ skip "Only applicable to ldiskfs-based OSTs" && return; }
+ [[ $(lustre_version_code ost1) -ge $(version_code 2.8.57) ]] ||
+ { skip "Need OST version at least 2.8.57" && return 0; }
local ost_opts="$(mkfs_opts ost1 $(ostdevname 1)) \
--reformat $(ostdevname 1) $(ostvdevname 1)"
}
run_test 100 "check lshowmount lists MGS, MDT, OST and 0@lo"
+test_101() {
+ local createmany_oid
+ local dev=$FSNAME-OST0000-osc-MDT0000
+ setup
+
+ createmany -o $DIR1/$tfile-%d 50000 &
+ createmany_oid=$!
+ # MDT->OST reconnection causes MDT<->OST last_id synchornisation
+ # via osp_precreate_cleanup_orphans.
+ for ((i = 0; i < 100; i++)); do
+ for ((k = 0; k < 10; k++)); do
+ do_facet $SINGLEMDS "$LCTL --device $dev deactivate;" \
+ "$LCTL --device $dev activate"
+ done
+
+ ls -asl $MOUNT | grep '???' &&
+ (kill -9 $createmany_oid &>/dev/null; \
+ error "File hasn't object on OST")
+
+ kill -s 0 $createmany_oid || break
+ done
+ wait $createmany_oid
+ cleanup
+}
+run_test 101 "Race MDT->OST reconnection with create"
+
if ! combined_mgs_mds ; then
stop mgs
fi