IB: directly cast the sockaddr union to aockaddr [Linux 4.9.189]

This Linux kernel change "IB: directly cast the sockaddr union to aockaddr" is included in the Linux 4.9.189 release. This change is authored by Greg Kroah-Hartman <gregkh [at] linuxfoundation.org> on Wed Aug 7 18:44:12 2019 +0200. The commit for this change in Linux stable tree is d41d78c (patch).

IB: directly cast the sockaddr union to aockaddr

Like commit 641114d2af31 ("RDMA: Directly cast the sockaddr union to
sockaddr") we need to quiet gcc 9 from warning about this crazy union.
That commit did not fix all of the warnings in 4.19 and older kernels
because the logic in roce_resolve_route_from_path() was rewritten
between 4.19 and 5.2 when that change happened.

Cc: Jason Gunthorpe <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

There are 10 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/infiniband/core/sa_query.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index 4baf3b8..5879a06 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -1109,7 +1109,6 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
                         .net = rec->net ? rec->net :
                             &init_net};
        union {
-           struct sockaddr     _sockaddr;
            struct sockaddr_in  _sockaddr_in;
            struct sockaddr_in6 _sockaddr_in6;
        } sgid_addr, dgid_addr;
@@ -1117,12 +1116,13 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
        if (!device->get_netdev)
            return -EOPNOTSUPP;

-       rdma_gid2ip(&sgid_addr._sockaddr, &rec->sgid);
-       rdma_gid2ip(&dgid_addr._sockaddr, &rec->dgid);
+       rdma_gid2ip((struct sockaddr *)&sgid_addr, &rec->sgid);
+       rdma_gid2ip((struct sockaddr *)&dgid_addr, &rec->dgid);

        /* validate the route */
-       ret = rdma_resolve_ip_route(&sgid_addr._sockaddr,
-                       &dgid_addr._sockaddr, &dev_addr);
+       ret = rdma_resolve_ip_route((struct sockaddr *)&sgid_addr,
+                       (struct sockaddr *)&dgid_addr,
+                       &dev_addr);
        if (ret)
            return ret;

Leave a Reply

Your email address will not be published. Required fields are marked *