From 57c03f3070753146a1d374939197e8c838a0bcc1 Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Thu, 6 Jan 2022 20:07:45 -0500 Subject: [PATCH] LU-10391 lnet: extend nids in struct lnet_msg struct lnet_msg contains 3 nids and one process_id (which itself contains a nid. Replace each of these with the 'struct lnet_nid' version. Test-Parameters: trivial Test-Parameters: serverversion=2.12 serverdistro=el7.9 testlist=runtests Test-Parameters: clientversion=2.12 testlist=runtests Signed-off-by: Mr NeilBrown Change-Id: Ic6233d36bafda364894d89b2e2b055538a6033f5 Reviewed-on: https://review.whamcloud.com/43598 Tested-by: jenkins Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Alexey Lyashkov Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- lnet/include/lnet/lib-lnet.h | 2 +- lnet/include/lnet/lib-types.h | 10 +++--- lnet/klnds/gnilnd/gnilnd.h | 3 +- lnet/klnds/gnilnd/gnilnd_cb.c | 24 +++++++------ lnet/klnds/o2iblnd/o2iblnd_cb.c | 74 ++++++++++++++++++++--------------------- lnet/klnds/socklnd/socklnd_cb.c | 8 ++--- lnet/lnet/lib-move.c | 70 +++++++++++++++++++------------------- lnet/lnet/lib-msg.c | 21 ++++++------ lnet/lnet/lib-ptl.c | 2 +- lnet/lnet/peer.c | 25 ++++++-------- 10 files changed, 120 insertions(+), 119 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index f195303..7e13c1b 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -922,7 +922,7 @@ struct lnet_peer_ni *lnet_find_peer_ni_locked(lnet_nid_t nid); struct lnet_peer_ni *lnet_peer_ni_find_locked(struct lnet_nid *nid); struct lnet_peer *lnet_find_peer(lnet_nid_t nid); void lnet_peer_net_added(struct lnet_net *net); -lnet_nid_t lnet_peer_primary_nid_locked(lnet_nid_t nid); +void lnet_peer_primary_nid_locked(lnet_nid_t nid, struct lnet_nid *result); int lnet_discover_peer_locked(struct lnet_peer_ni *lpni, int cpt, bool block); void lnet_peer_queue_message(struct lnet_peer *lp, struct lnet_msg *msg); int lnet_peer_discovery_start(void); diff --git a/lnet/include/lnet/lib-types.h b/lnet/include/lnet/lib-types.h index 1d8917b..8f53d63 100644 --- a/lnet/include/lnet/lib-types.h +++ b/lnet/include/lnet/lib-types.h @@ -117,19 +117,19 @@ struct lnet_msg { struct list_head msg_activelist; struct list_head msg_list; /* Q for credits/MD */ - struct lnet_process_id msg_target; + struct lnet_processid msg_target; /* Primary NID of the source. */ - lnet_nid_t msg_initiator; + struct lnet_nid msg_initiator; /* where is it from, it's only for building event */ - lnet_nid_t msg_from; + struct lnet_nid msg_from; __u32 msg_type; /* * hold parameters in case message is with held due * to discovery */ - lnet_nid_t msg_src_nid_param; - lnet_nid_t msg_rtr_nid_param; + struct lnet_nid msg_src_nid_param; + struct lnet_nid msg_rtr_nid_param; /* * Deadline for the message after which it will be finalized if it diff --git a/lnet/klnds/gnilnd/gnilnd.h b/lnet/klnds/gnilnd/gnilnd.h index f307b79..f7359a4 100644 --- a/lnet/klnds/gnilnd/gnilnd.h +++ b/lnet/klnds/gnilnd/gnilnd.h @@ -1818,7 +1818,8 @@ int kgnilnd_del_conn_or_peer(kgn_net_t *net, lnet_nid_t nid, int command, int er void kgnilnd_peer_increase_reconnect_locked(kgn_peer_t *peer); void kgnilnd_queue_reply(kgn_conn_t *conn, kgn_tx_t *tx); void kgnilnd_queue_tx(kgn_conn_t *conn, kgn_tx_t *tx); -void kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target); +void kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, + struct lnet_processid *target); int kgnilnd_send_mapped_tx(kgn_tx_t *tx, int try_map_if_full); void kgnilnd_consume_rx(kgn_rx_t *rx); diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c index a012a76..ad314de 100644 --- a/lnet/klnds/gnilnd/gnilnd_cb.c +++ b/lnet/klnds/gnilnd/gnilnd_cb.c @@ -1676,7 +1676,7 @@ kgnilnd_queue_tx(kgn_conn_t *conn, kgn_tx_t *tx) } void -kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target) +kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_processid *target) { kgn_peer_t *peer; kgn_peer_t *new_peer = NULL; @@ -1699,7 +1699,7 @@ kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target) /* I expect to find him, so only take a read lock */ read_lock(&kgnilnd_data.kgn_peer_conn_lock); - peer = kgnilnd_find_peer_locked(target->nid); + peer = kgnilnd_find_peer_locked(lnet_nid_to_nid4(&target->nid)); if (peer != NULL) { conn = kgnilnd_find_conn_locked(peer); /* this could be NULL during quiesce */ @@ -1723,7 +1723,7 @@ kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target) CFS_RACE(CFS_FAIL_GNI_FIND_TARGET); - node_state = kgnilnd_get_node_state(LNET_NIDADDR(target->nid)); + node_state = kgnilnd_get_node_state(ntohl(target->nid->nid_addr[0])); /* NB - this will not block during normal operations - * the only writer of this is in the startup/shutdown path. */ @@ -1736,7 +1736,8 @@ kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target) /* ignore previous peer entirely - we cycled the lock, so we * will create new peer and at worst drop it if peer is still * in the tables */ - rc = kgnilnd_create_peer_safe(&new_peer, target->nid, net, node_state); + rc = kgnilnd_create_peer_safe(&new_peer, lnet_nid_to_nid4(&target->nid), + net, node_state); if (rc != 0) { up_read(&kgnilnd_data.kgn_net_rw_sem); GOTO(no_peer, rc); @@ -1747,7 +1748,8 @@ kgnilnd_launch_tx(kgn_tx_t *tx, kgn_net_t *net, struct lnet_process_id *target) /* search for peer again now that we have the lock * if we don't find it, add our new one to the list */ - kgnilnd_add_peer_locked(target->nid, new_peer, &peer); + kgnilnd_add_peer_locked(lnet_nid_to_nid4(&target->nid), new_peer, + &peer); /* don't create a connection if the peer is not up */ if (peer->gnp_state != GNILND_PEER_UP) { @@ -2017,7 +2019,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) { struct lnet_hdr *hdr = &lntmsg->msg_hdr; int type = lntmsg->msg_type; - struct lnet_process_id target = lntmsg->msg_target; + struct lnet_processid *target = &lntmsg->msg_target; int target_is_router = lntmsg->msg_target_is_router; int routing = lntmsg->msg_routing; unsigned int niov = lntmsg->msg_niov; @@ -2036,7 +2038,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) LASSERT(!in_interrupt()); CDEBUG(D_NET, "sending msg type %d with %d bytes in %d frags to %s\n", - type, nob, niov, libcfs_id2str(target)); + type, nob, niov, libcfs_idstr(target)); LASSERTF(nob == 0 || niov > 0, "lntmsg %p nob %d niov %d\n", lntmsg, nob, niov); @@ -2097,7 +2099,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_lntmsg[1] = lnet_create_reply_msg(ni, lntmsg); if (tx->tx_lntmsg[1] == NULL) { CERROR("Can't create reply for GET to %s\n", - libcfs_nid2str(target.nid)); + libcfs_nidstr(&target->nid)); kgnilnd_tx_done(tx, rc); rc = -EIO; goto out; @@ -2110,7 +2112,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_msg.gnm_u.putreq.gnprm_hdr = *hdr; /* rest of tx_msg is setup just before it is sent */ - kgnilnd_launch_tx(tx, net, &target); + kgnilnd_launch_tx(tx, net, target); goto out; case LNET_MSG_REPLY: case LNET_MSG_PUT: @@ -2146,7 +2148,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_msg.gnm_u.get.gngm_hdr = *hdr; /* rest of tx_msg is setup just before it is sent */ - kgnilnd_launch_tx(tx, net, &target); + kgnilnd_launch_tx(tx, net, target); goto out; } @@ -2170,7 +2172,7 @@ kgnilnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_msg.gnm_u.immediate.gnim_hdr = *hdr; tx->tx_lntmsg[0] = lntmsg; - kgnilnd_launch_tx(tx, net, &target); + kgnilnd_launch_tx(tx, net, target); out: /* use stored value as we could have already finalized lntmsg here from a failed launch */ diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c index 932e06a..2349a62 100644 --- a/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -1620,7 +1620,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) { struct lnet_hdr *hdr = &lntmsg->msg_hdr; int type = lntmsg->msg_type; - struct lnet_process_id target = lntmsg->msg_target; + struct lnet_processid *target = &lntmsg->msg_target; int target_is_router = lntmsg->msg_target_is_router; int routing = lntmsg->msg_routing; unsigned int payload_niov = lntmsg->msg_niov; @@ -1633,10 +1633,10 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) int nob; int rc; - /* NB 'private' is different depending on what we're sending.... */ + /* NB 'private' is different depending on what we're sending.... */ - CDEBUG(D_NET, "sending %d bytes in %d frags to %s\n", - payload_nob, payload_niov, libcfs_id2str(target)); + CDEBUG(D_NET, "sending %d bytes in %d frags to %s\n", + payload_nob, payload_niov, libcfs_idstr(target)); LASSERT (payload_nob == 0 || payload_niov > 0); LASSERT (payload_niov <= LNET_MAX_IOV); @@ -1644,11 +1644,11 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* Thread context */ LASSERT (!in_interrupt()); - tx = kiblnd_get_idle_tx(ni, target.nid); + tx = kiblnd_get_idle_tx(ni, lnet_nid_to_nid4(&target->nid)); if (tx == NULL) { CERROR("Can't allocate %s txd for %s\n", lnet_msgtyp2str(type), - libcfs_nid2str(target.nid)); + libcfs_nidstr(&target->nid)); return -ENOMEM; } ibmsg = tx->tx_msg; @@ -1678,7 +1678,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) 0, lntmsg->msg_md->md_length); if (rc != 0) { CERROR("Can't setup GET sink for %s: %d\n", - libcfs_nid2str(target.nid), rc); + libcfs_nidstr(&target->nid), rc); tx->tx_hstatus = LNET_MSG_STATUS_LOCAL_ERROR; kiblnd_tx_done(tx); return -EIO; @@ -1693,7 +1693,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_lntmsg[1] = lnet_create_reply_msg(ni, lntmsg); if (tx->tx_lntmsg[1] == NULL) { CERROR("Can't create reply for GET -> %s\n", - libcfs_nid2str(target.nid)); + libcfs_nidstr(&target->nid)); kiblnd_tx_done(tx); return -EIO; } @@ -1701,7 +1701,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* finalise lntmsg[0,1] on completion */ tx->tx_lntmsg[0] = lntmsg; tx->tx_waiting = 1; /* waiting for GET_DONE */ - kiblnd_launch_tx(ni, tx, target.nid); + kiblnd_launch_tx(ni, tx, lnet_nid_to_nid4(&target->nid)); return 0; case LNET_MSG_REPLY: @@ -1716,7 +1716,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) payload_offset, payload_nob); if (rc != 0) { CERROR("Can't setup PUT src for %s: %d\n", - libcfs_nid2str(target.nid), rc); + libcfs_nidstr(&target->nid), rc); kiblnd_tx_done(tx); return -EIO; } @@ -1729,7 +1729,7 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* finalise lntmsg[0,1] on completion */ tx->tx_lntmsg[0] = lntmsg; tx->tx_waiting = 1; /* waiting for PUT_{ACK,NAK} */ - kiblnd_launch_tx(ni, tx, target.nid); + kiblnd_launch_tx(ni, tx, lnet_nid_to_nid4(&target->nid)); return 0; } @@ -1753,14 +1753,14 @@ kiblnd_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* finalise lntmsg on completion */ tx->tx_lntmsg[0] = lntmsg; - kiblnd_launch_tx(ni, tx, target.nid); + kiblnd_launch_tx(ni, tx, lnet_nid_to_nid4(&target->nid)); return 0; } static void kiblnd_reply(struct lnet_ni *ni, struct kib_rx *rx, struct lnet_msg *lntmsg) { - struct lnet_process_id target = lntmsg->msg_target; + struct lnet_processid *target = &lntmsg->msg_target; unsigned int niov = lntmsg->msg_niov; struct bio_vec *kiov = lntmsg->msg_kiov; unsigned int offset = lntmsg->msg_offset; @@ -1769,33 +1769,33 @@ kiblnd_reply(struct lnet_ni *ni, struct kib_rx *rx, struct lnet_msg *lntmsg) int rc; tx = kiblnd_get_idle_tx(ni, rx->rx_conn->ibc_peer->ibp_nid); - if (tx == NULL) { - CERROR("Can't get tx for REPLY to %s\n", - libcfs_nid2str(target.nid)); - goto failed_0; - } + if (tx == NULL) { + CERROR("Can't get tx for REPLY to %s\n", + libcfs_nidstr(&target->nid)); + goto failed_0; + } - if (nob == 0) - rc = 0; - else - rc = kiblnd_setup_rd_kiov(ni, tx, tx->tx_rd, - niov, kiov, offset, nob); + if (nob == 0) + rc = 0; + else + rc = kiblnd_setup_rd_kiov(ni, tx, tx->tx_rd, + niov, kiov, offset, nob); - if (rc != 0) { - CERROR("Can't setup GET src for %s: %d\n", - libcfs_nid2str(target.nid), rc); - goto failed_1; - } + if (rc != 0) { + CERROR("Can't setup GET src for %s: %d\n", + libcfs_nidstr(&target->nid), rc); + goto failed_1; + } - rc = kiblnd_init_rdma(rx->rx_conn, tx, - IBLND_MSG_GET_DONE, nob, - &rx->rx_msg->ibm_u.get.ibgm_rd, - rx->rx_msg->ibm_u.get.ibgm_cookie); - if (rc < 0) { - CERROR("Can't setup rdma for GET from %s: %d\n", - libcfs_nid2str(target.nid), rc); - goto failed_1; - } + rc = kiblnd_init_rdma(rx->rx_conn, tx, + IBLND_MSG_GET_DONE, nob, + &rx->rx_msg->ibm_u.get.ibgm_rd, + rx->rx_msg->ibm_u.get.ibgm_cookie); + if (rc < 0) { + CERROR("Can't setup rdma for GET from %s: %d\n", + libcfs_nidstr(&target->nid), rc); + goto failed_1; + } if (nob == 0) { /* No RDMA: local completion may happen now! */ diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c index 614b864..558a24d 100644 --- a/lnet/klnds/socklnd/socklnd_cb.c +++ b/lnet/klnds/socklnd/socklnd_cb.c @@ -982,7 +982,7 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* '1' for consistency with code that checks !mpflag to restore */ unsigned int mpflag = 1; int type = lntmsg->msg_type; - struct lnet_processid target; + struct lnet_processid *target = &lntmsg->msg_target; unsigned int payload_niov = lntmsg->msg_niov; struct bio_vec *payload_kiov = lntmsg->msg_kiov; unsigned int payload_offset = lntmsg->msg_offset; @@ -994,11 +994,9 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) /* NB 'private' is different depending on what we're sending. * Just ignore it... */ - target.pid = lntmsg->msg_target.pid; - lnet_nid4_to_nid(lntmsg->msg_target.nid, &target.nid); CDEBUG(D_NET, "sending %u bytes in %d frags to %s\n", - payload_nob, payload_niov, libcfs_idstr(&target)); + payload_nob, payload_niov, libcfs_idstr(target)); LASSERT (payload_nob == 0 || payload_niov > 0); LASSERT (payload_niov <= LNET_MAX_IOV); @@ -1037,7 +1035,7 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg) tx->tx_msg.ksm_zc_cookies[1] = 0; /* The first fragment will be set later in pro_pack */ - rc = ksocknal_launch_packet(ni, tx, &target); + rc = ksocknal_launch_packet(ni, tx, target); /* * We can't test lntsmg->msg_vmflush again as lntmsg may * have been freed. diff --git a/lnet/lnet/lib-move.c b/lnet/lnet/lib-move.c index 73e9e25..e48f2ae 100644 --- a/lnet/lnet/lib-move.c +++ b/lnet/lnet/lib-move.c @@ -713,7 +713,8 @@ lnet_prep_send(struct lnet_msg *msg, int type, struct lnet_process_id target, unsigned int offset, unsigned int len) { msg->msg_type = type; - msg->msg_target = target; + msg->msg_target.pid = target.pid; + lnet_nid4_to_nid(target.nid, &msg->msg_target.nid); msg->msg_len = len; msg->msg_offset = offset; @@ -764,7 +765,7 @@ lnet_ni_eager_recv(struct lnet_ni *ni, struct lnet_msg *msg) CERROR("recv from %s / send to %s aborted: " "eager_recv failed %d\n", libcfs_nidstr(&msg->msg_rxpeer->lpni_nid), - libcfs_id2str(msg->msg_target), rc); + libcfs_idstr(&msg->msg_target), rc); LASSERT(rc < 0); /* required by my callers */ } @@ -866,7 +867,7 @@ lnet_post_send_locked(struct lnet_msg *msg, int do_send) LNET_STATS_TYPE_DROP); CNETERR("Dropping message for %s: peer not alive\n", - libcfs_id2str(msg->msg_target)); + libcfs_idstr(&msg->msg_target)); msg->msg_health_status = LNET_MSG_STATUS_REMOTE_DROPPED; if (do_send) lnet_finalize(msg, -EHOSTUNREACH); @@ -881,11 +882,11 @@ lnet_post_send_locked(struct lnet_msg *msg, int do_send) CNETERR("Aborting message for %s: LNetM[DE]Unlink() already " "called on the MD/ME.\n", - libcfs_id2str(msg->msg_target)); + libcfs_idstr(&msg->msg_target)); if (do_send) { msg->msg_no_resend = true; CDEBUG(D_NET, "msg %p to %s canceled and will not be resent\n", - msg, libcfs_id2str(msg->msg_target)); + msg, libcfs_idstr(&msg->msg_target)); lnet_finalize(msg, -ECANCELED); } @@ -1816,7 +1817,7 @@ lnet_handle_lo_send(struct lnet_send_data *sd) if (!msg->msg_routing) msg->msg_hdr.src_nid = cpu_to_le64(lnet_nid_to_nid4(&the_lnet.ln_loni->ni_nid)); - msg->msg_target.nid = lnet_nid_to_nid4(&the_lnet.ln_loni->ni_nid); + msg->msg_target.nid = the_lnet.ln_loni->ni_nid; lnet_msg_commit(msg, cpt); msg->msg_txni = the_lnet.ln_loni; @@ -1901,8 +1902,7 @@ lnet_handle_send(struct lnet_send_data *sd) * what was originally set in the target or it will be the NID of * a router if this message should be routed */ - /* FIXME handle large-addr nids */ - msg->msg_target.nid = lnet_nid_to_nid4(&msg->msg_txpeer->lpni_nid); + msg->msg_target.nid = msg->msg_txpeer->lpni_nid; /* * lnet_msg_commit assigns the correct cpt to the message, which @@ -2972,8 +2972,8 @@ again: * continuing the same sequence of messages. Similarly, rtr_nid will * affect our choice of next hop. */ - msg->msg_src_nid_param = src_nid; - msg->msg_rtr_nid_param = rtr_nid; + lnet_nid4_to_nid(src_nid, &msg->msg_src_nid_param); + lnet_nid4_to_nid(rtr_nid, &msg->msg_rtr_nid_param); /* * If necessary, perform discovery on the peer that owns this peer_ni. @@ -3092,8 +3092,8 @@ again: int lnet_send(lnet_nid_t src_nid, struct lnet_msg *msg, lnet_nid_t rtr_nid) { - lnet_nid_t dst_nid = msg->msg_target.nid; - int rc; + lnet_nid_t dst_nid = lnet_nid_to_nid4(&msg->msg_target.nid); + int rc; /* * NB: rtr_nid is set to LNET_NID_ANY for all current use-cases, @@ -3357,17 +3357,18 @@ lnet_resend_pending_msgs_locked(struct list_head *resendq, int cpt) lnet_net_unlock(cpt); CDEBUG(D_NET, "resending %s->%s: %s recovery %d try# %d\n", - libcfs_nid2str(msg->msg_src_nid_param), - libcfs_id2str(msg->msg_target), + libcfs_nidstr(&msg->msg_src_nid_param), + libcfs_idstr(&msg->msg_target), lnet_msgtyp2str(msg->msg_type), msg->msg_recovery, msg->msg_retry_count); - rc = lnet_send(msg->msg_src_nid_param, msg, - msg->msg_rtr_nid_param); + rc = lnet_send(lnet_nid_to_nid4(&msg->msg_src_nid_param), + msg, + lnet_nid_to_nid4(&msg->msg_rtr_nid_param)); if (rc) { CERROR("Error sending %s to %s: %d\n", lnet_msgtyp2str(msg->msg_type), - libcfs_id2str(msg->msg_target), rc); + libcfs_idstr(&msg->msg_target), rc); msg->msg_no_resend = true; lnet_finalize(msg, rc); } @@ -4185,14 +4186,14 @@ 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. */ - lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid); + info.mi_id.nid = msg->msg_initiator; info.mi_id.pid = hdr->src_pid; info.mi_opc = LNET_MD_OP_PUT; info.mi_portal = hdr->msg.put.ptl_index; info.mi_rlength = hdr->payload_length; info.mi_roffset = hdr->msg.put.offset; info.mi_mbits = hdr->msg.put.match_bits; - info.mi_cpt = lnet_cpt_of_nid(msg->msg_initiator, ni); + info.mi_cpt = lnet_nid2cpt(&msg->msg_initiator, ni); msg->msg_rx_ready_delay = ni->ni_net->net_lnd->lnd_eager_recv == NULL; ready_delay = msg->msg_rx_ready_delay; @@ -4248,14 +4249,14 @@ 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 */ - lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid); + info.mi_id.nid = msg->msg_initiator; info.mi_id.pid = hdr->src_pid; info.mi_opc = LNET_MD_OP_GET; info.mi_portal = hdr->msg.get.ptl_index; info.mi_rlength = hdr->msg.get.sink_length; info.mi_roffset = hdr->msg.get.src_offset; info.mi_mbits = hdr->msg.get.match_bits; - info.mi_cpt = lnet_cpt_of_nid(msg->msg_initiator, ni); + info.mi_cpt = lnet_nid2cpt(&msg->msg_initiator, ni); rc = lnet_ptl_match_md(&info, msg); if (rc == LNET_MATCHMD_DROP) { @@ -4288,7 +4289,8 @@ lnet_parse_get(struct lnet_ni *ni, struct lnet_msg *msg, int rdma_get) msg->msg_receiving = 0; /* FIXME need to handle large-addr nid */ - rc = lnet_send(lnet_nid_to_nid4(&ni->ni_nid), msg, msg->msg_from); + rc = lnet_send(lnet_nid_to_nid4(&ni->ni_nid), msg, + lnet_nid_to_nid4(&msg->msg_from)); if (rc < 0) { /* didn't get as far as lnet_ni_send() */ CERROR("%s: Unable to send REPLY for GET from %s: %d\n", @@ -4664,10 +4666,10 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid4, msg->msg_offset = 0; msg->msg_hdr = *hdr; /* for building message event */ - msg->msg_from = from_nid4; + msg->msg_from = from_nid; if (!for_me) { msg->msg_target.pid = dest_pid; - msg->msg_target.nid = dest_nid; + lnet_nid4_to_nid(dest_nid, &msg->msg_target.nid); msg->msg_routing = 1; } else { @@ -4761,7 +4763,7 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, lnet_nid_t from_nid4, msg->msg_rxni = ni; lnet_ni_addref_locked(ni, cpt); /* Multi-Rail: Primary NID of source. */ - msg->msg_initiator = lnet_peer_primary_nid_locked(src_nid); + lnet_peer_primary_nid_locked(src_nid, &msg->msg_initiator); /* * mark the status of this lpni as UP since we received a message @@ -5100,7 +5102,7 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg) { struct lnet_msg *msg = lnet_msg_alloc(); struct lnet_libmd *getmd = getmsg->msg_md; - struct lnet_process_id peer_id = getmsg->msg_target; + struct lnet_processid *peer_id = &getmsg->msg_target; int cpt; LASSERT(!getmsg->msg_target_is_router); @@ -5108,7 +5110,7 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg) if (msg == NULL) { CERROR("%s: Dropping REPLY from %s: can't allocate msg\n", - libcfs_nidstr(&ni->ni_nid), libcfs_id2str(peer_id)); + libcfs_nidstr(&ni->ni_nid), libcfs_idstr(peer_id)); goto drop; } @@ -5119,7 +5121,7 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg) if (getmd->md_threshold == 0) { CERROR("%s: Dropping REPLY from %s for inactive MD %p\n", - libcfs_nidstr(&ni->ni_nid), libcfs_id2str(peer_id), + libcfs_nidstr(&ni->ni_nid), libcfs_idstr(peer_id), getmd); lnet_res_unlock(cpt); goto drop; @@ -5128,21 +5130,21 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg) LASSERT(getmd->md_offset == 0); CDEBUG(D_NET, "%s: Reply from %s md %p\n", - libcfs_nidstr(&ni->ni_nid), libcfs_id2str(peer_id), getmd); + libcfs_nidstr(&ni->ni_nid), libcfs_idstr(peer_id), getmd); /* setup information for lnet_build_msg_event */ msg->msg_initiator = - lnet_nid_to_nid4(&getmsg->msg_txpeer->lpni_peer_net->lpn_peer->lp_primary_nid); - msg->msg_from = peer_id.nid; + getmsg->msg_txpeer->lpni_peer_net->lpn_peer->lp_primary_nid; + msg->msg_from = peer_id->nid; msg->msg_type = LNET_MSG_GET; /* flag this msg as an "optimized" GET */ - msg->msg_hdr.src_nid = peer_id.nid; + msg->msg_hdr.src_nid = lnet_nid_to_nid4(&peer_id->nid); msg->msg_hdr.payload_length = getmd->md_length; msg->msg_receiving = 1; /* required by lnet_msg_attach_md */ lnet_msg_attach_md(msg, getmd, getmd->md_offset, getmd->md_length); lnet_res_unlock(cpt); - cpt = lnet_cpt_of_nid(peer_id.nid, ni); + cpt = lnet_nid2cpt(&peer_id->nid, ni); lnet_net_lock(cpt); lnet_msg_commit(msg, cpt); @@ -5153,7 +5155,7 @@ lnet_create_reply_msg(struct lnet_ni *ni, struct lnet_msg *getmsg) return msg; drop: - cpt = lnet_cpt_of_nid(peer_id.nid, ni); + cpt = lnet_nid2cpt(&peer_id->nid, ni); lnet_net_lock(cpt); lnet_incr_stats(&ni->ni_stats, LNET_MSG_GET, LNET_STATS_TYPE_DROP); diff --git a/lnet/lnet/lib-msg.c b/lnet/lnet/lib-msg.c index 1ed75cd..3d0957d 100644 --- a/lnet/lnet/lib-msg.c +++ b/lnet/lnet/lib-msg.c @@ -81,12 +81,12 @@ lnet_build_msg_event(struct lnet_msg *msg, enum lnet_event_kind ev_type) ev->target.nid = hdr->dest_nid; ev->initiator.pid = hdr->src_pid; /* Multi-Rail: resolve src_nid to "primary" peer NID */ - ev->initiator.nid = msg->msg_initiator; + ev->initiator.nid = lnet_nid_to_nid4(&msg->msg_initiator); /* Multi-Rail: track source NID. */ ev->source.pid = hdr->src_pid; ev->source.nid = hdr->src_nid; ev->rlength = hdr->payload_length; - ev->sender = msg->msg_from; + ev->sender = lnet_nid_to_nid4(&msg->msg_from); ev->mlength = msg->msg_wanted; ev->offset = msg->msg_offset; } @@ -390,7 +390,8 @@ lnet_complete_msg_locked(struct lnet_msg *msg, int cpt) msg->msg_hdr.msg.ack.match_bits = msg->msg_ev.match_bits; msg->msg_hdr.msg.ack.mlength = cpu_to_le32(msg->msg_ev.mlength); - rc = lnet_send(msg->msg_ev.target.nid, msg, msg->msg_from); + rc = lnet_send(msg->msg_ev.target.nid, msg, + lnet_nid_to_nid4(&msg->msg_from)); lnet_net_lock(cpt); /* @@ -633,7 +634,7 @@ lnet_resend_msg_locked(struct lnet_msg *msg) * this message consumed. The message will * consume another credit when it gets resent. */ - msg->msg_target.nid = msg->msg_hdr.dest_nid; + lnet_nid4_to_nid(msg->msg_hdr.dest_nid, &msg->msg_target.nid); lnet_msg_decommit_tx(msg, -EAGAIN); msg->msg_sending = 0; msg->msg_receiving = 0; @@ -689,8 +690,8 @@ lnet_attempt_msg_resend(struct lnet_msg *msg) /* don't resend recovery messages */ if (msg->msg_recovery) { CDEBUG(D_NET, "msg %s->%s is a recovery ping. retry# %d\n", - libcfs_nid2str(msg->msg_from), - libcfs_nid2str(msg->msg_target.nid), + libcfs_nidstr(&msg->msg_from), + libcfs_nidstr(&msg->msg_target.nid), msg->msg_retry_count); return -ENOTRECOVERABLE; } @@ -701,8 +702,8 @@ lnet_attempt_msg_resend(struct lnet_msg *msg) */ if (msg->msg_no_resend) { CDEBUG(D_NET, "msg %s->%s requested no resend. retry# %d\n", - libcfs_nid2str(msg->msg_from), - libcfs_nid2str(msg->msg_target.nid), + libcfs_nidstr(&msg->msg_from), + libcfs_nidstr(&msg->msg_target.nid), msg->msg_retry_count); return -ENOTRECOVERABLE; } @@ -710,8 +711,8 @@ lnet_attempt_msg_resend(struct lnet_msg *msg) /* check if the message has exceeded the number of retries */ if (msg->msg_retry_count >= lnet_retry_count) { CNETERR("msg %s->%s exceeded retry count %d\n", - libcfs_nid2str(msg->msg_from), - libcfs_nid2str(msg->msg_target.nid), + libcfs_nidstr(&msg->msg_from), + libcfs_nidstr(&msg->msg_target.nid), msg->msg_retry_count); return -ENOTRECOVERABLE; } diff --git a/lnet/lnet/lib-ptl.c b/lnet/lnet/lib-ptl.c index 9392e0e..95b541f 100644 --- a/lnet/lnet/lib-ptl.c +++ b/lnet/lnet/lib-ptl.c @@ -685,7 +685,7 @@ lnet_ptl_attach_md(struct lnet_me *me, struct lnet_libmd *md, hdr = &msg->msg_hdr; /* Multi-Rail: Primary peer NID */ - lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid); + info.mi_id.nid = msg->msg_initiator; info.mi_id.pid = hdr->src_pid; info.mi_opc = LNET_MD_OP_PUT; info.mi_portal = hdr->msg.put.ptl_index; diff --git a/lnet/lnet/peer.c b/lnet/lnet/peer.c index 627df28..c73c445 100644 --- a/lnet/lnet/peer.c +++ b/lnet/lnet/peer.c @@ -1334,21 +1334,18 @@ lnet_peer_clr_pref_nids(struct lnet_peer_ni *lpni) } } -lnet_nid_t -lnet_peer_primary_nid_locked(lnet_nid_t nid) +void +lnet_peer_primary_nid_locked(lnet_nid_t nid, struct lnet_nid *result) { /* FIXME handle large-addr nid */ struct lnet_peer_ni *lpni; - lnet_nid_t primary_nid = nid; + lnet_nid4_to_nid(nid, result); lpni = lnet_find_peer_ni_locked(nid); if (lpni) { - primary_nid = lnet_nid_to_nid4( - &lpni->lpni_peer_net->lpn_peer->lp_primary_nid); + *result = lpni->lpni_peer_net->lpn_peer->lp_primary_nid; lnet_peer_ni_decref_locked(lpni); } - - return primary_nid; } bool @@ -2310,13 +2307,13 @@ static void lnet_peer_discovery_complete(struct lnet_peer *lp, int dc_error) CDEBUG(D_NET, "sending pending message %s to target %s\n", lnet_msgtyp2str(msg->msg_type), - libcfs_id2str(msg->msg_target)); - rc = lnet_send(msg->msg_src_nid_param, msg, - msg->msg_rtr_nid_param); + libcfs_idstr(&msg->msg_target)); + rc = lnet_send(lnet_nid_to_nid4(&msg->msg_src_nid_param), msg, + lnet_nid_to_nid4(&msg->msg_rtr_nid_param)); if (rc < 0) { CNETERR("Error sending %s to %s: %d\n", lnet_msgtyp2str(msg->msg_type), - libcfs_id2str(msg->msg_target), rc); + libcfs_idstr(&msg->msg_target), rc); lnet_finalize(msg, rc); } } @@ -3728,12 +3725,12 @@ static void lnet_resend_msgs(void) list_for_each_entry_safe(msg, tmp, &resend, msg_list) { list_del_init(&msg->msg_list); - rc = lnet_send(msg->msg_src_nid_param, msg, - msg->msg_rtr_nid_param); + rc = lnet_send(lnet_nid_to_nid4(&msg->msg_src_nid_param), msg, + lnet_nid_to_nid4(&msg->msg_rtr_nid_param)); if (rc < 0) { CNETERR("Error sending %s to %s: %d\n", lnet_msgtyp2str(msg->msg_type), - libcfs_id2str(msg->msg_target), rc); + libcfs_idstr(&msg->msg_target), rc); lnet_finalize(msg, rc); } } -- 1.8.3.1