diff --git a/lustre-iokit/mds-survey/mds-survey b/lustre-iokit/mds-survey/mds-survey
index 7bde56290da75b22f6d3943f93d70517fcd08e79..0d6bc30f8e11dd6a8719c6ec7f533fb7d6d8b92e 100755
--- a/lustre-iokit/mds-survey/mds-survey
+++ b/lustre-iokit/mds-survey/mds-survey
@@ -61,6 +61,7 @@ create_directories () {
 	local ndir=$3
 	local rfile=$4
 	local mdtidx=$5
+	local dir_stripes=$6
 	local idx
 
 	for ((idx = 0; idx < $ndir; idx++)); do
@@ -69,7 +70,8 @@ create_directories () {
 		else
 			dirname="$(printf "${mdtbasedir}" $mdtidx)${basedir}${idx}"
 		fi
-		remote_shell $host $lctl --device $devno test_mkdir /$dirname > $rfile 2>&1
+		remote_shell $host $lctl --device $devno test_mkdir /$dirname \
+			-c $dir_stripes --stripe_index $mdtidx > $rfile 2>&1
 		while read line; do
 			echo "$line" | grep -q 'error: test_mkdir'
 			if [ $?  -eq 0 ]; then
@@ -291,7 +293,7 @@ for ((idx = 0; idx < $ndevs; idx++)); do
 	mdtidx=${client_indexes[$idx]}
 	echo "=======> Create $dir_count directories on $client_name" >> $workf
 	destroy_directories $host $devno $dir_count $tmpf $mdtidx
-	ret=$(create_directories $host $devno $dir_count $tmpf $mdtidx)
+	ret=$(create_directories $host $devno $dir_count $tmpf $mdtidx $ndevs)
 	cat $tmpf >> $workf
 	rm $tmpf
 	if [ $ret = "ERROR" ]; then
diff --git a/lustre/tests/mds-survey.sh b/lustre/tests/mds-survey.sh
index 6eb9b45b10659484e57a5f1f53faee9fc6b74f21..a4085673aec2cfe49f115fd9cbee88c246b7993d 100644
--- a/lustre/tests/mds-survey.sh
+++ b/lustre/tests/mds-survey.sh
@@ -67,29 +67,50 @@ cleanup_mount $MOUNT
 cleanup_mount $MOUNT2
 
 get_target() {
-    local mds=$(facet_host $SINGLEMDS)
-    echo $(do_nodes $mds 'lctl dl' | \
-        awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
+	local node=$1
+	local mdt
+	local mdts
+	local target
+
+	mdts=$(do_node $node "$LCTL dl" |
+	       awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}")
+
+	for mdt in $mdts; do
+		target+="${target:+ }$node:$mdt"
+	done
+
+	echo -n $target
+}
+
+get_targets() {
+	local targets
+	local node
+
+	for node in $(mdts_nodes); do
+		targets+="${targets:+ }$(get_target $node)"
+	done
+
+	echo -n $targets
 }
 
 mds_survey_run() {
-    local layer=${1:-mdd}
-    local stripe_count=${2:-0}
-    local mds=$(facet_host $SINGLEMDS)
-    local rc=0
-
-    rm -f ${TMP}/mds_survey*
-
-    local target=$(get_target)
-    local cmd="file_count=$file_count thrlo=$thrlo thrhi=$thrhi"
-    local cmd+=" dir_count=$dir_count layer=$layer stripe_count=$stripe_count"
-    local cmd+=" rslt_loc=${TMP} targets=\"$mds:$target\" $MDSSURVEY"
-
-    echo + $cmd
-    eval $cmd || rc=$?
-    cat ${TMP}/mds_survey*
-    rm -f ${TMP}/mds_survey*
-    ((rc == 0)) || error "mds-survey failed"
+	local layer=${1:-mdd}
+	local stripe_count=${2:-0}
+	local rc=0
+
+	rm -f ${TMP}/mds_survey*
+
+	local cmd="file_count=$file_count thrlo=$thrlo thrhi=$thrhi"
+	cmd+=" dir_count=$dir_count layer=$layer stripe_count=$stripe_count"
+	cmd+=" rslt_loc=${TMP} targets=\"$(get_targets)\" $MDSSURVEY"
+
+	trap cleanup_echo_devs EXIT ERR
+
+	echo + $cmd
+	eval $cmd || rc=$?
+	cat ${TMP}/mds_survey*
+	rm -f ${TMP}/mds_survey*
+	((rc == 0)) || error "mds-survey failed"
 }
 
 test_1() {
diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh
index fed69645092bcd9c5ee4a72f1c82f88f77d4b52a..3221f47f135ed242936398b26956792a75c38c9e 100755
--- a/lustre/tests/test-framework.sh
+++ b/lustre/tests/test-framework.sh
@@ -3378,12 +3378,14 @@ stopall() {
 }
 
 cleanup_echo_devs () {
-    local devs=$($LCTL dl | grep echo | awk '{print $4}')
+	trap 0
+	local dev
+	local devs=$($LCTL dl | grep echo | awk '{print $4}')
 
-    for dev in $devs; do
-        $LCTL --device $dev cleanup
-        $LCTL --device $dev detach
-    done
+	for dev in $devs; do
+		$LCTL --device $dev cleanup
+		$LCTL --device $dev detach
+	done
 }
 
 cleanupall() {