From 57b7b3d36f5fa15274cc8da939556f4d814cbbb7 Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Fri, 10 Jul 2020 12:39:17 +1000 Subject: [PATCH] LU-10391 lnet: alter lnet_drop_rule_match() to take lnet_nid The local nid passed to lnet_drop_rule_match() is now a 16-byte nid. Various support functions are also changed to embrace 'struct lnet_nid'. 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: I738bff9cfc8c5a70c736639fdd64a66d2aded186 Reviewed-on: https://review.whamcloud.com/43617 Reviewed-by: James Simmons Reviewed-by: Chris Horn Reviewed-by: Amir Shehata Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lnet/include/lnet/lib-lnet.h | 2 +- lnet/lnet/lib-move.c | 3 +-- lnet/lnet/lib-msg.c | 3 +-- lnet/lnet/net_fault.c | 42 ++++++++++++++++++++++++------------------ 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index 11b4330..f840fe5 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -797,7 +797,7 @@ int lnet_fault_ctl(int cmd, struct libcfs_ioctl_data *data); int lnet_fault_init(void); void lnet_fault_fini(void); -bool lnet_drop_rule_match(struct lnet_hdr *hdr, lnet_nid_t local_nid, +bool lnet_drop_rule_match(struct lnet_hdr *hdr, struct lnet_nid *local_nid, enum lnet_msg_hstatus *hstatus); int lnet_delay_rule_add(struct lnet_fault_attr *attr); diff --git a/lnet/lnet/lib-move.c b/lnet/lnet/lib-move.c index 34aeea8..cce4841 100644 --- a/lnet/lnet/lib-move.c +++ b/lnet/lnet/lib-move.c @@ -4647,9 +4647,8 @@ lnet_parse(struct lnet_ni *ni, struct lnet_hdr *hdr, goto drop; } - /* FIXME need to support large-addr nid */ if (!list_empty(&the_lnet.ln_drop_rules) && - lnet_drop_rule_match(hdr, lnet_nid_to_nid4(&ni->ni_nid), NULL)) { + lnet_drop_rule_match(hdr, &ni->ni_nid, NULL)) { CDEBUG(D_NET, "%s, src %s, dst %s: Dropping %s to simulate silent message loss\n", libcfs_nidstr(from_nid), libcfs_nidstr(&src_nid), diff --git a/lnet/lnet/lib-msg.c b/lnet/lnet/lib-msg.c index ed979bc..39a2ba2 100644 --- a/lnet/lnet/lib-msg.c +++ b/lnet/lnet/lib-msg.c @@ -1114,8 +1114,7 @@ lnet_send_error_simulation(struct lnet_msg *msg, return false; /* match only health rules */ - if (!lnet_drop_rule_match(&msg->msg_hdr, LNET_NID_ANY, - hstatus)) + if (!lnet_drop_rule_match(&msg->msg_hdr, NULL, hstatus)) return false; CDEBUG(D_NET, "src %s(%s)->dst %s: %s simulate health error: %s\n", diff --git a/lnet/lnet/net_fault.c b/lnet/lnet/net_fault.c index 0a201a0..113a908 100644 --- a/lnet/lnet/net_fault.c +++ b/lnet/lnet/net_fault.c @@ -65,12 +65,16 @@ struct lnet_drop_rule { }; static bool -lnet_fault_nid_match(lnet_nid_t nid, lnet_nid_t msg_nid) +lnet_fault_nid_match(lnet_nid_t nid, struct lnet_nid *msg_nid) { - if (nid == msg_nid || nid == LNET_NID_ANY) + if (nid == LNET_NID_ANY) + return true; + if (!msg_nid) + return false; + if (lnet_nid_to_nid4(msg_nid) == nid) return true; - if (LNET_NIDNET(nid) != LNET_NIDNET(msg_nid)) + if (LNET_NIDNET(nid) != LNET_NID_NET(msg_nid)) return false; /* 255.255.255.255@net is wildcard for all addresses in a network */ @@ -78,8 +82,10 @@ lnet_fault_nid_match(lnet_nid_t nid, lnet_nid_t msg_nid) } static bool -lnet_fault_attr_match(struct lnet_fault_attr *attr, lnet_nid_t src, - lnet_nid_t local_nid, lnet_nid_t dst, +lnet_fault_attr_match(struct lnet_fault_attr *attr, + struct lnet_nid *src, + struct lnet_nid *local_nid, + struct lnet_nid *dst, unsigned int type, unsigned int portal) { if (!lnet_fault_nid_match(attr->fa_src, src) || @@ -341,8 +347,10 @@ lnet_fault_match_health(enum lnet_msg_hstatus *hstatus, __u32 mask) * decide whether should drop this message or not */ static bool -drop_rule_match(struct lnet_drop_rule *rule, lnet_nid_t src, - lnet_nid_t local_nid, lnet_nid_t dst, +drop_rule_match(struct lnet_drop_rule *rule, + struct lnet_nid *src, + struct lnet_nid *local_nid, + struct lnet_nid *dst, unsigned int type, unsigned int portal, enum lnet_msg_hstatus *hstatus) { @@ -426,11 +434,9 @@ drop_matched: */ bool lnet_drop_rule_match(struct lnet_hdr *hdr, - lnet_nid_t local_nid, + struct lnet_nid *local_nid, enum lnet_msg_hstatus *hstatus) { - lnet_nid_t src = lnet_nid_to_nid4(&hdr->src_nid); - lnet_nid_t dst = lnet_nid_to_nid4(&hdr->dest_nid); unsigned int typ = hdr->type; struct lnet_drop_rule *rule; unsigned int ptl = -1; @@ -446,7 +452,8 @@ lnet_drop_rule_match(struct lnet_hdr *hdr, cpt = lnet_net_lock_current(); list_for_each_entry(rule, &the_lnet.ln_drop_rules, dr_link) { - drop = drop_rule_match(rule, src, local_nid, dst, typ, ptl, + drop = drop_rule_match(rule, &hdr->src_nid, local_nid, + &hdr->dest_nid, typ, ptl, hstatus); if (drop) break; @@ -530,15 +537,15 @@ delay_rule_decref(struct lnet_delay_rule *rule) * decide whether should delay this message or not */ static bool -delay_rule_match(struct lnet_delay_rule *rule, lnet_nid_t src, - lnet_nid_t dst, unsigned int type, unsigned int portal, - struct lnet_msg *msg) +delay_rule_match(struct lnet_delay_rule *rule, struct lnet_nid *src, + struct lnet_nid *dst, unsigned int type, unsigned int portal, + struct lnet_msg *msg) { struct lnet_fault_attr *attr = &rule->dl_attr; bool delay; time64_t now = ktime_get_seconds(); - if (!lnet_fault_attr_match(attr, src, LNET_NID_ANY, + if (!lnet_fault_attr_match(attr, src, NULL, dst, type, portal)) return false; @@ -605,8 +612,6 @@ bool lnet_delay_rule_match_locked(struct lnet_hdr *hdr, struct lnet_msg *msg) { struct lnet_delay_rule *rule; - lnet_nid_t src = lnet_nid_to_nid4(&hdr->src_nid); - lnet_nid_t dst = lnet_nid_to_nid4(&hdr->dest_nid); unsigned int typ = hdr->type; unsigned int ptl = -1; @@ -620,7 +625,8 @@ lnet_delay_rule_match_locked(struct lnet_hdr *hdr, struct lnet_msg *msg) ptl = le32_to_cpu(hdr->msg.get.ptl_index); list_for_each_entry(rule, &the_lnet.ln_delay_rules, dl_link) { - if (delay_rule_match(rule, src, dst, typ, ptl, msg)) + if (delay_rule_match(rule, &hdr->src_nid, &hdr->dest_nid, + typ, ptl, msg)) return true; } -- 1.8.3.1