__u32 lnd_fmr_cache;
__u16 lnd_conns_per_peer;
__u16 lnd_ntx;
+ __u32 lnd_timeout;
};
struct lnet_ioctl_config_kfilnd_tunables {
__u32 lnd_version;
__u16 lnd_conns_per_peer;
__u16 lnd_pad;
+ __u32 lnd_timeout;
+};
+
+struct lnet_ioctl_config_gnilnd_tunables {
+ __u32 lnd_version;
+ __u32 lnd_timeout;
};
struct lnet_lnd_tunables {
struct lnet_ioctl_config_o2iblnd_tunables lnd_o2ib;
struct lnet_ioctl_config_socklnd_tunables lnd_sock;
struct lnet_ioctl_config_kfilnd_tunables lnd_kfi;
+ struct lnet_ioctl_config_gnilnd_tunables lnd_gni;
} lnd_tun_u;
};
INIT_LIST_HEAD(&net->gnn_list);
ni->ni_data = net;
net->gnn_ni = ni;
- if (!ni->ni_net->net_tunables_set) {
- ni->ni_net->net_tunables.lct_max_tx_credits =
- *kgnilnd_tunables.kgn_credits;
- ni->ni_net->net_tunables.lct_peer_tx_credits =
- *kgnilnd_tunables.kgn_peer_credits;
- }
+
+ kgnilnd_tunables_setup(ni);
if (!ni->ni_interface) {
rc = lnet_ni_add_interface(ni, "ipogif0");
extern int _kgnilnd_schedule_conn(kgn_conn_t *conn, const char *caller, int line, int refheld, int lock_held);
extern int _kgnilnd_schedule_delay_conn(kgn_conn_t *conn);
+static inline int kgnilnd_timeout(void)
+{
+ return *kgnilnd_tunables.kgn_timeout ?
+ *kgnilnd_tunables.kgn_timeout :
+ lnet_get_lnd_timeout();
+}
+
/* Macro wrapper for _kgnilnd_schedule_conn. This will store the function
* and the line of the calling function to allow us to debug problematic
* schedule calls in the future without the programmer having to mark
out:
return rc;
}
+
+void
+kgninal_tunables_setup(struct lnet_ni *ni)
+{
+ struct lnet_ioctl_config_gnilnd_tunables *tunables;
+
+ if (!ni->ni_net->net_tunables_set) {
+ ni->ni_net->net_tunables.lct_max_tx_credits =
+ *kgnilnd_tunables.kgn_credits;
+ ni->ni_net->net_tunables.lct_peer_tx_credits =
+ *kgnilnd_tunables.kgn_peer_credits;
+ }
+
+ tunables = &ni->ni_lnd_tunables.lnd_tun_u.lnd_gni;
+
+ tunables->lnd_version = CURRENT_LND_VERSION;
+
+ tunables->lnd_timeout = kgnilnd_timeout();
+}
conns_per_peer : 1;
}
+ tunables->lnd_timeout = kiblnd_timeout();
+
return 0;
}
if (!tunables->lnd_conns_per_peer)
tunables->lnd_conns_per_peer =
ksocklnd_lookup_conns_per_peer(ni);
+
+ tunables->lnd_timeout = ksocknal_timeout();
}
lnd_cfg->lnd_conns_per_peer) == NULL)
return LUSTRE_CFG_RC_OUT_OF_MEM;
+ if (cYAML_create_number(lndparams, "timeout",
+ lnd_cfg->lnd_timeout) == NULL)
+ return LUSTRE_CFG_RC_OUT_OF_MEM;
+
return LUSTRE_CFG_RC_NO_ERR;
}
lnd_cfg->lnd_conns_per_peer) == NULL)
return LUSTRE_CFG_RC_OUT_OF_MEM;
+ if (cYAML_create_number(lndparams, "timeout",
+ lnd_cfg->lnd_timeout) == NULL)
+ return LUSTRE_CFG_RC_OUT_OF_MEM;
+
return LUSTRE_CFG_RC_NO_ERR;
}
}
#endif
+static int
+lustre_gnilnd_show_tun(struct cYAML *lndparams,
+ struct lnet_ioctl_config_gnilnd_tunables *lnd_cfg)
+{
+ if (cYAML_create_number(lndparams, "timeout",
+ lnd_cfg->lnd_timeout) == NULL)
+ return LUSTRE_CFG_RC_OUT_OF_MEM;
+
+ return LUSTRE_CFG_RC_NO_ERR;
+}
+
int
lustre_net_show_tunables(struct cYAML *tunables,
struct lnet_ioctl_config_lnd_cmn_tunables *cmn)
&lnd->lnd_tun_u.lnd_kfi,
backup);
#endif
-
+ else if (net_type == GNILND)
+ rc = lustre_gnilnd_show_tun(lnd_tunables,
+ &lnd->lnd_tun_u.lnd_gni);
return rc;
}
}
run_test 303 "Check peer NI health after link down"
+
+check_parameter() {
+ local para=$1
+ local value=$2
+
+ echo "check parameter ${para} value ${value}"
+
+ return $(( $(do_lnetctl net show -v | \
+ tee /dev/stderr | \
+ grep -c "^ \+${para}: ${value}$") != 1 ))
+}
+
+static_config() {
+ local module=$1
+ local setting=$2
+
+ cleanup_lnet || error "Failed to cleanup LNet"
+
+ load_module ../libcfs/libcfs/libcfs ||
+ error "Failed to load module libcfs rc = $?"
+
+ load_module ../lnet/lnet/lnet ||
+ error "Failed to load module lnet rc = $?"
+
+ echo "loading ${module} ${setting} type ${NETTYPE}"
+ load_module "${module}" "${setting}" ||
+ error "Failed to load module ${module} rc = $?"
+
+ do_lnetctl lnet configure --all || error "lnet configure failed rc = $?"
+
+ return 0
+}
+
+test_310() {
+ local value=65
+
+ if [[ ${NETTYPE} == tcp* ]];then
+ static_config "../lnet/klnds/socklnd/ksocklnd" \
+ "sock_timeout=${value}"
+ elif [[ ${NETTYPE} == o2ib* ]]; then
+ static_config "../lnet/klnds/o2iblnd/ko2iblnd" \
+ "timeout=${value}"
+ elif [[ ${NETTYPE} == gni* ]]; then
+ static_config "../lnet/klnds/gnilnd/kgnilnd" \
+ "timeout=${value}"
+ else
+ skip "NETTYPE ${NETTYPE} not supported"
+ fi
+
+ check_parameter "timeout" $value
+
+ return $?
+}
+run_test 310 "Set timeout and verify"
+
+
check_udsp_prio() {
local target_net="${1}"
local target_nid="${2}"