Details
-
Bug
-
Resolution: Fixed
-
Blocker
-
Lustre 2.15.0
-
3
-
9223372036854775807
Description
Routed, source-any sends were broken by https://review.whamcloud.com/43599
lnet_handle_find_routed_path() calls lnet_find_route_locked() passing LNET_NID_NET(src_nid) as an argument.
best_route = lnet_find_route_locked(best_rnet, LNET_NID_NET(src_nid), sd->sd_best_lpni, &last_route, &gwni);
This network ID is in turn passed to lnet_find_best_lpni() where it is compared against LNET_NET_ANY:
static inline struct lnet_peer_ni * lnet_find_best_lpni(struct lnet_ni *lni, lnet_nid_t dst_nid, struct lnet_peer *peer, __u32 net_id) { struct lnet_peer_net *peer_net; /* find the best_lpni on any local network */ if (net_id == LNET_NET_ANY) {
Where
#define LNET_NET_ANY LNET_NIDNET(LNET_NID_ANY) == LNET_NIDNET(-1) == 0xffffffff
In the case where a source NID was not specified, the network id passed to lnet_find_best_lpni() is equal to
LNET_NID_NET(LNET_ANY_NID)
Where:
static inline __u32 LNET_NID_NET(const struct lnet_nid *nid) { return LNET_MKNET(nid->nid_type, __be16_to_cpu(nid->nid_num)); }
I think we need an "extended nid" version of LNET_NET_ANY (call it LNET_ANY_NET) such that
#define LNET_ANY_NET LNET_NID_NET(&LNET_ANY_NID)
or LNET_NID_NET could be modified to check for LNET_ANY_NID and return LNET_NET_ANY.
Attachments
Issue Links
- is related to
-
LU-10391 LNET: Support IPv6
- Resolved