- lnet_net_unlock(0);
-
- if (nrtr == 0) {
- CDEBUG(D_NET,
- "No router found, not starting router checker\n");
- return 0;
- }
-
- /* at least allow a SENT and a REPLY per router */
- if (router_checker_max_eqsize < 2 * nrtr)
- router_checker_max_eqsize = 2 * nrtr;
-
- LASSERT (eqsz > 0);
- if (eqsz > router_checker_max_eqsize)
- eqsz = router_checker_max_eqsize;
-#endif
-
- LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_SHUTDOWN);
-
- if (check_routers_before_use &&
- dead_router_check_interval <= 0) {
- LCONSOLE_ERROR_MSG(0x10a, "'dead_router_check_interval' must be"
- " set if 'check_routers_before_use' is set"
- "\n");
- return -EINVAL;
- }
-
- if (!the_lnet.ln_routing &&
- live_router_check_interval <= 0 &&
- dead_router_check_interval <= 0)
- return 0;
-
-#ifdef __KERNEL__
- sema_init(&the_lnet.ln_rc_signal, 0);
- /* EQ size doesn't matter; the callback is guaranteed to get every
- * event */
- eqsz = 0;
- rc = LNetEQAlloc(eqsz, lnet_router_checker_event,
- &the_lnet.ln_rc_eqh);
-#else
- rc = LNetEQAlloc(eqsz, LNET_EQ_HANDLER_NONE,
- &the_lnet.ln_rc_eqh);
-#endif
- if (rc != 0) {
- CERROR("Can't allocate EQ(%d): %d\n", eqsz, rc);
- return -ENOMEM;
- }
-
- the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
-#ifdef __KERNEL__
- rc = cfs_create_thread(lnet_router_checker, NULL, 0);
- if (rc < 0) {
- CERROR("Can't start router checker thread: %d\n", rc);
- /* block until event callback signals exit */
- 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;
- return -ENOMEM;
- }
-#endif
-
- if (check_routers_before_use) {
- /* Note that a helpful side-effect of pinging all known routers
- * at startup is that it makes them drop stale connections they
- * may have to a previous instance of me. */
- lnet_wait_known_routerstate();
- }