return NULL;
}
+static void lnet_shuffle_seed(void)
+{
+ static int seeded = 0;
+ int lnd_type, seed[2];
+ struct timeval tv;
+ lnet_ni_t *ni;
+ cfs_list_t *tmp;
+
+ if (seeded)
+ return;
+
+ cfs_get_random_bytes(seed, sizeof(seed));
+
+ /* Nodes with small feet have little entropy
+ * the NID for this node gives the most entropy in the low bits */
+ cfs_list_for_each(tmp, &the_lnet.ln_nis) {
+ ni = cfs_list_entry(tmp, lnet_ni_t, ni_list);
+ lnd_type = LNET_NETTYP(LNET_NIDNET(ni->ni_nid));
+
+ if (lnd_type != LOLND)
+ seed[0] ^= (LNET_NIDADDR(ni->ni_nid) | lnd_type);
+ }
+
+ cfs_gettimeofday(&tv);
+ cfs_srand(tv.tv_sec ^ seed[0], tv.tv_usec ^ seed[1]);
+ seeded = 1;
+ return;
+}
+
/* NB expects LNET_LOCK held */
void
lnet_add_route_to_rnet (lnet_remotenet_t *rnet, lnet_route_t *route)
unsigned int len = 0;
unsigned int offset = 0;
cfs_list_t *e;
- extern __u64 lnet_create_interface_cookie(void);
+
+ lnet_shuffle_seed();
cfs_list_for_each (e, &rnet->lrn_routes) {
len++;
}
- /* FIXME use Lustre random function when it's moved to libcfs.
- * See bug 18751 */
/* len+1 positions to add a new entry, also prevents division by 0 */
- offset = ((unsigned int) lnet_create_interface_cookie()) % (len + 1);
+ offset = cfs_rand() % (len + 1);
cfs_list_for_each (e, &rnet->lrn_routes) {
if (offset == 0)
break;
if (info->pi_magic == __swab32(LNET_PROTO_PING_MAGIC)) {
lnet_swap_pinginfo(info);
} else if (info->pi_magic != LNET_PROTO_PING_MAGIC) {
- CDEBUG(D_NETERROR, "%s: Unexpected magic %08x\n",
- libcfs_nid2str(rtr->lp_nid), info->pi_magic);
+ CNETERR("%s: Unexpected magic %08x\n",
+ libcfs_nid2str(rtr->lp_nid), info->pi_magic);
return -EPROTO;
}
return -ENOENT; /* v1 doesn't carry NI status info */
if (info->pi_version != LNET_PROTO_PING_VERSION) {
- CDEBUG(D_NETERROR, "%s: Unexpected version 0x%x\n",
- libcfs_nid2str(rtr->lp_nid), info->pi_version);
+ CNETERR("%s: Unexpected version 0x%x\n",
+ libcfs_nid2str(rtr->lp_nid), info->pi_version);
return -EPROTO;
}
lnet_nid_t nid = stat->ns_nid;
if (nid == LNET_NID_ANY) {
- CDEBUG(D_NETERROR, "%s: unexpected LNET_NID_ANY\n",
- libcfs_nid2str(rtr->lp_nid));
+ CNETERR("%s: unexpected LNET_NID_ANY\n",
+ libcfs_nid2str(rtr->lp_nid));
return -EPROTO;
}
}
if (stat->ns_status != LNET_NI_STATUS_UP) {
- CDEBUG(D_NETERROR, "%s: Unexpected status 0x%x\n",
- libcfs_nid2str(rtr->lp_nid), stat->ns_status);
+ CNETERR("%s: Unexpected status 0x%x\n",
+ libcfs_nid2str(rtr->lp_nid), stat->ns_status);
return -EPROTO;
}
the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
#ifdef __KERNEL__
- rc = (int)cfs_kernel_thread(lnet_router_checker, NULL, 0);
+ rc = cfs_create_thread(lnet_router_checker, NULL, 0);
if (rc < 0) {
CERROR("Can't start router checker thread: %d\n", rc);
the_lnet.ln_rc_state = LNET_RC_STATE_UNLINKING;
int rc;
lnet_peer_t *rtr;
cfs_list_t *entry;
- lnet_process_id_t rtr_id;
cfs_daemonize("router_checker");
cfs_block_allsigs();
- rtr_id.pid = LUSTRE_SRV_LNET_PID;
-
LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
while (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING) {
if (last != 0 &&
interval > MAX(live_router_check_interval,
dead_router_check_interval))
- CDEBUG(D_NETERROR, "Checker(%d/%d) not called for %d seconds\n",
- live_router_check_interval, dead_router_check_interval,
- interval);
+ CNETERR("Checker(%d/%d) not called for %d seconds\n",
+ live_router_check_interval, dead_router_check_interval,
+ interval);
LNET_LOCK();
LASSERT (!running); /* recursion check */