All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Simmons <jsimmons@infradead.org>
To: Andreas Dilger <adilger@whamcloud.com>,
	Oleg Drokin <green@whamcloud.com>, NeilBrown <neilb@suse.de>
Cc: Lustre Development List <lustre-devel@lists.lustre.org>
Subject: [lustre-devel] [PATCH 04/50] lnet: Change lnet_send() to take large-addr nids
Date: Sun, 20 Mar 2022 09:30:18 -0400	[thread overview]
Message-ID: <1647783064-20688-5-git-send-email-jsimmons@infradead.org> (raw)
In-Reply-To: <1647783064-20688-1-git-send-email-jsimmons@infradead.org>

From: Mr NeilBrown <neilb@suse.de>

The src and rtr nids passed to lnet_send() are now pointers to a
'struct lnet_nid'.  NULL can be passed for the rtr nid, which is
treated the same as ANY.

WC-bug-id: https://jira.whamcloud.com/browse/LU-10391
Lustre-commit: 005bd7075c8710fb8 ("LU-10391 lnet: Change lnet_send() to take large-addr nids")
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Reviewed-on: https://review.whamcloud.com/43599
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 include/linux/lnet/lib-lnet.h |   3 +-
 net/lnet/lnet/lib-move.c      | 181 +++++++++++++++++++++++-------------------
 net/lnet/lnet/lib-msg.c       |   7 +-
 net/lnet/lnet/peer.c          |   8 +-
 4 files changed, 108 insertions(+), 91 deletions(-)

