RDMA/cma: Let cma_resolve_ib_dev() continue search even after empty entry
[sfrench/cifs-2.6.git] / drivers / infiniband / core / cma.c
index 8a98aa90956f7403231ee8486e435bb3e637680f..27a00ce2e10120be29a5081b9226d7747dba23a1 100644 (file)
@@ -766,6 +766,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
        unsigned int p;
        u16 pkey, index;
        enum ib_port_state port_state;
+       int ret;
        int i;
 
        cma_dev = NULL;
@@ -784,9 +785,14 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv)
 
                        if (ib_get_cached_port_state(cur_dev->device, p, &port_state))
                                continue;
-                       for (i = 0; !rdma_query_gid(cur_dev->device,
-                                                   p, i, &gid);
-                            i++) {
+
+                       for (i = 0; i < cur_dev->device->port_data[p].immutable.gid_tbl_len;
+                            ++i) {
+                               ret = rdma_query_gid(cur_dev->device, p, i,
+                                                    &gid);
+                               if (ret)
+                                       continue;
+
                                if (!memcmp(&gid, dgid, sizeof(gid))) {
                                        cma_dev = cur_dev;
                                        sgid = gid;