From: isaac Date: Wed, 11 Nov 2009 18:28:52 +0000 (+0000) Subject: i=liang,b=15332: X-Git-Tag: v1_8_1_54~1^3~1 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=4e11b441c0e7c30e14a8ebe2e70d98606b45bd28;p=fs%2Flustre-release.git i=liang,b=15332: - LNet router shuffler. --- diff --git a/lnet/ChangeLog b/lnet/ChangeLog index 978f9ef..7fd91a5 100644 --- a/lnet/ChangeLog +++ b/lnet/ChangeLog @@ -14,6 +14,10 @@ tbd Sun Microsystems, Inc. Severity : enhancement Bugzilla : 15332 +Description: LNet router shuffler. + +Severity : enhancement +Bugzilla : 15332 Description: LNet fine grain routing support. Severity : normal diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c index a494d82..369a80b 100644 --- a/lnet/lnet/router.c +++ b/lnet/lnet/router.c @@ -235,6 +235,34 @@ lnet_find_net_locked (__u32 net) return NULL; } +/* 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; + struct list_head *e; + extern __u64 lnet_create_interface_cookie(void); + + 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 = lnet_create_interface_cookie() % (len + 1); + list_for_each (e, &rnet->lrn_routes) { + if (offset == 0) + break; + offset--; + } + list_add(&route->lr_list, e); + + the_lnet.ln_remote_nets_version++; + lnet_rtr_addref_locked(route->lr_gateway); +} + int lnet_add_route (__u32 net, unsigned int hops, lnet_nid_t gateway) { @@ -321,11 +349,7 @@ lnet_add_route (__u32 net, unsigned int hops, lnet_nid_t gateway) ni = route->lr_gateway->lp_ni; lnet_ni_addref_locked(ni); - list_add_tail(&route->lr_list, &rnet2->lrn_routes); - the_lnet.ln_remote_nets_version++; - - lnet_rtr_addref_locked(route->lr_gateway); - + lnet_add_route_to_rnet(rnet2, route); LNET_UNLOCK(); /* XXX Assume alive */ diff --git a/lnet/lnet/router_proc.c b/lnet/lnet/router_proc.c index fce91c2..b38c5e7 100644 --- a/lnet/lnet/router_proc.c +++ b/lnet/lnet/router_proc.c @@ -168,9 +168,9 @@ int LL_PROC_PROTO(proc_lnet_routes) if (skip == 0) { route = re; break; - } else - skip--; + } + skip--; r = r->next; } @@ -264,10 +264,10 @@ int LL_PROC_PROTO(proc_lnet_routers) if (skip == 0) { peer = lp; - break; - } else - skip--; + break; + } + skip--; r = r->next; } @@ -411,13 +411,14 @@ int LL_PROC_PROTO(proc_lnet_peers) &the_lnet.ln_peer_hash[idx]) { num = 1; idx++; - } else + } else { num++; + } break; - } else - skip--; + } + skip--; p = lp->lp_hashlist.next; } @@ -572,9 +573,9 @@ int LL_PROC_PROTO(proc_lnet_nis) if (skip == 0) { ni = a_ni; break; - } else - skip--; + } + skip--; n = n->next; }