Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-6142 lnet: use list_first_entry() in lnet/lnet subdirectory.
[fs/lustre-release.git]
/
lnet
/
lnet
/
lib-msg.c
diff --git
a/lnet/lnet/lib-msg.c
b/lnet/lnet/lib-msg.c
index
f23d7d3
..
69a85be
100644
(file)
--- a/
lnet/lnet/lib-msg.c
+++ b/
lnet/lnet/lib-msg.c
@@
-68,13
+68,13
@@
lnet_build_msg_event(struct lnet_msg *msg, enum lnet_event_kind ev_type)
if (ev_type == LNET_EVENT_SEND) {
/* event for active message */
if (ev_type == LNET_EVENT_SEND) {
/* event for active message */
- ev->target.nid =
le64_to_cpu(hdr->dest_nid)
;
- ev->target.pid =
le32_to_cpu(hdr->dest_pid)
;
- ev->initiator.nid = LNET_
NID_ANY
;
+ ev->target.nid =
hdr->dest_nid
;
+ ev->target.pid =
hdr->dest_pid
;
+ ev->initiator.nid = LNET_
ANY_NID
;
ev->initiator.pid = the_lnet.ln_pid;
ev->initiator.pid = the_lnet.ln_pid;
- ev->source.nid = LNET_
NID_ANY
;
+ ev->source.nid = LNET_
ANY_NID
;
ev->source.pid = the_lnet.ln_pid;
ev->source.pid = the_lnet.ln_pid;
- ev->sender = LNET_
NID_ANY
;
+ ev->sender = LNET_
ANY_NID
;
} else {
/* event for passive message */
ev->target.pid = hdr->dest_pid;
} else {
/* event for passive message */
ev->target.pid = hdr->dest_pid;
@@
-85,7
+85,7
@@
lnet_build_msg_event(struct lnet_msg *msg, enum lnet_event_kind ev_type)
/* Multi-Rail: track source NID. */
ev->source.pid = hdr->src_pid;
ev->source.nid = hdr->src_nid;
/* Multi-Rail: track source NID. */
ev->source.pid = hdr->src_pid;
ev->source.nid = hdr->src_nid;
- ev->rlength = hdr->payload_length;
+ ev->rlength = hdr->payload_length;
ev->sender = msg->msg_from;
ev->mlength = msg->msg_wanted;
ev->offset = msg->msg_offset;
ev->sender = msg->msg_from;
ev->mlength = msg->msg_wanted;
ev->offset = msg->msg_offset;
@@
-384,13
+384,14
@@
lnet_complete_msg_locked(struct lnet_msg *msg, int cpt)
ack_wmd = msg->msg_hdr.msg.put.ack_wmd;
ack_wmd = msg->msg_hdr.msg.put.ack_wmd;
- lnet_prep_send(msg, LNET_MSG_ACK, msg->msg_ev.source, 0, 0);
+ lnet_prep_send(msg, LNET_MSG_ACK,
&
msg->msg_ev.source, 0, 0);
msg->msg_hdr.msg.ack.dst_wmd = ack_wmd;
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);
msg->msg_hdr.msg.ack.dst_wmd = ack_wmd;
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,
+ &msg->msg_from);
lnet_net_lock(cpt);
/*
lnet_net_lock(cpt);
/*
@@
-412,7
+413,7
@@
lnet_complete_msg_locked(struct lnet_msg *msg, int cpt)
LASSERT(!msg->msg_receiving); /* called back recv already */
lnet_net_unlock(cpt);
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);
/*
lnet_net_lock(cpt);
/*
@@
-466,7
+467,7
@@
lnet_ni_add_to_recoveryq_locked(struct lnet_ni *ni,
lnet_ni_set_next_ping(ni, now);
CDEBUG(D_NET, "%s added to recovery queue. ping count: %u next ping: %lld health :%d\n",
lnet_ni_set_next_ping(ni, now);
CDEBUG(D_NET, "%s added to recovery queue. ping count: %u next ping: %lld health :%d\n",
- libcfs_nid
2str(
ni->ni_nid),
+ libcfs_nid
str(&
ni->ni_nid),
ni->ni_ping_count,
ni->ni_next_ping,
atomic_read(&ni->ni_healthv));
ni->ni_ping_count,
ni->ni_next_ping,
atomic_read(&ni->ni_healthv));
@@
-640,8
+641,8
@@
lnet_resend_msg_locked(struct lnet_msg *msg)
msg->msg_target_is_router = 0;
CDEBUG(D_NET, "%s->%s:%s:%s - queuing msg (%p) for resend\n",
msg->msg_target_is_router = 0;
CDEBUG(D_NET, "%s->%s:%s:%s - queuing msg (%p) for resend\n",
- libcfs_nid
2str(
msg->msg_hdr.src_nid),
- libcfs_nid
2str(
msg->msg_hdr.dest_nid),
+ libcfs_nid
str(&
msg->msg_hdr.src_nid),
+ libcfs_nid
str(&
msg->msg_hdr.dest_nid),
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(msg->msg_health_status), msg);
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(msg->msg_health_status), msg);
@@
-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",
/* don't resend recovery messages */
if (msg->msg_recovery) {
CDEBUG(D_NET, "msg %s->%s is a recovery ping. retry# %d\n",
- libcfs_nid
2str(
msg->msg_from),
- libcfs_nid
2str(
msg->msg_target.nid),
+ libcfs_nid
str(&
msg->msg_from),
+ libcfs_nid
str(&
msg->msg_target.nid),
msg->msg_retry_count);
return -ENOTRECOVERABLE;
}
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",
*/
if (msg->msg_no_resend) {
CDEBUG(D_NET, "msg %s->%s requested no resend. retry# %d\n",
- libcfs_nid
2str(
msg->msg_from),
- libcfs_nid
2str(
msg->msg_target.nid),
+ libcfs_nid
str(&
msg->msg_from),
+ libcfs_nid
str(&
msg->msg_target.nid),
msg->msg_retry_count);
return -ENOTRECOVERABLE;
}
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",
/* 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_nid
2str(
msg->msg_from),
- libcfs_nid
2str(
msg->msg_target.nid),
+ libcfs_nid
str(&
msg->msg_from),
+ libcfs_nid
str(&
msg->msg_target.nid),
msg->msg_retry_count);
return -ENOTRECOVERABLE;
}
msg->msg_retry_count);
return -ENOTRECOVERABLE;
}
@@
-738,9
+739,9
@@
lnet_attempt_msg_resend(struct lnet_msg *msg)
return 0;
}
return 0;
}
- while (
!list_empty(&container->msc_resending)) {
-
msg = list_entry(container->msc_resending.next
,
- struct lnet_msg, msg_list);
+ while (
(msg = list_first_entry_or_null(&container->msc_resending,
+
struct lnet_msg
,
+ msg_list)) != NULL) {
list_del(&msg->msg_list);
/*
list_del(&msg->msg_list);
/*
@@
-800,10
+801,11
@@
lnet_health_check(struct lnet_msg *msg)
* if we're sending to the LOLND then the msg_txpeer will not be
* set. So no need to sanity check it.
*/
* if we're sending to the LOLND then the msg_txpeer will not be
* set. So no need to sanity check it.
*/
- if (msg->msg_tx_committed && msg->msg_txni->ni_nid != LNET_NID_LO_0)
+ if (msg->msg_tx_committed &&
+ !nid_is_lo0(&msg->msg_txni->ni_nid))
LASSERT(msg->msg_txpeer);
else if (msg->msg_tx_committed &&
LASSERT(msg->msg_txpeer);
else if (msg->msg_tx_committed &&
-
msg->msg_txni->ni_nid == LNET_NID_LO_0
)
+
nid_is_lo0(&msg->msg_txni->ni_nid)
)
lo = true;
if (hstatus != LNET_MSG_STATUS_OK &&
lo = true;
if (hstatus != LNET_MSG_STATUS_OK &&
@@
-830,8
+832,8
@@
lnet_health_check(struct lnet_msg *msg)
LASSERT(ni);
CDEBUG(D_NET, "health check: %s->%s: %s: %s\n",
LASSERT(ni);
CDEBUG(D_NET, "health check: %s->%s: %s: %s\n",
- libcfs_nid
2str(
ni->ni_nid),
- (lo) ? "self" : libcfs_nid
2str(
lpni->lpni_nid),
+ libcfs_nid
str(&
ni->ni_nid),
+ (lo) ? "self" : libcfs_nid
str(&
lpni->lpni_nid),
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(hstatus));
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(hstatus));
@@
-876,6
+878,12
@@
lnet_health_check(struct lnet_msg *msg)
if (!lnet_isrouter(lpni))
handle_remote_health = false;
}
if (!lnet_isrouter(lpni))
handle_remote_health = false;
}
+ /* Do not put my interfaces into peer NI recovery. They should
+ * be handled with local NI recovery.
+ */
+ if (handle_remote_health && lpni &&
+ lnet_nid_to_ni_locked(&lpni->lpni_nid, 0))
+ handle_remote_health = false;
lnet_net_unlock(0);
}
lnet_net_unlock(0);
}
@@
-889,8
+897,6
@@
lnet_health_check(struct lnet_msg *msg)
* faster recovery.
*/
lnet_inc_healthv(&ni->ni_healthv, lnet_health_sensitivity);
* faster recovery.
*/
lnet_inc_healthv(&ni->ni_healthv, lnet_health_sensitivity);
- lnet_net_lock(0);
- ni->ni_ping_count = 0;
/*
* It's possible msg_txpeer is NULL in the LOLND
* case. Only increment the peer's health if we're
/*
* It's possible msg_txpeer is NULL in the LOLND
* case. Only increment the peer's health if we're
@@
-900,7
+906,9
@@
lnet_health_check(struct lnet_msg *msg)
* as indication that the router is fully healthy.
*/
if (lpni && msg->msg_rx_committed) {
* as indication that the router is fully healthy.
*/
if (lpni && msg->msg_rx_committed) {
+ lnet_net_lock(0);
lpni->lpni_ping_count = 0;
lpni->lpni_ping_count = 0;
+ ni->ni_ping_count = 0;
/*
* If we're receiving a message from the router or
* I'm a router, then set that lpni's health to
/*
* If we're receiving a message from the router or
* I'm a router, then set that lpni's health to
@@
-926,8
+934,8
@@
lnet_health_check(struct lnet_msg *msg)
&the_lnet.ln_mt_peerNIRecovq,
ktime_get_seconds());
}
&the_lnet.ln_mt_peerNIRecovq,
ktime_get_seconds());
}
+ lnet_net_unlock(0);
}
}
- lnet_net_unlock(0);
/* we can finalize this message */
return -1;
/* we can finalize this message */
return -1;
@@
-1106,14
+1114,13
@@
lnet_send_error_simulation(struct lnet_msg *msg,
return false;
/* match only health rules */
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",
return false;
CDEBUG(D_NET, "src %s(%s)->dst %s: %s simulate health error: %s\n",
- libcfs_nid
2str(
msg->msg_hdr.src_nid),
- libcfs_nid
2str(
msg->msg_txni->ni_nid),
- libcfs_nid
2str(
msg->msg_hdr.dest_nid),
+ libcfs_nid
str(&
msg->msg_hdr.src_nid),
+ libcfs_nid
str(&
msg->msg_txni->ni_nid),
+ libcfs_nid
str(&
msg->msg_hdr.dest_nid),
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(*hstatus));
lnet_msgtyp2str(msg->msg_type),
lnet_health_error2str(*hstatus));
@@
-1192,10
+1199,9
@@
again:
}
rc = 0;
}
rc = 0;
- while (!list_empty(&container->msc_finalizing)) {
- msg = list_entry(container->msc_finalizing.next,
- struct lnet_msg, msg_list);
-
+ while ((msg = list_first_entry_or_null(&container->msc_finalizing,
+ struct lnet_msg,
+ msg_list)) != NULL) {
list_del_init(&msg->msg_list);
/* NB drops and regains the lnet lock if it actually does
list_del_init(&msg->msg_list);
/* NB drops and regains the lnet lock if it actually does
@@
-1222,16
+1228,15
@@
EXPORT_SYMBOL(lnet_finalize);
void
lnet_msg_container_cleanup(struct lnet_msg_container *container)
{
void
lnet_msg_container_cleanup(struct lnet_msg_container *container)
{
- int count = 0;
+ struct lnet_msg *msg;
+ int count = 0;
if (container->msc_init == 0)
return;
if (container->msc_init == 0)
return;
- while (!list_empty(&container->msc_active)) {
- struct lnet_msg *msg;
-
- msg = list_entry(container->msc_active.next,
- struct lnet_msg, msg_activelist);
+ while ((msg = list_first_entry_or_null(&container->msc_active,
+ struct lnet_msg,
+ msg_activelist)) != NULL) {
LASSERT(msg->msg_onactivelist);
msg->msg_onactivelist = 0;
list_del_init(&msg->msg_activelist);
LASSERT(msg->msg_onactivelist);
msg->msg_onactivelist = 0;
list_del_init(&msg->msg_activelist);