+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
+}
+