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!
test_5d() {
grep " $MOUNT " /etc/mtab &&
- error false "unexpected entry in mtab before mount" && return 10
+ error "unexpected entry in mtab before mount"
start_ost || error "OST start failed"
start_mds || error "MDS start failed"
- stop_ost || error "Unable to stop OST1"
+ stop_ost -f || error "Unable to stop OST1"
mount_client $MOUNT || error "mount_client $MOUNT failed"
umount_client $MOUNT -f || error "umount_client $MOUNT failed"
cleanup_nocli || error "cleanup_nocli failed with $?"
- grep " $MOUNT " /etc/mtab &&
+ ! grep " $MOUNT " /etc/mtab ||
error "$MOUNT entry in mtab after unmount"
- pass
}
run_test 5d "mount with ost down"
test_19b() {
start_ost || error "Unable to start OST1"
- stop_ost || error "Unable to stop OST1"
+ stop_ost -f || error "Unable to stop OST1"
}
run_test 19b "start/stop OSTs without MDS"
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"
}
run_test 81 "sparse OST indexing"
-# Wait OSTs to be active on both client and MDT side.
-wait_osts_up() {
- local cmd="$LCTL get_param -n lov.$FSNAME-clilov-*.target_obd |
- awk 'BEGIN {c = 0} /ACTIVE/{c += 1} END {printf \\\"%d\\\", c}'"
- wait_update $HOSTNAME "eval $cmd" $OSTCOUNT ||
- error "wait_update OSTs up on client failed"
-
- cmd="$LCTL get_param -n lod.$FSNAME-MDT*-*.target_obd | sort -u |
- awk 'BEGIN {c = 0} /ACTIVE/{c += 1} END {printf \\\"%d\\\", c}'"
- wait_update_facet $SINGLEMDS "eval $cmd" $OSTCOUNT ||
- error "wait_update OSTs up on MDT failed"
-}
-
# Here we exercise the stripe placement functionality on a file system that
# has formatted the OST with a random index. With the file system the following
# functionality is tested:
wait_update $HOSTNAME "$LCTL get_param -n lov.$FSNAME-*.pools.$TESTNAME|
sort -u | tr '\n' ' ' " "$ost_targets_uuid" ||
error "wait_update $ost_pool failed"
- pool_list $ost_pool || error "list OST pool $ost_pool failed"
+ [[ -z $(list_pool $ost_pool) ]] &&
+ error "list OST pool $ost_pool failed"
# If [--pool|-p <pool_name>] is set with [--ost-list|-o <ost_indices>],
# then the OSTs must be the members of the pool.
{
[[ $(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