OSDN Git Service

IB/core: Replace ib_query_gid with rdma_get_gid_attr
authorParav Pandit <parav@mellanox.com>
Tue, 5 Jun 2018 05:40:18 +0000 (08:40 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 18 Jun 2018 17:09:05 +0000 (11:09 -0600)
These call sites have a use of ib_query_gid with a simple lifetime for the
struct gid_attr pointer, with an easy conversion.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/sysfs.c

index 31c7efa..7fd14ea 100644 (file)
@@ -42,6 +42,7 @@
 
 #include <rdma/ib_mad.h>
 #include <rdma/ib_pma.h>
+#include <rdma/ib_cache.h>
 
 struct ib_port;
 
@@ -346,7 +347,7 @@ static struct attribute *port_default_attrs[] = {
        NULL
 };
 
-static size_t print_ndev(struct ib_gid_attr *gid_attr, char *buf)
+static size_t print_ndev(const struct ib_gid_attr *gid_attr, char *buf)
 {
        if (!gid_attr->ndev)
                return -EINVAL;
@@ -354,33 +355,26 @@ static size_t print_ndev(struct ib_gid_attr *gid_attr, char *buf)
        return sprintf(buf, "%s\n", gid_attr->ndev->name);
 }
 
-static size_t print_gid_type(struct ib_gid_attr *gid_attr, char *buf)
+static size_t print_gid_type(const struct ib_gid_attr *gid_attr, char *buf)
 {
        return sprintf(buf, "%s\n", ib_cache_gid_type_str(gid_attr->gid_type));
 }
 
-static ssize_t _show_port_gid_attr(struct ib_port *p,
-                                  struct port_attribute *attr,
-                                  char *buf,
-                                  size_t (*print)(struct ib_gid_attr *gid_attr,
-                                                  char *buf))
+static ssize_t _show_port_gid_attr(
+       struct ib_port *p, struct port_attribute *attr, char *buf,
+       size_t (*print)(const struct ib_gid_attr *gid_attr, char *buf))
 {
        struct port_table_attribute *tab_attr =
                container_of(attr, struct port_table_attribute, attr);
-       union ib_gid gid;
-       struct ib_gid_attr gid_attr = {};
+       const struct ib_gid_attr *gid_attr;
        ssize_t ret;
 
-       ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid,
-                          &gid_attr);
-       if (ret)
-               goto err;
+       gid_attr = rdma_get_gid_attr(p->ibdev, p->port_num, tab_attr->index);
+       if (IS_ERR(gid_attr))
+               return PTR_ERR(gid_attr);
 
-       ret = print(&gid_attr, buf);
-
-err:
-       if (gid_attr.ndev)
-               dev_put(gid_attr.ndev);
+       ret = print(gid_attr, buf);
+       rdma_put_gid_attr(gid_attr);
        return ret;
 }
 
@@ -389,26 +383,28 @@ static ssize_t show_port_gid(struct ib_port *p, struct port_attribute *attr,
 {
        struct port_table_attribute *tab_attr =
                container_of(attr, struct port_table_attribute, attr);
-       union ib_gid *pgid;
-       union ib_gid gid;
+       const struct ib_gid_attr *gid_attr;
        ssize_t ret;
 
-       ret = ib_query_gid(p->ibdev, p->port_num, tab_attr->index, &gid, NULL);
+       gid_attr = rdma_get_gid_attr(p->ibdev, p->port_num, tab_attr->index);
+       if (IS_ERR(gid_attr)) {
+               const union ib_gid zgid = {};
+
+               /* If reading GID fails, it is likely due to GID entry being
+                * empty (invalid) or reserved GID in the table.  User space
+                * expects to read GID table entries as long as it given index
+                * is within GID table size.  Administrative/debugging tool
+                * fails to query rest of the GID entries if it hits error
+                * while querying a GID of the given index.  To avoid user
+                * space throwing such error on fail to read gid, return zero
+                * GID as before. This maintains backward compatibility.
+                */
+               return sprintf(buf, "%pI6\n", zgid.raw);
+       }
 
-       /* If reading GID fails, it is likely due to GID entry being empty
-        * (invalid) or reserved GID in the table.
-        * User space expects to read GID table entries as long as it given
-        * index is within GID table size.
-        * Administrative/debugging tool fails to query rest of the GID entries
-        * if it hits error while querying a GID of the given index.
-        * To avoid user space throwing such error on fail to read gid, return
-        * zero GID as before. This maintains backward compatibility.
-        */
-       if (ret)
-               pgid = &zgid;
-       else
-               pgid = &gid;
-       return sprintf(buf, "%pI6\n", pgid->raw);
+       ret = sprintf(buf, "%pI6\n", gid_attr->gid.raw);
+       rdma_put_gid_attr(gid_attr);
+       return ret;
 }
 
 static ssize_t show_port_gid_attr_ndev(struct ib_port *p,