iw_cxgb4: use wildcard mapping for getting remote addr info
For listening endpoints bound to the wildcard address, we need to pass
the wildcard address mapping to iwpm_get_remote_info() instead of the
mapped address of the new child connection.
Without this fix, and with iwarp port mapping enabled, each iw_cxgb4
connection that is spawned from a listening endpoint bound to the wildcard
address, will generate an annoying dmesg entry about failing to find
the remote address mapping info, and the connection state displayed in
debugfs under /sys/kernel/debug/iw_cxgb4/<pci-slot-no>/eps will not have
the peer's address/port mapping info. The connection still works though.
Fixes: 5b6b8fe
("RDMA/cxgb4: Report the actual address of the remote connecting peer")
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Reviewed-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
94634e9861
commit
940fd304d2
|
@ -583,18 +583,18 @@ static void c4iw_record_pm_msg(struct c4iw_ep *ep,
|
||||||
sizeof(ep->com.mapped_remote_addr));
|
sizeof(ep->com.mapped_remote_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_remote_addr(struct c4iw_ep *ep)
|
static int get_remote_addr(struct c4iw_ep *parent_ep, struct c4iw_ep *child_ep)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
print_addr(&ep->com, __func__, "get_remote_addr");
|
print_addr(&parent_ep->com, __func__, "get_remote_addr parent_ep ");
|
||||||
|
print_addr(&child_ep->com, __func__, "get_remote_addr child_ep ");
|
||||||
|
|
||||||
ret = iwpm_get_remote_info(&ep->com.mapped_local_addr,
|
ret = iwpm_get_remote_info(&parent_ep->com.mapped_local_addr,
|
||||||
&ep->com.mapped_remote_addr,
|
&child_ep->com.mapped_remote_addr,
|
||||||
&ep->com.remote_addr, RDMA_NL_C4IW);
|
&child_ep->com.remote_addr, RDMA_NL_C4IW);
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_info(MOD "Unable to find remote peer addr info - err %d\n",
|
PDBG("Unable to find remote peer addr info - err %d\n", ret);
|
||||||
ret);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -2420,7 +2420,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
|
||||||
}
|
}
|
||||||
memcpy(&child_ep->com.remote_addr, &child_ep->com.mapped_remote_addr,
|
memcpy(&child_ep->com.remote_addr, &child_ep->com.mapped_remote_addr,
|
||||||
sizeof(child_ep->com.remote_addr));
|
sizeof(child_ep->com.remote_addr));
|
||||||
get_remote_addr(child_ep);
|
get_remote_addr(parent_ep, child_ep);
|
||||||
|
|
||||||
c4iw_get_ep(&parent_ep->com);
|
c4iw_get_ep(&parent_ep->com);
|
||||||
child_ep->parent_ep = parent_ep;
|
child_ep->parent_ep = parent_ep;
|
||||||
|
|
Loading…
Reference in a new issue