Commit c2c6ff13 authored by Matan Barak's avatar Matan Barak Committed by Doug Ledford

IB/cm: cm_init_av_by_path should find a GID by its netdevice

Previously, the CM has searched the cache for any sgid_index whose
GID matches the path's GID. Since the path record stores the net
device, the CM should now search only for GIDs which originated from
this net device.
Signed-off-by: default avatarMatan Barak <matanb@mellanox.com>
Reviewed-By: default avatarDevesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent ba36e37f
...@@ -361,17 +361,21 @@ static int cm_init_av_by_path(struct ib_sa_path_rec *path, struct cm_av *av) ...@@ -361,17 +361,21 @@ static int cm_init_av_by_path(struct ib_sa_path_rec *path, struct cm_av *av)
unsigned long flags; unsigned long flags;
int ret; int ret;
u8 p; u8 p;
struct net_device *ndev = ib_get_ndev_from_path(path);
read_lock_irqsave(&cm.device_lock, flags); read_lock_irqsave(&cm.device_lock, flags);
list_for_each_entry(cm_dev, &cm.device_list, list) { list_for_each_entry(cm_dev, &cm.device_list, list) {
if (!ib_find_cached_gid(cm_dev->ib_device, &path->sgid, if (!ib_find_cached_gid(cm_dev->ib_device, &path->sgid,
NULL, &p, NULL)) { ndev, &p, NULL)) {
port = cm_dev->port[p-1]; port = cm_dev->port[p-1];
break; break;
} }
} }
read_unlock_irqrestore(&cm.device_lock, flags); read_unlock_irqrestore(&cm.device_lock, flags);
if (ndev)
dev_put(ndev);
if (!port) if (!port)
return -EINVAL; return -EINVAL;
...@@ -384,7 +388,6 @@ static int cm_init_av_by_path(struct ib_sa_path_rec *path, struct cm_av *av) ...@@ -384,7 +388,6 @@ static int cm_init_av_by_path(struct ib_sa_path_rec *path, struct cm_av *av)
ib_init_ah_from_path(cm_dev->ib_device, port->port_num, path, ib_init_ah_from_path(cm_dev->ib_device, port->port_num, path,
&av->ah_attr); &av->ah_attr);
av->timeout = path->packet_life_time + 1; av->timeout = path->packet_life_time + 1;
memcpy(av->smac, path->smac, sizeof(av->smac));
av->valid = 1; av->valid = 1;
return 0; return 0;
......
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