Commit 3236b2d4 authored by Jim Foraker's avatar Jim Foraker Committed by Roland Dreier

IB/qib: MADs with misset M_Keys should return failure

If a MAD is sent directly to the local HCA rather than placed on a QP
and the MAD fails M_Key checks, there is no means to generate a
timeout for the client, which may hang.  Instead we report
IB_MAD_RESULT_FAILURE, which operates the same for on-the-wire
packets, but will generate a send failure back to the client.
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarJim Foraker <foraker1@llnl.gov>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 6199c896
...@@ -433,7 +433,7 @@ static int check_mkey(struct qib_ibport *ibp, struct ib_smp *smp, int mad_flags) ...@@ -433,7 +433,7 @@ static int check_mkey(struct qib_ibport *ibp, struct ib_smp *smp, int mad_flags)
ibp->mkey_lease_period * HZ; ibp->mkey_lease_period * HZ;
/* Generate a trap notice. */ /* Generate a trap notice. */
qib_bad_mkey(ibp, smp); qib_bad_mkey(ibp, smp);
ret = IB_MAD_RESULT_SUCCESS | IB_MAD_RESULT_CONSUMED; ret = 1;
} }
} }
...@@ -464,6 +464,7 @@ static int subn_get_portinfo(struct ib_smp *smp, struct ib_device *ibdev, ...@@ -464,6 +464,7 @@ static int subn_get_portinfo(struct ib_smp *smp, struct ib_device *ibdev,
ibp = to_iport(ibdev, port_num); ibp = to_iport(ibdev, port_num);
ret = check_mkey(ibp, smp, 0); ret = check_mkey(ibp, smp, 0);
if (ret) if (ret)
ret = IB_MAD_RESULT_FAILURE;
goto bail; goto bail;
} }
} }
...@@ -1848,6 +1849,7 @@ static int process_subn(struct ib_device *ibdev, int mad_flags, ...@@ -1848,6 +1849,7 @@ static int process_subn(struct ib_device *ibdev, int mad_flags,
port_num && port_num <= ibdev->phys_port_cnt && port_num && port_num <= ibdev->phys_port_cnt &&
port != port_num) port != port_num)
(void) check_mkey(to_iport(ibdev, port_num), smp, 0); (void) check_mkey(to_iport(ibdev, port_num), smp, 0);
ret = IB_MAD_RESULT_FAILURE;
goto bail; goto bail;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment