nvme_rdma: Set REUSEADDR to reuse source address among multiple CM IDs
When we specify source address for admin and I/O qpairs, rdma_resolve_addr() succeeded only for admin qpair and failed for following all I/O qpairs because rdma_resolve_addr() returned -EADDRINUSE. To reuse source address among multiple qpairs, set the REUSEADDR option for each CM ID before executing rdma_resolve_addr() if source address is specified. We may miss something. Even if rdma_set_option() fails, execute rdma_resolve_addr(). Fixes issue #2604 Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: If03f82d4499cf83c0e428a62e91c9d9e6aad28e0 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14229 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: GangCao <gang.cao@intel.com> Reviewed-by: Dong Yi <dongx.yi@intel.com>
This commit is contained in:
parent
5af2dfdc9d
commit
4a6f858872
@ -1193,6 +1193,20 @@ nvme_rdma_resolve_addr(struct nvme_rdma_qpair *rqpair,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (src_addr) {
|
||||||
|
int reuse = 1;
|
||||||
|
|
||||||
|
ret = rdma_set_option(rqpair->cm_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR,
|
||||||
|
&reuse, sizeof(reuse));
|
||||||
|
if (ret) {
|
||||||
|
SPDK_NOTICELOG("Can't apply RDMA_OPTION_ID_REUSEADDR %d, ret %d\n",
|
||||||
|
reuse, ret);
|
||||||
|
/* It is likely that rdma_resolve_addr() returns -EADDRINUSE, but
|
||||||
|
* we may missing something. We rely on rdma_resolve_addr().
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = rdma_resolve_addr(rqpair->cm_id, src_addr, dst_addr,
|
ret = rdma_resolve_addr(rqpair->cm_id, src_addr, dst_addr,
|
||||||
NVME_RDMA_TIME_OUT_IN_MS);
|
NVME_RDMA_TIME_OUT_IN_MS);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
Loading…
Reference in New Issue
Block a user