+ set_rule $FSNAME any any plain
+ wait_flavor all2all plain || error_dbench "5"
+ check_dbench
+
+ #
+ # M - M: krb5a
+ # C - M: krb5i
+ # M - O: krb5p
+ # C - O: krb5n
+ #
+ set_rule $FSNAME any mdt2mdt krb5a
+ wait_flavor mdt2mdt krb5a || error_dbench "6"
+ check_dbench
+
+ set_rule $FSNAME any cli2mdt krb5i
+ wait_flavor cli2mdt krb5i || error_dbench "7"
+ check_dbench
+
+ set_rule $FSNAME any mdt2ost krb5p
+ wait_flavor mdt2ost krb5p || error_dbench "8"
+ check_dbench
+
+ set_rule $FSNAME any cli2ost krb5n
+ wait_flavor cli2ost krb5n || error_dbench "9"
+ check_dbench
+
+ #
+ # * - MDT0: krb5p
+ # * - OST0: krb5i
+ #
+ # nothing should be changed because they are override by above dir rules
+ #
+ set_rule $FSNAME-MDT0000 any any krb5p
+ set_rule $FSNAME-OST0000 any any krb5i
+ wait_flavor mdt2mdt krb5a || error_dbench "10"
+ wait_flavor cli2mdt krb5i || error_dbench "11"
+ check_dbench
+ wait_flavor mdt2ost krb5p || error_dbench "12"
+ wait_flavor cli2ost krb5n || error_dbench "13"
+
+ #
+ # delete all dir-specific rules
+ #
+ set_rule $FSNAME any mdt2mdt
+ set_rule $FSNAME any cli2mdt
+ set_rule $FSNAME any mdt2ost
+ set_rule $FSNAME any cli2ost
+ wait_flavor mdt2mdt krb5p $((MDSCOUNT - 1)) || error_dbench "14"
+ wait_flavor cli2mdt krb5p $(get_clients_mount_count) || error_dbench "15"
+ check_dbench
+ wait_flavor mdt2ost krb5i $MDSCOUNT || error_dbench "16"
+ wait_flavor cli2ost krb5i $(get_clients_mount_count) || error_dbench "17"
+ check_dbench
+
+ #
+ # remove:
+ # * - MDT0: krb5p
+ # * - OST0: krb5i
+ #
+ set_rule $FSNAME-MDT0000 any any
+ set_rule $FSNAME-OST0000 any any || error_dbench "18"
+ wait_flavor all2all plain || error_dbench "19"
+ check_dbench
+
+ stop_dbench
+}
+run_test 100 "change security flavor on the fly under load"
+
+switch_sec_test()
+{
+ local flavor0=$1
+ local flavor1=$2
+ local filename=$DIR/$tfile
+ local multiop_pid
+ local num
+
+ #
+ # after set to flavor0, start multop which use flavor0 rpc, and let
+ # server drop the reply; then switch to flavor1, the resend should be
+ # completed using flavor1. To exercise the code of switching ctx/sec
+ # for a resend request.
+ #
+ log ">>>>>>>>>>>>>>> Testing $flavor0 -> $flavor1 <<<<<<<<<<<<<<<<<<<"
+
+ set_rule $FSNAME any cli2mdt $flavor0
+ wait_flavor cli2mdt $flavor0
+ rm -f $filename || error "remove old $filename failed"
+
+#MDS_REINT = 36
+#define OBD_FAIL_PTLRPC_DROP_REQ_OPC 0x513
+ do_facet $SINGLEMDS lctl set_param fail_val=36
+ do_facet $SINGLEMDS lctl set_param fail_loc=0x513
+ log "starting multiop"
+ multiop $filename m &
+ multiop_pid=$!
+ echo "multiop pid=$multiop_pid"
+ sleep 1
+
+ set_rule $FSNAME any cli2mdt $flavor1
+ wait_flavor cli2mdt $flavor1
+
+ num=`ps --no-headers -p $multiop_pid 2>/dev/null | wc -l`
+ [ $num -eq 1 ] || error "multiop($multiop_pid) already ended ($num)"
+ echo "process $multiop_pid is still hanging there... OK"
+
+ do_facet $SINGLEMDS lctl set_param fail_loc=0
+ log "waiting for multiop ($multiop_pid) to finish"
+ wait $multiop_pid || error "multiop returned error"