X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Flnet%2Flib-move.c;h=3259946cd14a87c55b53e7afd1ba8e9636d43544;hb=db49fbf00d24edc8347006241f314fb0f82f1b63;hp=b5fad9c7a717005aed7a1f5d604e43b6d337cd03;hpb=36dd83ee8e143a4726317565e1bdc8834edcbe70;p=fs%2Flustre-release.git diff --git a/lnet/lnet/lib-move.c b/lnet/lnet/lib-move.c index b5fad9c..3259946 100644 --- a/lnet/lnet/lib-move.c +++ b/lnet/lnet/lib-move.c @@ -190,13 +190,15 @@ void lnet_usr_translate_stats(struct lnet_ioctl_element_msg_stats *msg_stats, } int -lnet_fail_nid(lnet_nid_t nid, unsigned int threshold) +lnet_fail_nid(lnet_nid_t nid4, unsigned int threshold) { struct lnet_test_peer *tp; struct list_head *el; struct list_head *next; + struct lnet_nid nid; LIST_HEAD(cull); + lnet_nid4_to_nid(nid4, &nid); /* NB: use lnet_net_lock(0) to serialize operations on test peers */ if (threshold != 0) { /* Adding a new entry */ @@ -219,8 +221,8 @@ lnet_fail_nid(lnet_nid_t nid, unsigned int threshold) tp = list_entry(el, struct lnet_test_peer, tp_list); if (tp->tp_threshold == 0 || /* needs culling anyway */ - nid == LNET_NID_ANY || /* removing all entries */ - tp->tp_nid == nid) { /* matched this one */ + LNET_NID_IS_ANY(&nid) || /* removing all entries */ + nid_same(&tp->tp_nid, &nid)) { /* matched this one */ list_move(&tp->tp_list, &cull); } } @@ -237,14 +239,16 @@ lnet_fail_nid(lnet_nid_t nid, unsigned int threshold) } static int -fail_peer (lnet_nid_t nid, int outgoing) +fail_peer(lnet_nid_t nid4, int outgoing) { struct lnet_test_peer *tp; struct list_head *el; struct list_head *next; + struct lnet_nid nid; LIST_HEAD(cull); int fail = 0; + lnet_nid4_to_nid(nid4, &nid); /* NB: use lnet_net_lock(0) to serialize operations on test peers */ lnet_net_lock(0); @@ -262,8 +266,8 @@ fail_peer (lnet_nid_t nid, int outgoing) continue; } - if (tp->tp_nid == LNET_NID_ANY || /* fail every peer */ - nid == tp->tp_nid) { /* fail this peer */ + if (LNET_NID_IS_ANY(&tp->tp_nid) || /* fail every peer */ + nid_same(&nid, &tp->tp_nid)) { /* fail this peer */ fail = 1; if (tp->tp_threshold != LNET_MD_THRESH_INF) { @@ -1322,9 +1326,8 @@ lnet_select_peer_ni(struct lnet_ni *best_ni, lnet_nid_t dst_nid, * preferred, then let's use it */ if (best_ni) { - /* FIXME need to handle large-addr nid */ lpni_is_preferred = lnet_peer_is_pref_nid_locked( - lpni, lnet_nid_to_nid4(&best_ni->ni_nid)); + lpni, &best_ni->ni_nid); CDEBUG(D_NET, "%s lpni_is_preferred = %d\n", libcfs_nidstr(&best_ni->ni_nid), lpni_is_preferred); @@ -1502,7 +1505,7 @@ lnet_find_route_locked(struct lnet_remotenet *rnet, __u32 src_net, struct lnet_route *route; int rc; bool best_rte_is_preferred = false; - lnet_nid_t gw_pnid; + struct lnet_nid *gw_pnid; CDEBUG(D_NET, "Looking up a route to %s, from %s\n", libcfs_net2str(rnet->lrn_net), libcfs_net2str(src_net)); @@ -1511,7 +1514,7 @@ lnet_find_route_locked(struct lnet_remotenet *rnet, __u32 src_net, list_for_each_entry(route, &rnet->lrn_routes, lr_list) { if (!lnet_is_route_alive(route)) continue; - gw_pnid = lnet_nid_to_nid4(&route->lr_gateway->lp_primary_nid); + gw_pnid = &route->lr_gateway->lp_primary_nid; /* no protection on below fields, but it's harmless */ if (last_route && (last_route->lr_seq - route->lr_seq < 0)) @@ -1535,7 +1538,7 @@ lnet_find_route_locked(struct lnet_remotenet *rnet, __u32 src_net, if (!lpni) { CDEBUG(D_NET, "Gateway %s does not have a peer NI on net %s\n", - libcfs_nid2str(gw_pnid), + libcfs_nidstr(gw_pnid), libcfs_net2str(src_net)); continue; } @@ -1551,7 +1554,7 @@ lnet_find_route_locked(struct lnet_remotenet *rnet, __u32 src_net, best_gw_ni = lpni; best_rte_is_preferred = true; CDEBUG(D_NET, "preferred gw = %s\n", - libcfs_nid2str(gw_pnid)); + libcfs_nidstr(gw_pnid)); continue; } else if ((!rc) && best_rte_is_preferred) /* The best route we found so far is in the preferred @@ -1579,7 +1582,7 @@ lnet_find_route_locked(struct lnet_remotenet *rnet, __u32 src_net, if (!lpni) { CDEBUG(D_NET, "Gateway %s does not have a peer NI on net %s\n", - libcfs_nid2str(gw_pnid), + libcfs_nidstr(gw_pnid), libcfs_net2str(src_net)); continue; } @@ -1837,10 +1840,10 @@ lnet_handle_send(struct lnet_send_data *sd) * local ni and local net so that we pick the next ones * in Round Robin. */ - best_lpni->lpni_seq++; best_lpni->lpni_peer_net->lpn_seq++; - best_ni->ni_seq++; + best_lpni->lpni_seq = best_lpni->lpni_peer_net->lpn_seq; best_ni->ni_net->net_seq++; + best_ni->ni_seq = best_ni->ni_net->net_seq; CDEBUG(D_NET, "%s NI seq info: [%d:%d:%d:%u] %s LPNI seq info [%d:%d:%d:%u]\n", libcfs_nidstr(&best_ni->ni_nid), @@ -1950,9 +1953,9 @@ lnet_handle_send(struct lnet_send_data *sd) rspt = msg->msg_md->md_rspt_ptr; if (rspt) { rspt->rspt_next_hop_nid = - lnet_nid_to_nid4(&msg->msg_txpeer->lpni_nid); + msg->msg_txpeer->lpni_nid; CDEBUG(D_NET, "rspt_next_hop_nid = %s\n", - libcfs_nid2str(rspt->rspt_next_hop_nid)); + libcfs_nidstr(&rspt->rspt_next_hop_nid)); } } @@ -1981,8 +1984,7 @@ lnet_set_non_mr_pref_nid(struct lnet_peer_ni *lpni, struct lnet_ni *lni, CDEBUG(D_NET, "Setting preferred local NID %s on NMR peer %s\n", libcfs_nidstr(&lni->ni_nid), libcfs_nidstr(&lpni->lpni_nid)); - lnet_peer_ni_set_non_mr_pref_nid( - lpni, lnet_nid_to_nid4(&lni->ni_nid)); + lnet_peer_ni_set_non_mr_pref_nid(lpni, &lni->ni_nid); } } @@ -2520,7 +2522,8 @@ lnet_find_existing_preferred_best_ni(struct lnet_peer_ni *lpni, int cpt) if (lpni_entry->lpni_pref_nnids == 0) continue; LASSERT(lpni_entry->lpni_pref_nnids == 1); - best_ni = lnet_nid2ni_locked(lpni_entry->lpni_pref.nid, cpt); + best_ni = lnet_nid_to_ni_locked(&lpni_entry->lpni_pref.nid, + cpt); break; } @@ -3220,7 +3223,7 @@ lnet_finalize_expired_responses(void) if (ktime_compare(now, rspt->rspt_deadline) >= 0 || the_lnet.ln_mt_state == LNET_MT_STATE_SHUTDOWN) { struct lnet_peer_ni *lpni; - lnet_nid_t nid; + struct lnet_nid nid; md = lnet_handle2md(&rspt->rspt_mdh); if (!md) { @@ -3278,7 +3281,7 @@ lnet_finalize_expired_responses(void) CDEBUG(D_NET, "Response timeout: md = %p: nid = %s\n", - md, libcfs_nid2str(nid)); + md, libcfs_nidstr(&nid)); /* * If there is a timeout on the response @@ -3286,7 +3289,7 @@ lnet_finalize_expired_responses(void) * value so that we don't use it */ lnet_net_lock(0); - lpni = lnet_find_peer_ni_locked(nid); + lpni = lnet_peer_ni_find_locked(&nid); if (lpni) { lnet_handle_remote_failure_locked(lpni); lnet_peer_ni_decref_locked(lpni); @@ -4162,7 +4165,7 @@ lnet_parse_put(struct lnet_ni *ni, struct lnet_msg *msg) hdr->msg.put.offset = le32_to_cpu(hdr->msg.put.offset); /* Primary peer NID. */ - info.mi_id.nid = msg->msg_initiator; + lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid); info.mi_id.pid = hdr->src_pid; info.mi_opc = LNET_MD_OP_PUT; info.mi_portal = hdr->msg.put.ptl_index; @@ -4200,7 +4203,7 @@ lnet_parse_put(struct lnet_ni *ni, struct lnet_msg *msg) case LNET_MATCHMD_DROP: CNETERR("Dropping PUT from %s portal %d match %llu" " offset %d length %d: %d\n", - libcfs_id2str(info.mi_id), info.mi_portal, + libcfs_idstr(&info.mi_id), info.mi_portal, info.mi_mbits, info.mi_roffset, info.mi_rlength, rc); return -ENOENT; /* -ve: OK but no match */ @@ -4225,7 +4228,7 @@ lnet_parse_get(struct lnet_ni *ni, struct lnet_msg *msg, int rdma_get) source_id.nid = hdr->src_nid; source_id.pid = hdr->src_pid; /* Primary peer NID */ - info.mi_id.nid = msg->msg_initiator; + lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid); info.mi_id.pid = hdr->src_pid; info.mi_opc = LNET_MD_OP_GET; info.mi_portal = hdr->msg.get.ptl_index; @@ -4238,7 +4241,7 @@ lnet_parse_get(struct lnet_ni *ni, struct lnet_msg *msg, int rdma_get) if (rc == LNET_MATCHMD_DROP) { CNETERR("Dropping GET from %s portal %d match %llu" " offset %d length %d\n", - libcfs_id2str(info.mi_id), info.mi_portal, + libcfs_idstr(&info.mi_id), info.mi_portal, info.mi_mbits, info.mi_roffset, info.mi_rlength); return -ENOENT; /* -ve: OK but no match */ } @@ -4270,7 +4273,7 @@ lnet_parse_get(struct lnet_ni *ni, struct lnet_msg *msg, int rdma_get) /* didn't get as far as lnet_ni_send() */ CERROR("%s: Unable to send REPLY for GET from %s: %d\n", libcfs_nidstr(&ni->ni_nid), - libcfs_id2str(info.mi_id), rc); + libcfs_idstr(&info.mi_id), rc); lnet_finalize(msg, rc); } @@ -4471,7 +4474,7 @@ lnet_msgtyp2str (int type) } int -lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, +lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid4, void *private, int rdma_req) { struct lnet_peer_ni *lpni; @@ -4480,6 +4483,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, lnet_pid_t dest_pid; lnet_nid_t dest_nid; lnet_nid_t src_nid; + struct lnet_nid from_nid; bool push = false; int for_me; __u32 type; @@ -4488,6 +4492,8 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, LASSERT (!in_interrupt ()); + lnet_nid4_to_nid(from_nid4, &from_nid); + type = le32_to_cpu(hdr->type); src_nid = le64_to_cpu(hdr->src_nid); dest_nid = le64_to_cpu(hdr->dest_nid); @@ -4496,7 +4502,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, /* FIXME handle large-addr nids */ for_me = (lnet_nid_to_nid4(&ni->ni_nid) == dest_nid); - cpt = lnet_cpt_of_nid(from_nid, ni); + cpt = lnet_cpt_of_nid(from_nid4, ni); CDEBUG(D_NET, "TRACE: %s(%s) <- %s : %s - %s\n", libcfs_nid2str(dest_nid), @@ -4510,7 +4516,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, case LNET_MSG_GET: if (payload_length > 0) { CERROR("%s, src %s: bad %s payload %d (0 expected)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), lnet_msgtyp2str(type), payload_length); return -EPROTO; @@ -4523,7 +4529,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, (__u32)(for_me ? LNET_MAX_PAYLOAD : LNET_MTU)) { CERROR("%s, src %s: bad %s payload %d " "(%d max expected)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), lnet_msgtyp2str(type), payload_length, @@ -4534,7 +4540,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, default: CERROR("%s, src %s: Bad message type 0x%x\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), type); return -EPROTO; } @@ -4561,18 +4567,18 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, /* should have gone direct */ CERROR("%s, src %s: Bad dest nid %s " "(should have been sent direct)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), libcfs_nid2str(dest_nid)); return -EPROTO; } - if (lnet_islocalnid(dest_nid)) { + if (lnet_islocalnid4(dest_nid)) { /* dest is another local NI; sender should have used * this node's NID on its own network */ CERROR("%s, src %s: Bad dest nid %s " "(it's my nid but on a different network)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), libcfs_nid2str(dest_nid)); return -EPROTO; @@ -4581,7 +4587,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, if (rdma_req && type == LNET_MSG_GET) { CERROR("%s, src %s: Bad optimized GET for %s " "(final destination must be me)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), libcfs_nid2str(dest_nid)); return -EPROTO; @@ -4590,7 +4596,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, if (!the_lnet.ln_routing) { CERROR("%s, src %s: Dropping message for %s " "(routing not enabled)\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), libcfs_nid2str(dest_nid)); goto drop; @@ -4603,7 +4609,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, if (!list_empty(&the_lnet.ln_test_peers) && /* normally we don't */ fail_peer(src_nid, 0)) { /* shall we now? */ CERROR("%s, src %s: Dropping %s to simulate failure\n", - libcfs_nid2str(from_nid), libcfs_nid2str(src_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), lnet_msgtyp2str(type)); goto drop; } @@ -4613,7 +4619,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, lnet_drop_rule_match(hdr, lnet_nid_to_nid4(&ni->ni_nid), NULL)) { CDEBUG(D_NET, "%s, src %s, dst %s: Dropping %s to simulate silent message loss\n", - libcfs_nid2str(from_nid), libcfs_nid2str(src_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), libcfs_nid2str(dest_nid), lnet_msgtyp2str(type)); goto drop; } @@ -4621,7 +4627,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, msg = lnet_msg_alloc(); if (msg == NULL) { CERROR("%s, src %s: Dropping %s (out of memory)\n", - libcfs_nid2str(from_nid), libcfs_nid2str(src_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), lnet_msgtyp2str(type)); goto drop; } @@ -4637,7 +4643,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, msg->msg_offset = 0; msg->msg_hdr = *hdr; /* for building message event */ - msg->msg_from = from_nid; + msg->msg_from = from_nid4; if (!for_me) { msg->msg_target.pid = dest_pid; msg->msg_target.nid = dest_nid; @@ -4654,15 +4660,13 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, } lnet_net_lock(cpt); - /* FIXME support large-addr nid */ - lpni = lnet_nid2peerni_locked(from_nid, lnet_nid_to_nid4(&ni->ni_nid), - cpt); + lpni = lnet_peerni_by_nid_locked(&from_nid, &ni->ni_nid, cpt); if (IS_ERR(lpni)) { lnet_net_unlock(cpt); - CERROR("%s, src %s: Dropping %s " - "(error %ld looking up sender)\n", - libcfs_nid2str(from_nid), libcfs_nid2str(src_nid), - lnet_msgtyp2str(type), PTR_ERR(lpni)); + rc = PTR_ERR(lpni); + CERROR("%s, src %s: Dropping %s (error %d looking up sender)\n", + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), + lnet_msgtyp2str(type), rc); lnet_msg_free(msg); if (rc == -ESHUTDOWN) /* We are shutting down. Don't do anything more */ @@ -4676,7 +4680,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, */ if (((lnet_drop_asym_route && for_me) || !lpni->lpni_peer_net->lpn_peer->lp_alive) && - LNET_NIDNET(src_nid) != LNET_NIDNET(from_nid)) { + LNET_NIDNET(src_nid) != LNET_NIDNET(from_nid4)) { __u32 src_net_id = LNET_NIDNET(src_nid); struct lnet_peer *gw = lpni->lpni_peer_net->lpn_peer; struct lnet_route *route; @@ -4703,13 +4707,15 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid, } } if (lnet_drop_asym_route && for_me && !found) { + /* Drop ref taken by lnet_nid2peerni_locked() */ + lnet_peer_ni_decref_locked(lpni); lnet_net_unlock(cpt); /* we would not use from_nid to route a message to * src_nid * => asymmetric routing detected but forbidden */ CERROR("%s, src %s: Dropping asymmetrical route %s\n", - libcfs_nid2str(from_nid), + libcfs_nid2str(from_nid4), libcfs_nid2str(src_nid), lnet_msgtyp2str(type)); lnet_msg_free(msg); goto drop;