diff --git a/lustre/tests/sanityN.sh b/lustre/tests/sanityN.sh
index bbf9e97c57e51d784a9300fc9658183c1c4bfa33..0e1a9bccda5116daeb47105b944c64264cae086d 100644
--- a/lustre/tests/sanityN.sh
+++ b/lustre/tests/sanityN.sh
@@ -20,6 +20,7 @@ CHECKSTAT=${CHECKSTAT:-"checkstat -v"}
 CREATETEST=${CREATETEST:-createtest}
 GETSTRIPE=${GETSTRIPE:-lfs getstripe}
 SETSTRIPE=${SETSTRIPE:-lstripe}
+LFS=${LFS:-lfs}
 LCTL=${LCTL:-lctl}
 MCREATE=${MCREATE:-mcreate}
 OPENFILE=${OPENFILE:-openfile}
@@ -27,6 +28,8 @@ OPENUNLINK=${OPENUNLINK:-openunlink}
 TOEXCL=${TOEXCL:-toexcl}
 TRUNCATE=${TRUNCATE:-truncate}
 export TMP=${TMP:-/tmp}
+CHECK_GRANT=${CHECK_GRANT:-"no"}
+
 
 if [ $UID -ne 0 ]; then
 	RUNAS_ID="$UID"
@@ -87,6 +90,7 @@ run_one() {
 	export tfile=f${testnum}
 	export tdir=d${base}
 	test_$1 || error "exit with rc=$?"
+	check_grant || error "check grant fail"
 	unset TESTNAME
 	pass "($((`date +%s` - $BEFORE))s)"
 	cd $SAVE_PWD
@@ -133,6 +137,54 @@ basetest() {
     IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
 }
 
+sync_clients() {
+	cd $DIR1
+	sync; sleep 1; sync
+	cd $DIR2
+	sync; sleep 1; sync
+
+	cd $SAVE_PWD
+}
+
+check_grant() {
+	[ "$CHECK_GRANT" == "no" ] && return 0
+
+	echo -n "checking grant......"
+	cd $SAVE_PWD
+	# write some data to sync client lost_grant
+	rm -f $DIR1/${tfile}_check_grant_* 2>&1
+	for i in `seq $OSTCOUNT`; do
+		$LFS setstripe $DIR1/${tfile}_check_grant_$i 0 $(($i -1)) 1
+		dd if=/dev/zero of=$DIR1/${tfile}_check_grant_$i bs=4k \
+					      count=1 > /dev/null 2>&1 
+	done
+	# sync all the data and make sure no pending data on server
+	sync_clients
+	
+	#get client grant and server grant 
+	client_grant=0
+       	for d in /proc/fs/lustre/osc/*/cur_grant_bytes; do 
+		client_grant=$(($client_grant + `cat $d`))
+	done
+	server_grant=0
+	for d in /proc/fs/lustre/obdfilter/*/tot_granted; do
+		server_grant=$(($server_grant + `cat $d`))
+	done
+
+	# cleanup the check_grant file
+	for i in `seq $OSTCOUNT`; do
+	        rm $DIR1/${tfile}_check_grant_$i
+	done
+
+	#check whether client grant == server grant 
+	if [ $client_grant != $server_grant ]; then
+		echo "failed: client:${client_grant} server: ${server_grant}"
+		return 1
+	else
+		echo "pass"
+	fi
+}
+
 run_test() {
          export base=`basetest $1`
          if [ "$ONLY" ]; then
@@ -204,6 +256,10 @@ export DIR2=${DIR2:-$MOUNT2}
 [ -z "`echo $DIR1 | grep $MOUNT1`" ] && echo "$DIR1 not in $MOUNT1" && exit 96
 [ -z "`echo $DIR2 | grep $MOUNT2`" ] && echo "$DIR2 not in $MOUNT2" && exit 95
 
+LPROC=/proc/fs/lustre
+LOVNAME=`cat $LPROC/llite/*/lov/common_name | tail -n 1`
+OSTCOUNT=`cat $LPROC/lov/$LOVNAME/numobd`
+
 rm -rf $DIR1/[df][0-9]* $DIR1/lnk
 
 build_test_filter