Merge tag 'for-linus-unmerged' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma...
[linux-block.git] / drivers / infiniband / core / device.c
index 5d79e8de31f56493257a33405ace6a48236bafe6..ea9fbcfb21bd4ac683b9411061dde5c23b640256 100644 (file)
@@ -289,6 +289,7 @@ void ib_dealloc_device(struct ib_device *device)
 {
        WARN_ON(device->reg_state != IB_DEV_UNREGISTERED &&
                device->reg_state != IB_DEV_UNINITIALIZED);
+       rdma_restrack_clean(&device->res);
        put_device(&device->dev);
 }
 EXPORT_SYMBOL(ib_dealloc_device);
@@ -599,8 +600,6 @@ void ib_unregister_device(struct ib_device *device)
        }
        up_read(&lists_rwsem);
 
-       rdma_restrack_clean(&device->res);
-
        ib_device_unregister_rdmacg(device);
        ib_device_unregister_sysfs(device);
 
@@ -853,7 +852,7 @@ int ib_query_port(struct ib_device *device,
        if (rdma_port_get_link_layer(device, port_num) != IB_LINK_LAYER_INFINIBAND)
                return 0;
 
-       err = ib_query_gid(device, port_num, 0, &gid, NULL);
+       err = device->query_gid(device, port_num, 0, &gid);
        if (err)
                return err;
 
@@ -871,22 +870,13 @@ EXPORT_SYMBOL(ib_query_port);
  * @attr: Returned GID attributes related to this GID index (only in RoCE).
  *   NULL means ignore.
  *
- * ib_query_gid() fetches the specified GID table entry.
+ * ib_query_gid() fetches the specified GID table entry from the cache.
  */
 int ib_query_gid(struct ib_device *device,
                 u8 port_num, int index, union ib_gid *gid,
                 struct ib_gid_attr *attr)
 {
-       if (rdma_protocol_roce(device, port_num))
-               return ib_get_cached_gid(device, port_num, index, gid, attr);
-
-       if (attr)
-               return -EINVAL;
-
-       if (!device->query_gid)
-               return -EOPNOTSUPP;
-
-       return device->query_gid(device, port_num, index, gid);
+       return ib_get_cached_gid(device, port_num, index, gid, attr);
 }
 EXPORT_SYMBOL(ib_query_gid);