Whamcloud - gitweb
Revert "LU-1013 obdclass: lu_object_find miss to unlink object from LRU"
[fs/lustre-release.git] / lnet / lnet / router.c
index 9daa4ca..6f23db0 100644 (file)
@@ -235,6 +235,35 @@ lnet_find_net_locked (__u32 net)
         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)
@@ -242,16 +271,15 @@ 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;
@@ -546,8 +574,8 @@ lnet_router_down_ni(lnet_peer_t *rtr, __u32 net)
         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;
         }
 
@@ -555,8 +583,8 @@ lnet_router_down_ni(lnet_peer_t *rtr, __u32 net)
                 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;
         }
 
@@ -565,8 +593,8 @@ lnet_router_down_ni(lnet_peer_t *rtr, __u32 net)
                 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;
                 }
 
@@ -582,8 +610,8 @@ lnet_router_down_ni(lnet_peer_t *rtr, __u32 net)
                 }
 
                 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;
                 }
 
@@ -1003,7 +1031,7 @@ lnet_router_checker_start(void)
 
         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;
@@ -1127,13 +1155,10 @@ lnet_router_checker(void *arg)
         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) {
@@ -1500,9 +1525,9 @@ lnet_router_checker (void)
         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 */