diff --git a/include/linux/lnet/lib-lnet.h b/include/linux/lnet/lib-lnet.h
index 29a6252..8b4a29b 100644
--- a/include/linux/lnet/lib-lnet.h
+++ b/include/linux/lnet/lib-lnet.h
@@ -585,7 +585,8 @@ void lnet_msg_attach_md(struct lnet_msg *msg, struct lnet_libmd *md,
 void lnet_prep_send(struct lnet_msg *msg, int type,
 		    struct lnet_process_id target, unsigned int offset,
 		    unsigned int len);
-int lnet_send(lnet_nid_t nid, struct lnet_msg *msg, lnet_nid_t rtr_nid);
+int lnet_send(struct lnet_nid *nid, struct lnet_msg *msg,
+	      struct lnet_nid *rtr_nid);
 int lnet_send_ping(lnet_nid_t dest_nid, struct lnet_handle_md *mdh, int nnis,
 		   void *user_ptr, lnet_handler_t handler, bool recovery);
 void lnet_return_tx_credits_locked(struct lnet_msg *msg);
diff --git a/net/lnet/lnet/lib-move.c b/net/lnet/lnet/lib-move.c
index 83c93ca..de3e0ac 100644
--- a/net/lnet/lnet/lib-move.c
+++ b/net/lnet/lnet/lib-move.c
@@ -53,9 +53,9 @@ struct lnet_send_data {
 	struct lnet_peer_ni	*sd_gw_lpni;
 	struct lnet_peer_net	*sd_peer_net;
 	struct lnet_msg		*sd_msg;
-	lnet_nid_t		sd_dst_nid;
-	lnet_nid_t		sd_src_nid;
-	lnet_nid_t		sd_rtr_nid;
+	struct lnet_nid		sd_dst_nid;
+	struct lnet_nid		sd_src_nid;
+	struct lnet_nid		sd_rtr_nid;
 	int			sd_cpt;
 	int			sd_md_cpt;
 	u32			sd_send_case;
@@ -1769,11 +1769,11 @@ void lnet_usr_translate_stats(struct lnet_ioctl_element_msg_stats *msg_stats,
 		CDEBUG(D_NET, "TRACE: %s(%s:%s) -> %s(%s:%s) %s : %s try# %d\n",
 		       libcfs_nid2str(msg->msg_hdr.src_nid),
 		       libcfs_nidstr(&msg->msg_txni->ni_nid),
-		       libcfs_nid2str(sd->sd_src_nid),
+		       libcfs_nidstr(&sd->sd_src_nid),
 		       libcfs_nid2str(msg->msg_hdr.dest_nid),
-		       libcfs_nid2str(sd->sd_dst_nid),
+		       libcfs_nidstr(&sd->sd_dst_nid),
 		       libcfs_nidstr(&msg->msg_txpeer->lpni_nid),
-		       libcfs_nid2str(sd->sd_rtr_nid),
+		       libcfs_nidstr(&sd->sd_rtr_nid),
 		       lnet_msgtyp2str(msg->msg_type), msg->msg_retry_count);
 
 	return rc;
@@ -1804,11 +1804,11 @@ void lnet_usr_translate_stats(struct lnet_ioctl_element_msg_stats *msg_stats,
 	/* the destination lpni is set before we get here. */
 
 	/* find local NI */
-	sd->sd_best_ni = lnet_nid2ni_locked(sd->sd_src_nid, sd->sd_cpt);
+	sd->sd_best_ni = lnet_nid_to_ni_locked(&sd->sd_src_nid, sd->sd_cpt);
 	if (!sd->sd_best_ni) {
 		CERROR("Can't send to %s: src %s is not a local nid\n",
-		       libcfs_nid2str(sd->sd_dst_nid),
-		       libcfs_nid2str(sd->sd_src_nid));
+		       libcfs_nidstr(&sd->sd_dst_nid),
+		       libcfs_nidstr(&sd->sd_src_nid));
 		return -EINVAL;
 	}
 
@@ -1830,11 +1830,11 @@ void lnet_usr_translate_stats(struct lnet_ioctl_element_msg_stats *msg_stats,
 static int
 lnet_handle_spec_local_mr_dst(struct lnet_send_data *sd)
 {
-	sd->sd_best_ni = lnet_nid2ni_locked(sd->sd_src_nid, sd->sd_cpt);
+	sd->sd_best_ni = lnet_nid_to_ni_locked(&sd->sd_src_nid, sd->sd_cpt);
 	if (!sd->sd_best_ni) {
 		CERROR("Can't send to %s: src %s is not a local nid\n",
-		       libcfs_nid2str(sd->sd_dst_nid),
-		       libcfs_nid2str(sd->sd_src_nid));
+		       libcfs_nidstr(&sd->sd_dst_nid),
+		       libcfs_nidstr(&sd->sd_src_nid));
 		return -EINVAL;
 	}
 
@@ -1846,7 +1846,7 @@ void lnet_usr_translate_stats(struct lnet_ioctl_element_msg_stats *msg_stats,
 		return lnet_handle_send(sd);
 
 	CERROR("can't send to %s. no NI on %s\n",
-	       libcfs_nid2str(sd->sd_dst_nid),
+	       libcfs_nidstr(&sd->sd_dst_nid),
 	       libcfs_net2str(sd->sd_best_ni->ni_net->net_id));
 
 	return -EHOSTUNREACH;
@@ -1947,7 +1947,7 @@ struct lnet_ni *
 
 static int
 lnet_handle_find_routed_path(struct lnet_send_data *sd,
-			     lnet_nid_t dst_nid,
+			     struct lnet_nid *dst_nid,
 			     struct lnet_peer_ni **gw_lpni,
 			     struct lnet_peer **gw_peer)
 {
@@ -1962,21 +1962,21 @@ struct lnet_ni *
 	struct lnet_peer_ni *lpni = NULL;
 	struct lnet_peer_ni *gwni = NULL;
 	bool route_found = false;
-	lnet_nid_t src_nid = (sd->sd_src_nid != LNET_NID_ANY) ? sd->sd_src_nid :
-			      sd->sd_best_ni ? lnet_nid_to_nid4(&sd->sd_best_ni->ni_nid) :
-			      LNET_NID_ANY;
+	struct lnet_nid *src_nid =
+		!LNET_NID_IS_ANY(&sd->sd_src_nid) ||
+		!sd->sd_best_ni ? &sd->sd_src_nid : &sd->sd_best_ni->ni_nid;
 	int best_lpn_healthv = 0;
 	u32 best_lpn_sel_prio = LNET_MAX_SELECTION_PRIORITY;
 
 	CDEBUG(D_NET, "using src nid %s for route restriction\n",
-	       libcfs_nid2str(src_nid));
+	       src_nid ? libcfs_nidstr(src_nid) : "ANY");
 
 	/* If a router nid was specified then we are replying to a GET or
 	 * sending an ACK. In this case we use the gateway associated with the
 	 * specified router nid.
 	 */
-	if (sd->sd_rtr_nid != LNET_NID_ANY) {
-		gwni = lnet_find_peer_ni_locked(sd->sd_rtr_nid);
+	if (!LNET_NID_IS_ANY(&sd->sd_rtr_nid)) {
+		gwni = lnet_peer_ni_find_locked(&sd->sd_rtr_nid);
 		if (gwni) {
 			gw = gwni->lpni_peer_net->lpn_peer;
 			lnet_peer_ni_decref_locked(gwni);
@@ -1984,25 +1984,26 @@ struct lnet_ni *
 				route_found = true;
 		} else {
 			CWARN("No peer NI for gateway %s. Attempting to find an alternative route.\n",
-			       libcfs_nid2str(sd->sd_rtr_nid));
+			       libcfs_nidstr(&sd->sd_rtr_nid));
 		}
 	}
 
 	if (!route_found) {
-		if (sd->sd_msg->msg_routing || src_nid != LNET_NID_ANY) {
+		if (sd->sd_msg->msg_routing ||
+		    (src_nid && !LNET_NID_IS_ANY(src_nid))) {
 			/* If I'm routing this message then I need to find the
 			 * next hop based on the destination NID
 			 *
 			 * We also find next hop based on the destination NID
 			 * if the source NI was specified
 			 */
-			best_rnet = lnet_find_rnet_locked(LNET_NIDNET(sd->sd_dst_nid));
+			best_rnet = lnet_find_rnet_locked(LNET_NID_NET(&sd->sd_dst_nid));
 			if (!best_rnet) {
 				CERROR("Unable to send message from %s to %s - Route table may be misconfigured\n",
-				       src_nid != LNET_NID_ANY ?
-						libcfs_nid2str(src_nid) :
-						"any local NI",
-				       libcfs_nid2str(sd->sd_dst_nid));
+				       (src_nid && LNET_NID_IS_ANY(src_nid)) ?
+						"any local NI" :
+						libcfs_nidstr(src_nid),
+				       libcfs_nidstr(&sd->sd_dst_nid));
 				return -EHOSTUNREACH;
 			}
 		} else {
@@ -2049,17 +2050,17 @@ struct lnet_ni *
 
 			if (!best_lpn) {
 				CERROR("peer %s has no available nets\n",
-				       libcfs_nid2str(sd->sd_dst_nid));
+				       libcfs_nidstr(&sd->sd_dst_nid));
 				return -EHOSTUNREACH;
 			}
 
 			sd->sd_best_lpni = lnet_find_best_lpni(sd->sd_best_ni,
-							       sd->sd_dst_nid,
+							       lnet_nid_to_nid4(&sd->sd_dst_nid),
 							       lp,
 							       best_lpn->lpn_net_id);
 			if (!sd->sd_best_lpni) {
 				CERROR("peer %s is unreachable\n",
-				       libcfs_nid2str(sd->sd_dst_nid));
+				       libcfs_nidstr(&sd->sd_dst_nid));
 				return -EHOSTUNREACH;
 			}
 
@@ -2083,20 +2084,20 @@ struct lnet_ni *
 		 * have when adding a route.
 		 */
 		best_route = lnet_find_route_locked(best_rnet,
-						    LNET_NIDNET(src_nid),
+						    LNET_NID_NET(src_nid),
 						    sd->sd_best_lpni,
 						    &last_route, &gwni);
 		if (!best_route) {
 			CERROR("no route to %s from %s\n",
-			       libcfs_nid2str(dst_nid),
-			       libcfs_nid2str(src_nid));
+			       libcfs_nidstr(dst_nid),
+			       libcfs_nidstr(src_nid));
 			return -EHOSTUNREACH;
 		}
 
 		if (!gwni) {
 			CERROR("Internal Error. Route expected to %s from %s\n",
-			       libcfs_nid2str(dst_nid),
-			       libcfs_nid2str(src_nid));
+			       libcfs_nidstr(dst_nid),
+			       libcfs_nidstr(src_nid));
 			return -EFAULT;
 		}
 
@@ -2130,7 +2131,7 @@ struct lnet_ni *
 		if (!sd->sd_best_ni) {
 			CERROR("Internal Error. Expected local ni on %s but non found :%s\n",
 			       libcfs_net2str(lpn->lpn_net_id),
-			       libcfs_nid2str(sd->sd_src_nid));
+			       libcfs_nidstr(&sd->sd_src_nid));
 			return -EFAULT;
 		}
 	}
@@ -2141,7 +2142,7 @@ struct lnet_ni *
 	/* increment the sequence numbers since now we're sure we're
 	 * going to use this path
 	 */
-	if (sd->sd_rtr_nid == LNET_NID_ANY) {
+	if (LNET_NID_IS_ANY(&sd->sd_rtr_nid)) {
 		LASSERT(best_route && last_route);
 		best_route->lr_seq = last_route->lr_seq + 1;
 		if (best_lpn)
@@ -2174,15 +2175,15 @@ struct lnet_ni *
 	struct lnet_peer *gw_peer = NULL;
 
 	/* find local NI */
-	sd->sd_best_ni = lnet_nid2ni_locked(sd->sd_src_nid, sd->sd_cpt);
+	sd->sd_best_ni = lnet_nid_to_ni_locked(&sd->sd_src_nid, sd->sd_cpt);
 	if (!sd->sd_best_ni) {
 		CERROR("Can't send to %s: src %s is not a local nid\n",
-		       libcfs_nid2str(sd->sd_dst_nid),
-		       libcfs_nid2str(sd->sd_src_nid));
+		       libcfs_nidstr(&sd->sd_dst_nid),
+		       libcfs_nidstr(&sd->sd_src_nid));
 		return -EINVAL;
 	}
 
-	rc = lnet_handle_find_routed_path(sd, sd->sd_dst_nid, &gw_lpni,
+	rc = lnet_handle_find_routed_path(sd, &sd->sd_dst_nid, &gw_lpni,
 					  &gw_peer);
 	if (rc)
 		return rc;
@@ -2403,7 +2404,7 @@ struct lnet_ni *
 	if (!sd->sd_best_lpni) {
 		CERROR("Internal fault. Unable to send msg %s to %s. NID not known\n",
 		       lnet_msgtyp2str(sd->sd_msg->msg_type),
-		       libcfs_nid2str(sd->sd_dst_nid));
+		       libcfs_nidstr(&sd->sd_dst_nid));
 		return -EFAULT;
 	}
 
@@ -2418,7 +2419,7 @@ struct lnet_ni *
 							       sd->sd_md_cpt);
 		if (!sd->sd_best_ni) {
 			CERROR("Unable to forward message to %s. No local NI available\n",
-			       libcfs_nid2str(sd->sd_dst_nid));
+			       libcfs_nidstr(&sd->sd_dst_nid));
 			rc = -EHOSTUNREACH;
 		}
 	} else {
@@ -2455,7 +2456,7 @@ struct lnet_ni *
 			 * a response to the provided final destination
 			 */
 			CERROR("Can't send response to %s. No local NI available\n",
-			       libcfs_nid2str(sd->sd_dst_nid));
+			       libcfs_nidstr(&sd->sd_dst_nid));
 			return -EHOSTUNREACH;
 		}
 
