Whamcloud - gitweb
LU-17867 ko2iblnd: gcc bug work around 72/55172/4
authorJames Simmons <jsimmons@infradead.org>
Wed, 22 May 2024 14:53:24 +0000 (10:53 -0400)
committerAndreas Dilger <adilger@whamcloud.com>
Tue, 28 May 2024 12:56:06 +0000 (12:56 +0000)
Gcc 11 reports
 error: array subscript 'struct sockaddr_in6[0]' is partly
 outside array bounds of 'struct sockaddr[1]'

due to a bug in gcc that it becomes confused with the union.
To work around this we move to struct sockaddr_storage from
struct sockaddr.

Test-Parameters: trivial
Change-Id: I586042d6e3c59be8c63e2821659cf9d3bcdac8e3
Signed-off-by: James Simmons <jsimmons@infradead.org>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55172
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Reviewed-by: Shaun Tancheff <shaun.tancheff@hpe.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lnet/klnds/o2iblnd/o2iblnd_cb.c

index c310eba..6ad06f8 100644 (file)
@@ -1455,8 +1455,8 @@ kiblnd_connect_peer(struct kib_peer_ni *peer_ni)
 {
         struct rdma_cm_id *cmid;
        struct kib_net *net = peer_ni->ibp_ni->ni_data;
-       struct sockaddr srcaddr;
-       struct sockaddr dstaddr;
+       struct sockaddr_storage srcaddr;
+       struct sockaddr_storage dstaddr;
        int rc;
 
         LASSERT (net != NULL);
@@ -1506,10 +1506,12 @@ kiblnd_connect_peer(struct kib_peer_ni *peer_ni)
         kiblnd_peer_addref(peer_ni);               /* cmid's ref */
 
        if (*kiblnd_tunables.kib_use_priv_port) {
-               rc = kiblnd_resolve_addr(cmid, &srcaddr, &dstaddr,
+               rc = kiblnd_resolve_addr(cmid, (struct sockaddr *)&srcaddr,
+                                        (struct sockaddr *)&dstaddr,
                                         kiblnd_timeout() * 1000);
        } else {
-               rc = rdma_resolve_addr(cmid, &srcaddr, &dstaddr,
+               rc = rdma_resolve_addr(cmid, (struct sockaddr *)&srcaddr,
+                                      (struct sockaddr *)&dstaddr,
                                       kiblnd_timeout() * 1000);
        }
        if (rc != 0) {