+test_213() {
+ dd if=/dev/zero of=$DIR/$tfile bs=4k count=4
+ cancel_lru_locks osc
+ lctl set_param fail_loc=0x8000040f
+ # generate a read lock
+ cat $DIR/$tfile > /dev/null
+ # write to the file, it will try to cancel the above read lock.
+ cat /etc/hosts >> $DIR/$tfile
+}
+run_test 213 "OSC lock completion and cancel race don't crash - bug 18829"
+
+test_214() { # for bug 20133
+ mkdir -p $DIR/d214p/d214c
+ for (( i=0; i < 340; i++ )) ; do
+ touch $DIR/d214p/d214c/a$i
+ done
+
+ ls -l $DIR/d214p || error "ls -l $DIR/d214p failed"
+ mv $DIR/d214p/d214c $DIR/ || error "mv $DIR/d214p/d214c $DIR/ failed"
+ ls $DIR/d214c || error "ls $DIR/d214c failed"
+ rm -rf $DIR/d214* || error "rm -rf $DIR/d214* failed"
+}
+run_test 214 "hash-indexed directory test - bug 20133"
+
+test_215() { # for bug 18102
+ # /proc/sys/lnet/stats should look as 11 space-separated numbers
+ cat /proc/sys/lnet/stats >$TMP/lnet_stats.out
+ sysctl lnet.stats |sed 's/^lnet.stats\ =\ //g' >$TMP/lnet_stats.sys
+ STATS_LINES_OUT=$(cat $TMP/lnet_stats.out|wc -l)
+ [ "$STATS_LINES_OUT" = 1 ] || error "/proc/sys/lnet/stats has more than 1 line: $STATS"
+ STATS_LINES_SYS=$(cat $TMP/lnet_stats.sys|wc -l)
+ [ "$STATS_LINES_SYS" = 1 ] || error "lnet.stats has more than 1 line: $STATS"
+ STATS_REG='^[0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+ [0-9]\+$'
+ grep "$STATS_REG" $TMP/lnet_stats.out || (cat $TMP/lnet_stats.out &&
+ error "/proc/sys/lnet/stats misformatted")
+ grep "$STATS_REG" $TMP/lnet_stats.sys || (cat $TMP/lnet_stats.sys &&
+ error "lnet.stats misformatted")
+ rm -f $TMP/lnet_stats.out $TMP/lnet_stats.sys
+
+ # /proc/sys/lnet/routes should look exactly as expected
+ cat /proc/sys/lnet/routes >$TMP/lnet_routes.out
+ sysctl lnet.routes |sed 's/^lnet.routes\ =\ //g' >$TMP/lnet_routes.sys
+ echo "Routing disabled" >$TMP/lnet_routes.expected
+ echo "net hops state router" >>$TMP/lnet_routes.expected
+ diff $TMP/lnet_routes.expected $TMP/lnet_routes.out ||
+ error "/proc/sys/lnet/routes does not look as expected"
+ diff $TMP/lnet_routes.expected $TMP/lnet_routes.sys ||
+ error "lnet.routes does not look as expected"
+ rm -f $TMP/lnet_routes.expected $TMP/lnet_routes.out $TMP/lnet_routes.sys
+
+ # /proc/sys/lnet/routers should look exactly as expected
+ cat /proc/sys/lnet/routers >$TMP/lnet_routers.out
+ sysctl lnet.routers |sed 's/^lnet.routers\ =\ //g' >$TMP/lnet_routers.sys
+ echo "ref rtr_ref alive_cnt state last_ping router" >$TMP/lnet_routers.expected
+ diff $TMP/lnet_routers.expected $TMP/lnet_routers.out ||
+ error "/proc/sys/lnet/routers does not look as expected"
+ diff $TMP/lnet_routers.expected $TMP/lnet_routers.sys ||
+ error "lnet.routers does not look as expected"
+ rm -f $TMP/lnet_routers.expected $TMP/lnet_routers.out $TMP/lnet_routers.sys
+
+ # fisrt line of /proc/sys/lnet/peers should look exactly as expected
+ cat /proc/sys/lnet/peers >$TMP/lnet_peers.out
+ sysctl lnet.peers |sed 's/^lnet.peers\ =\ //g' >$TMP/lnet_peers.sys
+ head -1 $TMP/lnet_peers.out > $TMP/lnet_peers1.out
+ echo "nid refs state max rtr min tx min queue" >$TMP/lnet_peers1.expected
+ diff $TMP/lnet_peers1.expected $TMP/lnet_peers1.out ||
+ error "first line of /proc/sys/lnet/peers does not look as expected"
+ rm -f $TMP/lnet_peers1.expected $TMP/lnet_peers1.out
+ # other lines should look as a nid followed by 1 number, a word, 6 numbers, e.g.:
+ # 0@lo 1 NA 0 0 0 0 0 0
+ TOTAL_LINES=$(cat $TMP/lnet_peers.out |wc -l)
+ OTHER_LINES=$(($TOTAL_LINES - 1))
+ MATCHED_LINES=$(cat $TMP/lnet_peers.out |tail -$TOTAL_LINES |
+ grep -c "^[0-9.]\+@[a-z0-9]\+ *[0-9]\+ *[a-Z]\+ *[0-9]\+ *[0-9]\+ *-\?[0-9]\+ *[0-9]\+ *-\?[0-9]\+ *[0-9]\+$")
+ [ "$MATCHED_LINES" = "$OTHER_LINES" ] || (cat $TMP/lnet_peers.out &&
+ error "/proc/sys/lnet/peers misformatted")
+ diff $TMP/lnet_peers.out $TMP/lnet_peers.sys ||
+ error "lnet.peers does not look as expected"
+ rm -f $TMP/lnet_peers.out $TMP/lnet_peers.sys
+
+ # /proc/sys/lnet/buffers should look exactly as expected
+ cat /proc/sys/lnet/buffers >$TMP/lnet_buffers.out
+ sysctl lnet.buffers |sed 's/^lnet.buffers\ =\ //g' >$TMP/lnet_buffers.sys
+ echo "pages count credits min" >$TMP/lnet_buffers.expected
+ echo " 0 0 0 0" >>$TMP/lnet_buffers.expected
+ echo " 1 0 0 0" >>$TMP/lnet_buffers.expected
+ echo " 256 0 0 0" >>$TMP/lnet_buffers.expected
+ diff $TMP/lnet_buffers.expected $TMP/lnet_buffers.out ||
+ error "/proc/sys/lnet/buffers does not look as expected"
+ diff $TMP/lnet_buffers.expected $TMP/lnet_buffers.sys ||
+ error "lnet.buffers does not look as expected"
+ rm -f $TMP/lnet_buffers.expected $TMP/lnet_buffers.out $TMP/lnet_buffers.sys
+
+ # fisrt line of /proc/sys/lnet/nis should look exactly as expected
+ cat /proc/sys/lnet/nis >$TMP/lnet_nis.out
+ sysctl lnet.nis |sed 's/^lnet.nis\ =\ //g' >$TMP/lnet_nis.sys
+ head -1 $TMP/lnet_nis.out > $TMP/lnet_nis1.out
+ echo "nid refs peer rtr max tx min" >$TMP/lnet_nis1.expected
+ diff $TMP/lnet_nis1.expected $TMP/lnet_nis1.out ||
+ error "first line of /proc/sys/lnet/nis does not look as expected"
+ rm -f $TMP/lnet_nis1.expected $TMP/lnet_nis1.out
+ # other lines should look as a nid followed by 6 numbers, e.g.:
+ # 0@lo 3 0 0 0 0 0
+ TOTAL_LINES=$(cat $TMP/lnet_nis.out |wc -l)
+ OTHER_LINES=$(($TOTAL_LINES - 1))
+ MATCHED_LINES=$(cat $TMP/lnet_nis.out |tail -$TOTAL_LINES |
+ grep -c "^[0-9.]\+@[a-z0-9]\+ *[0-9]\+ *[0-9]\+ *[0-9]\+ *[0-9]\+ *[0-9]\+ *[0-9]\+$")
+ [ "$MATCHED_LINES" = "$OTHER_LINES" ] || (cat $TMP/lnet_nis.out &&
+ error "/proc/sys/lnet/nis misformatted")
+ diff $TMP/lnet_nis.out $TMP/lnet_nis.sys ||
+ error "lnet.nis does not look as expected"
+ rm -f $TMP/lnet_nis.out $TMP/lnet_nis.sys
+
+ # can we successfully write to /proc/sys/lnet/stats?
+ echo "0" >/proc/sys/lnet/stats || error "cannot write to /proc/sys/lnet/stats"
+ sysctl -w lnet.stats=0 || error "cannot write to lnet.stats"
+}
+run_test 215 "/proc/sys/lnet exists and has proper content - bug 18102"
+