mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 16:40:59 +07:00
RDMA/addr: Keep pointer to netdevice in struct rdma_dev_addr
Keep a pointer to the local (src) netdevice in struct rdma_dev_addr, and copy it in as part of rdma_copy_addr(). Use rdma_translate_ip() in cma_new_conn_id() to reduce some code duplication and also make sure the src_dev member gets set. In a high-availability configuration the netdevice pointer can be used by the RDMA CM to align RDMA sessions to use the same links as the IP stack does under fail-over and route change cases. Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
4ab928f692
commit
64c5e613b9
@ -105,6 +105,7 @@ int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev,
|
|||||||
memcpy(dev_addr->broadcast, dev->broadcast, MAX_ADDR_LEN);
|
memcpy(dev_addr->broadcast, dev->broadcast, MAX_ADDR_LEN);
|
||||||
if (dst_dev_addr)
|
if (dst_dev_addr)
|
||||||
memcpy(dev_addr->dst_dev_addr, dst_dev_addr, MAX_ADDR_LEN);
|
memcpy(dev_addr->dst_dev_addr, dst_dev_addr, MAX_ADDR_LEN);
|
||||||
|
dev_addr->src_dev = dev;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rdma_copy_addr);
|
EXPORT_SYMBOL(rdma_copy_addr);
|
||||||
|
@ -1002,6 +1002,7 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id,
|
|||||||
union cma_ip_addr *src, *dst;
|
union cma_ip_addr *src, *dst;
|
||||||
__be16 port;
|
__be16 port;
|
||||||
u8 ip_ver;
|
u8 ip_ver;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (cma_get_net_info(ib_event->private_data, listen_id->ps,
|
if (cma_get_net_info(ib_event->private_data, listen_id->ps,
|
||||||
&ip_ver, &port, &src, &dst))
|
&ip_ver, &port, &src, &dst))
|
||||||
@ -1026,10 +1027,11 @@ static struct rdma_id_private *cma_new_conn_id(struct rdma_cm_id *listen_id,
|
|||||||
if (rt->num_paths == 2)
|
if (rt->num_paths == 2)
|
||||||
rt->path_rec[1] = *ib_event->param.req_rcvd.alternate_path;
|
rt->path_rec[1] = *ib_event->param.req_rcvd.alternate_path;
|
||||||
|
|
||||||
ib_addr_set_sgid(&rt->addr.dev_addr, &rt->path_rec[0].sgid);
|
|
||||||
ib_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid);
|
ib_addr_set_dgid(&rt->addr.dev_addr, &rt->path_rec[0].dgid);
|
||||||
ib_addr_set_pkey(&rt->addr.dev_addr, be16_to_cpu(rt->path_rec[0].pkey));
|
ret = rdma_translate_ip(&id->route.addr.src_addr,
|
||||||
rt->addr.dev_addr.dev_type = RDMA_NODE_IB_CA;
|
&id->route.addr.dev_addr);
|
||||||
|
if (ret)
|
||||||
|
goto destroy_id;
|
||||||
|
|
||||||
id_priv = container_of(id, struct rdma_id_private, id);
|
id_priv = container_of(id, struct rdma_id_private, id);
|
||||||
id_priv->state = CMA_CONNECT;
|
id_priv->state = CMA_CONNECT;
|
||||||
|
@ -61,6 +61,7 @@ struct rdma_dev_addr {
|
|||||||
unsigned char dst_dev_addr[MAX_ADDR_LEN];
|
unsigned char dst_dev_addr[MAX_ADDR_LEN];
|
||||||
unsigned char broadcast[MAX_ADDR_LEN];
|
unsigned char broadcast[MAX_ADDR_LEN];
|
||||||
enum rdma_node_type dev_type;
|
enum rdma_node_type dev_type;
|
||||||
|
struct net_device *src_dev;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user