@@ -2473,7 +2474,8 @@ struct lnet_ni *
 					lnet_msg_discovery(sd->sd_msg));
 	if (sd->sd_best_ni) {
 		sd->sd_best_lpni =
-		  lnet_find_best_lpni(sd->sd_best_ni, sd->sd_dst_nid,
+		  lnet_find_best_lpni(sd->sd_best_ni,
+				      lnet_nid_to_nid4(&sd->sd_dst_nid),
 				      sd->sd_peer,
 				      sd->sd_best_ni->ni_net->net_id);
 
@@ -2501,8 +2503,8 @@ struct lnet_ni *
 		}
 
 		CERROR("Internal Error. Expected to have a best_lpni: %s -> %s\n",
-		       libcfs_nid2str(sd->sd_src_nid),
-		       libcfs_nid2str(sd->sd_dst_nid));
+		       libcfs_nidstr(&sd->sd_src_nid),
+		       libcfs_nidstr(&sd->sd_dst_nid));
 
 		return -EFAULT;
 	}
@@ -2544,11 +2546,11 @@ struct lnet_ni *
 		struct lnet_peer_ni *gw;
 		struct lnet_peer *gw_peer;
 
-		rc = lnet_handle_find_routed_path(sd, sd->sd_dst_nid, &gw,
+		rc = lnet_handle_find_routed_path(sd, &sd->sd_dst_nid, &gw,
 						  &gw_peer);
 		if (rc < 0) {
 			CERROR("Can't send response to %s. No route available\n",
-			       libcfs_nid2str(sd->sd_dst_nid));
+			       libcfs_nidstr(&sd->sd_dst_nid));
 			return -EHOSTUNREACH;
 		} else if (rc > 0) {
 			return rc;
@@ -2577,8 +2579,8 @@ struct lnet_ni *
 	 * need to select the destination which we can route to and if
 	 * there are multiple, we need to round robin.
 	 */
-	rc = lnet_handle_find_routed_path(sd, sd->sd_dst_nid, &gw_lpni,
-					  &gw_peer);
+	rc = lnet_handle_find_routed_path(sd, &sd->sd_dst_nid,
+					  &gw_lpni, &gw_peer);
 	if (rc)
 		return rc;
 
@@ -2613,7 +2615,7 @@ struct lnet_ni *
 	/* find the router and that'll find the best NI if we didn't find
 	 * it already.
 	 */
-	rc = lnet_handle_find_routed_path(sd, sd->sd_dst_nid, &gw_lpni,
+	rc = lnet_handle_find_routed_path(sd, &sd->sd_dst_nid, &gw_lpni,
 					  &gw_peer);
 	if (rc)
 		return rc;
@@ -2640,9 +2642,9 @@ struct lnet_ni *
 
 	CDEBUG(D_NET, "Source %s%s to %s %s %s destination\n",
 	       (send_case & SRC_SPEC) ? "Specified: " : "ANY",
-	       (send_case & SRC_SPEC) ? libcfs_nid2str(sd->sd_src_nid) : "",
+	       (send_case & SRC_SPEC) ? libcfs_nidstr(&sd->sd_src_nid) : "",
 	       (send_case & MR_DST) ? "MR: " : "NMR: ",
-	       libcfs_nid2str(sd->sd_dst_nid),
+	       libcfs_nidstr(&sd->sd_dst_nid),
 	       (send_case & LOCAL_DST) ? "local" : "routed");
 
 	switch (send_case) {
@@ -2672,8 +2674,10 @@ struct lnet_ni *
 }
 
 static int
-lnet_select_pathway(lnet_nid_t src_nid, lnet_nid_t dst_nid,
-		    struct lnet_msg *msg, lnet_nid_t rtr_nid)
+lnet_select_pathway(struct lnet_nid *src_nid,
+		    struct lnet_nid *dst_nid,
+		    struct lnet_msg *msg,
+		    struct lnet_nid *rtr_nid)
 {
 	struct lnet_peer_ni *lpni;
 	struct lnet_peer *peer;
@@ -2707,7 +2711,7 @@ struct lnet_ni *
 	 */
 	send_data.sd_msg = msg;
 	send_data.sd_cpt = cpt;
-	if (dst_nid == LNET_NID_LO_0) {
+	if (nid_is_lo0(dst_nid)) {
 		rc = lnet_handle_lo_send(&send_data);
 		lnet_net_unlock(cpt);
 		return rc;
@@ -2717,7 +2721,7 @@ struct lnet_ni *
 	 * created due to network traffic. This call will create the
 	 * peer->peer_net->peer_ni tree.
 	 */
-	lpni = lnet_nid2peerni_locked(dst_nid, LNET_NID_ANY, cpt);
+	lpni = lnet_peerni_by_nid_locked(dst_nid, NULL, cpt);
 	if (IS_ERR(lpni)) {
 		lnet_net_unlock(cpt);
 		return PTR_ERR(lpni);
@@ -2730,8 +2734,14 @@ struct lnet_ni *
 	 * continuing the same sequence of messages. Similarly, rtr_nid will
 	 * affect our choice of next hop.
 	 */
-	lnet_nid4_to_nid(src_nid, &msg->msg_src_nid_param);
-	lnet_nid4_to_nid(rtr_nid, &msg->msg_rtr_nid_param);
+	if (src_nid)
+		msg->msg_src_nid_param = *src_nid;
+	else
+		msg->msg_src_nid_param = LNET_ANY_NID;
+	if (rtr_nid)
+		msg->msg_rtr_nid_param = *rtr_nid;
+	else
+		msg->msg_rtr_nid_param = LNET_ANY_NID;
 
 	/* If necessary, perform discovery on the peer that owns this peer_ni.
 	 * Note, this can result in the ownership of this peer_ni changing
@@ -2749,15 +2759,15 @@ struct lnet_ni *
 
 	/* Identify the different send cases
 	 */
-	if (src_nid == LNET_NID_ANY) {
+	if (!src_nid || LNET_NID_IS_ANY(src_nid)) {
 		send_case |= SRC_ANY;
-		if (lnet_get_net_locked(LNET_NIDNET(dst_nid)))
+		if (lnet_get_net_locked(LNET_NID_NET(dst_nid)))
 			send_case |= LOCAL_DST;
 		else
 			send_case |= REMOTE_DST;
 	} else {
 		send_case |= SRC_SPEC;
-		if (LNET_NIDNET(src_nid) == LNET_NIDNET(dst_nid))
+		if (LNET_NID_NET(src_nid) == LNET_NID_NET(dst_nid))
 			send_case |= LOCAL_DST;
 		else
 			send_case |= REMOTE_DST;
@@ -2814,9 +2824,15 @@ struct lnet_ni *
 		send_case |= SND_RESP;
 
 	/* assign parameters to the send_data */
-	send_data.sd_rtr_nid = rtr_nid;
-	send_data.sd_src_nid = src_nid;
-	send_data.sd_dst_nid = dst_nid;
+	if (rtr_nid)
+		send_data.sd_rtr_nid = *rtr_nid;
+	else
+		send_data.sd_rtr_nid = LNET_ANY_NID;
+	if (src_nid)
+		send_data.sd_src_nid = *src_nid;
+	else
+		send_data.sd_src_nid = LNET_ANY_NID;
+	send_data.sd_dst_nid = *dst_nid;
 	send_data.sd_best_lpni = lpni;
 	/* keep a pointer to the final destination in case we're going to
 	 * route, so we'll need to access it later
@@ -2842,16 +2858,12 @@ struct lnet_ni *
 }
 
 int
-lnet_send(lnet_nid_t src_nid, struct lnet_msg *msg, lnet_nid_t rtr_nid)
+lnet_send(struct lnet_nid *src_nid, struct lnet_msg *msg,
+	  struct lnet_nid *rtr_nid)
 {
-	lnet_nid_t dst_nid = lnet_nid_to_nid4(&msg->msg_target.nid);
+	struct lnet_nid *dst_nid = &msg->msg_target.nid;
 	int rc;
 
-	/*
-	 * NB: rtr_nid is set to LNET_NID_ANY for all current use-cases,
-	 * but we might want to use pre-determined router for ACK/REPLY
-	 * in the future
-	 */
 	/* NB: !ni == interface pre-determined (ACK/REPLY) */
 	LASSERT(!msg->msg_txpeer);
 	LASSERT(!msg->msg_txni);
@@ -3112,9 +3124,8 @@ struct lnet_mt_event_info {
 			       lnet_msgtyp2str(msg->msg_type),
 			       msg->msg_recovery,
 			       msg->msg_retry_count);
-			rc = lnet_send(lnet_nid_to_nid4(&msg->msg_src_nid_param),
-				       msg,
-				       lnet_nid_to_nid4(&msg->msg_rtr_nid_param));
+			rc = lnet_send(&msg->msg_src_nid_param, msg,
+				       &msg->msg_rtr_nid_param);
 			if (rc) {
 				CERROR("Error sending %s to %s: %d\n",
 				       lnet_msgtyp2str(msg->msg_type),
@@ -4023,9 +4034,7 @@ void lnet_monitor_thr_stop(void)
 	lnet_ni_recv(ni, msg->msg_private, NULL, 0, 0, 0, 0);
 	msg->msg_receiving = 0;
 
-	/* FIXME need to handle large-addr nid */
-	rc = lnet_send(lnet_nid_to_nid4(&ni->ni_nid), msg,
-		       lnet_nid_to_nid4(&msg->msg_from));
+	rc = lnet_send(&ni->ni_nid, msg, &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",
@@ -4706,7 +4715,7 @@ void lnet_monitor_thr_stop(void)
  * \see lnet_event::hdr_data and lnet_event_kind.
  */
 int
-LNetPut(lnet_nid_t self, struct lnet_handle_md mdh, enum lnet_ack_req ack,
+LNetPut(lnet_nid_t self4, struct lnet_handle_md mdh, enum lnet_ack_req ack,
 	struct lnet_process_id target, unsigned int portal,
 	u64 match_bits, unsigned int offset,
 	u64 hdr_data)
@@ -4714,11 +4723,14 @@ void lnet_monitor_thr_stop(void)
 	struct lnet_rsp_tracker *rspt = NULL;
 	struct lnet_msg *msg;
 	struct lnet_libmd *md;
+	struct lnet_nid self;
 	int cpt;
 	int rc;
 
 	LASSERT(the_lnet.ln_refcount > 0);
 
+	lnet_nid4_to_nid(self4, &self);
+
 	if (!list_empty(&the_lnet.ln_test_peers) && /* normally we don't */
 	    fail_peer(target.nid, 1)) { /* shall we now? */
 		CERROR("Dropping PUT to %s: simulated failure\n",
@@ -4803,7 +4815,7 @@ void lnet_monitor_thr_stop(void)
 				 CFS_FAIL_ONCE))
 		rc = -EIO;
 	else
-		rc = lnet_send(self, msg, LNET_NID_ANY);
+		rc = lnet_send(&self, msg, NULL);
 	if (rc) {
 		CNETERR("Error sending PUT to %s: %d\n",
 			libcfs_id2str(target), rc);
@@ -4947,18 +4959,21 @@ struct lnet_msg *
  *		-ENOENT Invalid MD object.
  */
 int
-LNetGet(lnet_nid_t self, struct lnet_handle_md mdh,
+LNetGet(lnet_nid_t self4, struct lnet_handle_md mdh,
 	struct lnet_process_id target, unsigned int portal,
 	u64 match_bits, unsigned int offset, bool recovery)
 {
 	struct lnet_rsp_tracker *rspt;
 	struct lnet_msg *msg;
 	struct lnet_libmd *md;
+	struct lnet_nid self;
 	int cpt;
 	int rc;
 
 	LASSERT(the_lnet.ln_refcount > 0);
 
+	lnet_nid4_to_nid(self4, &self);
+
 	if (!list_empty(&the_lnet.ln_test_peers) && /* normally we don't */
 	    fail_peer(target.nid, 1)) {		/* shall we now? */
 		CERROR("Dropping GET to %s: simulated failure\n",
@@ -5029,7 +5044,7 @@ struct lnet_msg *
 	else
 		lnet_rspt_free(rspt, cpt);
 
-	rc = lnet_send(self, msg, LNET_NID_ANY);
+	rc = lnet_send(&self, msg, NULL);
 	if (rc < 0) {
 		CNETERR("Error sending GET to %s: %d\n",
 			libcfs_id2str(target), rc);
diff --git a/net/lnet/lnet/lib-msg.c b/net/lnet/lnet/lib-msg.c
index 980f93d..f432488 100644
--- a/net/lnet/lnet/lib-msg.c
+++ b/net/lnet/lnet/lib-msg.c
@@ -379,6 +379,7 @@
 
 	if (!status && msg->msg_ack) {
 		/* Only send an ACK if the PUT completed successfully */
+		struct lnet_nid src;
 
 		lnet_msg_decommit(msg, cpt, 0);
 
@@ -396,8 +397,8 @@
 		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,
-			       lnet_nid_to_nid4(&msg->msg_from));
+		lnet_nid4_to_nid(msg->msg_ev.target.nid, &src);
+		rc = lnet_send(&src, msg, &msg->msg_from);
 
 		lnet_net_lock(cpt);
 		/*
@@ -419,7 +420,7 @@
 		LASSERT(!msg->msg_receiving);	/* called back recv already */
 		lnet_net_unlock(cpt);
 
-		rc = lnet_send(LNET_NID_ANY, msg, LNET_NID_ANY);
+		rc = lnet_send(NULL, msg, NULL);
 
 		lnet_net_lock(cpt);
 		/*
diff --git a/net/lnet/lnet/peer.c b/net/lnet/lnet/peer.c
index 9cb06d2..505065f 100644
--- a/net/lnet/lnet/peer.c
+++ b/net/lnet/lnet/peer.c
@@ -2296,8 +2296,8 @@ 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_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));
+		rc = lnet_send(&msg->msg_src_nid_param, msg,
+			       &msg->msg_rtr_nid_param);
 		if (rc < 0) {
 			CNETERR("Error sending %s to %s: %d\n",
 				lnet_msgtyp2str(msg->msg_type),
@@ -3697,8 +3697,8 @@ 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(lnet_nid_to_nid4(&msg->msg_src_nid_param), msg,
-			       lnet_nid_to_nid4(&msg->msg_rtr_nid_param));
+		rc = lnet_send(&msg->msg_src_nid_param, msg,
+			       &msg->msg_rtr_nid_param);
 		if (rc < 0) {
 			CNETERR("Error sending %s to %s: %d\n",
 				lnet_msgtyp2str(msg->msg_type),
-- 
1.8.3.1

_______________________________________________
lustre-devel mailing list
lustre-devel@lists.lustre.org
http://lists.lustre.org/listinfo.cgi/lustre-devel-lustre.org

  parent reply	other threads:[~2022-03-20 13:31 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-20 13:30 [lustre-devel] [PATCH 00/50] lustre: update to OpenSFS tree as of March 20, 2022 James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 01/50] lustre: type cleanups and remove debug statements James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 02/50] lustre: osc: Fix grant test for ARM James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 03/50] lnet: extend nids in struct lnet_msg James Simmons
2022-03-20 13:30 ` James Simmons [this message]
2022-03-20 13:30 ` [lustre-devel] [PATCH 05/50] lnet: use large nids in struct lnet_event James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 06/50] lnet: socklnd: prepare for new KSOCK_MSG type James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 07/50] lnet: socklnd: don't deref lnet_hdr in LNDs James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 08/50] lustre: sec: make client encryption compatible with ext4 James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 09/50] lustre: sec: allow subdir mount of encrypted dir James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 10/50] lustre: fld: repeat rpc in fld_client_rpc after EAGAIN James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 11/50] lustre: fld: don't obtain a slot for fld request James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 12/50] lustre: update version to 2.14.57 James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 13/50] lustre: llite: deadlock in ll_new_node() James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 14/50] lnet: o2iblnd: avoid static allocation for msg tx James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 15/50] lnet: separate lnet_hdr in msg from that in lnd James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 16/50] lnet: change lnet_hdr to store large nids James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 17/50] lnet: change lnet_prep_send to take net_processid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 18/50] lnet: convert to struct lnet_process_id in lib-move James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 19/50] lnet: convert LNetGetID to return an large-addr pid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 20/50] lnet: alter lnd_notify_peer_down() to take lnet_nid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 21/50] lnet: socklnd: move lnet_hdr unpack into ->pro_unpack James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 22/50] lnet: socklnd: Change ksock_hello_msg to struct lnet_nid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 23/50] lnet: socklnd: add hello message version 4 James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 24/50] lnet: Convert ping to support 16-bytes address James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 25/50] lnet: convert nids in lnet_parse to lnet_nid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 26/50] lnet: change src_nid arg to lnet_parse() to 16byte James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 27/50] lnet: Fix NULL-deref in lnet_nidstr_r() James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 28/50] lnet: change lnet_del_route() to take lnet_nid James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 29/50] lustre: llite: Move free user pages James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 30/50] lustre: llite: Do not get/put DIO pages James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 31/50] lustre: llite: Remove unnecessary page get/put James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 32/50] lustre: llite: LL_IOC_LMV_GETSTRIPE 'default' shows inherit layout James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 33/50] lustre: hsm: update size upon completion of data version James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 34/50] lustre: llite: Delay dput in ll_dirty_page_discard_warn James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 35/50] lnet: libcfs: Use FAIL_CHECK_QUIET for fake i/o James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 36/50] lnet: Avoid peer NI recovery for local interface James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 37/50] lustre: osc: add OBD_IOC_GETATTR support for osc James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 38/50] lustre: sec: present .fscrypt in subdir mount James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 39/50] lnet: improve hash distribution across CPTs James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 40/50] lustre: osc: osc_extent_wait() deadlock James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 41/50] lustre: quota: delete unused quota ID James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 42/50] lnet: Check LNET_NID_IS_ANY in LNET_NID_NET James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 43/50] lustre: llite: clear async errors on write commit sync James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 44/50] lnet: lnet_peer_data_present() memory leak James Simmons
2022-03-20 13:30 ` [lustre-devel] [PATCH 45/50] lnet: Don't use pref NI for reserved portal James Simmons
2022-03-20 13:31 ` [lustre-devel] [PATCH 46/50] lnet: o2iblnd: avoid memory copy for short msg James Simmons
2022-03-20 13:31 ` [lustre-devel] [PATCH 47/50] lustre: llite: set default LMV hash type with 2.12 MDS James Simmons
2022-03-20 13:31 ` [lustre-devel] [PATCH 48/50] lnet: Stop discovery on deleted peer NI James Simmons
2022-03-20 13:31 ` [lustre-devel] [PATCH 49/50] lustre: sec: fix DIO for encrypted files James Simmons
2022-03-20 13:31 ` [lustre-devel] [PATCH 50/50] lustre: ptlrpc: Use after free of 'conn' in rhashtable retry James Simmons

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1647783064-20688-5-git-send-email-jsimmons@infradead.org \
    --to=jsimmons@infradead.org \
    --cc=adilger@whamcloud.com \
    --cc=green@whamcloud.com \
    --cc=lustre-devel@lists.lustre.org \
    --cc=neilb@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.