diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 7689310b62ac176ba959689306f42425929af0ed..25a5bf292ca161c48beb660ad01760ea991751df 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -528,6 +528,12 @@ Details    : To improve performance, disable most logging (for debug purposes)
 	     by default.  VFSTRACE, RPCTRACE, and DLMTRACE are now off by
 	     default, and HA includes fewer messages.
 
+Severity   : minor
+Bugzilla   : 12858
+Frequency  : only run on patchless client.
+Description: use do_facet on sanity.sh for test handling recoverables errors
+Details    : use do_facet instead of direct use sysctl for set fail_loc on OST
+
 --------------------------------------------------------------------------------
 
 2007-05-03  Cluster File Systems, Inc. <info@clusterfs.com>
diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh
index 36aef3683d80e0b21a92b73997c2b6768cc12659..f688bea383e19a9c89614d20be44833610fc7905 100644
--- a/lustre/tests/sanity.sh
+++ b/lustre/tests/sanity.sh
@@ -3880,10 +3880,10 @@ test_118b()
 	reset_async
 
 	#define OBD_FAIL_OST_ENOENT 0x217
-	sysctl -w lustre.fail_loc=0x217
+	do_facet ost sysctl -w lustre.fail_loc=0x217
 	multiop $DIR/$tfile Ow4096yc
 	RC=$?
-	sysctl -w lustre.fail_loc=0
+	do_facet ost sysctl -w lustre.fail_loc=0
         DIRTY=$(grep -c dirty $LPROC/llite/*/dump_page_cache)
         WRITEBACK=$(grep -c writeback $LPROC/llite/*/dump_page_cache)
 
@@ -3913,7 +3913,7 @@ test_118c()
 	reset_async
 
 	#define OBD_FAIL_OST_EROFS               0x216
-	sysctl -w lustre.fail_loc=0x216
+	do_facet ost sysctl -w lustre.fail_loc=0x216
 
 	# multiop should block due to fsync until pages are written
 	multiop $DIR/$tfile Ow4096yc &
@@ -3929,7 +3929,7 @@ test_118c()
 		error "No page in writeback, writeback=$WRITEBACK"
 	fi
 
-	sysctl -w lustre.fail_loc=0
+	do_facet ost sysctl -w lustre.fail_loc=0
         wait $MULTIPID
 	RC=$?
 	if [[ $RC -ne 0 ]]; then
@@ -3953,7 +3953,7 @@ test_118d()
 	reset_async
 
 	#define OBD_FAIL_OST_BRW_PAUSE_BULK
-	sysctl -w lustre.fail_loc=0x214
+	do_facet ost sysctl -w lustre.fail_loc=0x214
 	# set 10s timeout
 	echo "10" > $LPROC/osc/resend_timeout
 	# multiop should block due to fsync until pages are written
@@ -3970,6 +3970,7 @@ test_118d()
 	fi
 
         wait $MULTIPID || error "Multiop fsync failed, rc=$?"
+	do_facet ost sysctl -w lustre.fail_loc=0
 
         DIRTY=$(grep -c dirty $LPROC/llite/*/dump_page_cache)
         WRITEBACK=$(grep -c writeback $LPROC/llite/*/dump_page_cache)	
@@ -3992,11 +3993,12 @@ test_118f() {
 	# Should simulate EINVAL error which is fatal
         multiop $DIR/$tfile Owy
         RC=$?
-
 	if [[ $RC -eq 0 ]]; then
 		error "Must return error due to dropped pages, rc=$RC"
 	fi
-
+	
+        sysctl -w lustre.fail_loc=0x0
+        
         LOCKED=$(grep -c locked $LPROC/llite/*/dump_page_cache)
         DIRTY=$(grep -c dirty $LPROC/llite/*/dump_page_cache)
         WRITEBACK=$(grep -c writeback $LPROC/llite/*/dump_page_cache)
@@ -4054,14 +4056,14 @@ test_118h() {
         reset_async
 
 	#define OBD_FAIL_OST_BRW_WRITE_BULK      0x20e
-        sysctl -w lustre.fail_loc=0x20e
+        do_facet ost sysctl -w lustre.fail_loc=0x20e
 	# set 10s timeout
 	echo "10" > $LPROC/osc/resend_timeout
 	# Should simulate ENOMEM error which is recoverable and should be handled by timeout
         multiop $DIR/$tfile Owy
         RC=$?
 	
-        sysctl -w lustre.fail_loc=0
+        do_facet ost sysctl -w lustre.fail_loc=0
 	if [[ $RC -eq 0 ]]; then
 		error "Must return error due to dropped pages, rc=$RC"
 	fi
@@ -4089,7 +4091,7 @@ test_118i() {
         reset_async
 
 	#define OBD_FAIL_OST_BRW_WRITE_BULK      0x20e
-        sysctl -w lustre.fail_loc=0x20e
+        do_facet ost sysctl -w lustre.fail_loc=0x20e
 	
 	# set 10s timeout
 	echo "10" > $LPROC/osc/resend_timeout
@@ -4097,7 +4099,7 @@ test_118i() {
         multiop $DIR/$tfile Owy &
 	PID=$!
 	sleep 5
-	sysctl -w lustre.fail_loc=0
+	do_facet ost sysctl -w lustre.fail_loc=0
 	
 	wait $PID
         RC=$?
@@ -4128,12 +4130,12 @@ test_118j() {
         reset_async
 
 	#define OBD_FAIL_OST_BRW_WRITE_BULK2     0x220
-        sysctl -w lustre.fail_loc=0x220
+        do_facet ost sysctl -w lustre.fail_loc=0x220
 
 	# return -EIO from OST
         multiop $DIR/$tfile Owy
         RC=$?
-        sysctl -w lustre.fail_loc=0x0
+        do_facet ost sysctl -w lustre.fail_loc=0x0
 	if [[ $RC -eq 0 ]]; then
 		error "Must return error due to dropped pages, rc=$RC"
 	fi