diff --git a/lustre/tests/acceptance-small.sh b/lustre/tests/acceptance-small.sh
index 9d14d74a9cc8692188709cee2ff35f40c74fc4cf..e10c7382396f16080e717c312b3ef794ff4a80c2 100755
--- a/lustre/tests/acceptance-small.sh
+++ b/lustre/tests/acceptance-small.sh
@@ -61,6 +61,7 @@ setup_if_needed() {
     local MOUNTED=$(mounted_lustre_filesystems)
     if $(echo $MOUNTED | grep -w -q $MOUNT); then
         check_config $MOUNT
+        init_versions_vars
         return
     fi
 
@@ -315,8 +316,12 @@ for NAME in $CONFIGS; do
 	fi
 
 	[ "$NETTYPE" = "tcp" -o "$NETTYPE" = "ptl" ] || LIBLUSTRE=no # bug 15660
+	if [ "$LIBLUSTRE" != "no" ] && ! check_versions ; then
+		skip liblustre version mismatch: cli $CLIVER, mds $MDSVER, ost $OSTVER
+		LIBLUSTRE=no	# bug 17696
+	fi
 	if [ "$LIBLUSTRE" != "no" ]; then
-	        title liblustre
+		title liblustre
 		assert_env MGSNID MOUNT2
 		export LIBLUSTRE_MOUNT_POINT=$MOUNT2
 		export LIBLUSTRE_MOUNT_RETRY=5
diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh
index 617f2bcd989316cd8647096bcf1ab8c2fd053fdf..747d415ecd08256f35b00e08d2518a8e70626d0d 100644
--- a/lustre/tests/test-framework.sh
+++ b/lustre/tests/test-framework.sh
@@ -1243,6 +1243,8 @@ setupall() {
         [ -n "$CLIENTS" ] && zconf_mount_clients $CLIENTS $MOUNT2
     fi
 
+    init_versions_vars
+
     # by remounting mdt before ost, initial connect from mdt to ost might
     # timeout because ost is not ready yet. wait some time to its fully
     # recovery. initial obd_connect timeout is 5s; in GSS case it's preceeded
@@ -1295,6 +1297,12 @@ init_facets_vars () {
     done
 }
 
+init_versions_vars () {
+    export MDSVER=$(do_facet $SINGLEMDS "lctl get_param version" | cut -d. -f1,2)
+    export OSTVER=$(do_facet ost1 "lctl get_param version" | cut -d. -f1,2)
+    export CLIVER=$(lctl get_param version | cut -d. -f 1,2)
+}
+
 check_config () {
     local mntpt=$1
     
@@ -1319,6 +1327,7 @@ check_and_setup_lustre() {
     else
         check_config $MOUNT
         init_facets_vars
+        init_versions_vars
     fi
     if [ "$ONLY" == "setup" ]; then
         exit 0
@@ -1964,9 +1973,13 @@ is_patchless ()
     lctl get_param version | grep -q patchless
 }
 
+check_versions () {
+    [ "$MDSVER" = "$CLIVER" -a "$OSTVER" = "$CLIVER" ]
+}
+
 get_node_count() {
-   local nodes="$@"
-   echo $nodes | wc -w || true
+    local nodes="$@"
+    echo $nodes | wc -w || true
 }
 
 mixed_ost_devs () {