|
@@ -1815,18 +1815,18 @@ ib_find_send_mad(const struct ib_mad_agent_private *mad_agent_priv,
|
|
const struct ib_mad_recv_wc *wc)
|
|
const struct ib_mad_recv_wc *wc)
|
|
{
|
|
{
|
|
struct ib_mad_send_wr_private *wr;
|
|
struct ib_mad_send_wr_private *wr;
|
|
- struct ib_mad *mad;
|
|
|
|
|
|
+ const struct ib_mad_hdr *mad_hdr;
|
|
|
|
|
|
- mad = (struct ib_mad *)wc->recv_buf.mad;
|
|
|
|
|
|
+ mad_hdr = &wc->recv_buf.mad->mad_hdr;
|
|
|
|
|
|
list_for_each_entry(wr, &mad_agent_priv->wait_list, agent_list) {
|
|
list_for_each_entry(wr, &mad_agent_priv->wait_list, agent_list) {
|
|
- if ((wr->tid == mad->mad_hdr.tid) &&
|
|
|
|
|
|
+ if ((wr->tid == mad_hdr->tid) &&
|
|
rcv_has_same_class(wr, wc) &&
|
|
rcv_has_same_class(wr, wc) &&
|
|
/*
|
|
/*
|
|
* Don't check GID for direct routed MADs.
|
|
* Don't check GID for direct routed MADs.
|
|
* These might have permissive LIDs.
|
|
* These might have permissive LIDs.
|
|
*/
|
|
*/
|
|
- (is_direct(wc->recv_buf.mad->mad_hdr.mgmt_class) ||
|
|
|
|
|
|
+ (is_direct(mad_hdr->mgmt_class) ||
|
|
rcv_has_same_gid(mad_agent_priv, wr, wc)))
|
|
rcv_has_same_gid(mad_agent_priv, wr, wc)))
|
|
return (wr->status == IB_WC_SUCCESS) ? wr : NULL;
|
|
return (wr->status == IB_WC_SUCCESS) ? wr : NULL;
|
|
}
|
|
}
|
|
@@ -1837,14 +1837,14 @@ ib_find_send_mad(const struct ib_mad_agent_private *mad_agent_priv,
|
|
*/
|
|
*/
|
|
list_for_each_entry(wr, &mad_agent_priv->send_list, agent_list) {
|
|
list_for_each_entry(wr, &mad_agent_priv->send_list, agent_list) {
|
|
if (is_rmpp_data_mad(mad_agent_priv, wr->send_buf.mad) &&
|
|
if (is_rmpp_data_mad(mad_agent_priv, wr->send_buf.mad) &&
|
|
- wr->tid == mad->mad_hdr.tid &&
|
|
|
|
|
|
+ wr->tid == mad_hdr->tid &&
|
|
wr->timeout &&
|
|
wr->timeout &&
|
|
rcv_has_same_class(wr, wc) &&
|
|
rcv_has_same_class(wr, wc) &&
|
|
/*
|
|
/*
|
|
* Don't check GID for direct routed MADs.
|
|
* Don't check GID for direct routed MADs.
|
|
* These might have permissive LIDs.
|
|
* These might have permissive LIDs.
|
|
*/
|
|
*/
|
|
- (is_direct(wc->recv_buf.mad->mad_hdr.mgmt_class) ||
|
|
|
|
|
|
+ (is_direct(mad_hdr->mgmt_class) ||
|
|
rcv_has_same_gid(mad_agent_priv, wr, wc)))
|
|
rcv_has_same_gid(mad_agent_priv, wr, wc)))
|
|
/* Verify request has not been canceled */
|
|
/* Verify request has not been canceled */
|
|
return (wr->status == IB_WC_SUCCESS) ? wr : NULL;
|
|
return (wr->status == IB_WC_SUCCESS) ? wr : NULL;
|