"Assume routers are down and ping them before use");
static int avoid_asym_router_failure = 0;
-CFS_MODULE_PARM(avoid_asym_router_failure, "i", int, 0444,
+CFS_MODULE_PARM(avoid_asym_router_failure, "i", int, 0644,
"Avoid asymmetrical failures: reserved, use at your own risk");
static int dead_router_check_interval = 0;
-CFS_MODULE_PARM(dead_router_check_interval, "i", int, 0444,
+CFS_MODULE_PARM(dead_router_check_interval, "i", int, 0644,
"Seconds between dead router health checks (<= 0 to disable)");
static int live_router_check_interval = 0;
-CFS_MODULE_PARM(live_router_check_interval, "i", int, 0444,
+CFS_MODULE_PARM(live_router_check_interval, "i", int, 0644,
"Seconds between live router health checks (<= 0 to disable)");
static int router_ping_timeout = 50;
-CFS_MODULE_PARM(router_ping_timeout, "i", int, 0444,
+CFS_MODULE_PARM(router_ping_timeout, "i", int, 0644,
"Seconds to wait for the reply to a router health query");
int
return 0;
#ifdef __KERNEL__
- cfs_sema_init(&the_lnet.ln_rc_signal, 0);
+ sema_init(&the_lnet.ln_rc_signal, 0);
/* EQ size doesn't matter; the callback is guaranteed to get every
* event */
eqsz = 0;
if (rc < 0) {
CERROR("Can't start router checker thread: %d\n", rc);
/* block until event callback signals exit */
- cfs_down(&the_lnet.ln_rc_signal);
+ down(&the_lnet.ln_rc_signal);
rc = LNetEQFree(the_lnet.ln_rc_eqh);
LASSERT (rc == 0);
the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
#ifdef __KERNEL__
/* block until event callback signals exit */
- cfs_down(&the_lnet.ln_rc_signal);
+ down(&the_lnet.ln_rc_signal);
#else
lnet_router_checker();
#endif
lnet_prune_rc_data(1); /* wait for UNLINK */
the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
- cfs_up(&the_lnet.ln_rc_signal);
+ up(&the_lnet.ln_rc_signal);
/* The unlink event callback will signal final completion */
return 0;
}
lnet_net_lock(cpt);
+ if (the_lnet.ln_shutdown) {
+ lnet_net_unlock(cpt);
+ return -ESHUTDOWN;
+ }
+
lp = lnet_find_peer_locked(the_lnet.ln_peer_tables[cpt], nid);
if (lp == NULL) {
/* nid not found */