xprtrdma: Remove another sockaddr_storage field (cdata::addr)
authorChuck Lever <chuck.lever@oracle.com>
Fri, 15 Dec 2017 01:56:58 +0000 (20:56 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 16 Jan 2018 16:19:45 +0000 (11:19 -0500)
Save more space in struct rpcrdma_xprt by removing the redundant
"addr" field from struct rpcrdma_create_data_internal. Wherever
we have rpcrdma_xprt, we also have the rpc_xprt, which has a
sockaddr_storage field with the same content.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h

index f6d171e15d7db18a33f8c8e8066ee00c828026d8..8ba0aa8c566f98b845beb9c4150e1bde93324bca 100644 (file)
@@ -361,9 +361,7 @@ xprt_setup_rdma(struct xprt_create *args)
        /*
         * Set up RDMA-specific connect data.
         */
-
-       sap = (struct sockaddr *)&cdata.addr;
-       memcpy(sap, args->dstaddr, args->addrlen);
+       sap = args->dstaddr;
 
        /* Ensure xprt->addr holds valid server TCP (not RDMA)
         * address, for any side protocols which peek at it */
@@ -397,7 +395,7 @@ xprt_setup_rdma(struct xprt_create *args)
 
        new_xprt = rpcx_to_rdmax(xprt);
 
-       rc = rpcrdma_ia_open(new_xprt, sap);
+       rc = rpcrdma_ia_open(new_xprt);
        if (rc)
                goto out1;
 
@@ -483,8 +481,6 @@ xprt_rdma_set_port(struct rpc_xprt *xprt, u16 port)
 
        sap = (struct sockaddr_in *)&xprt->addr;
        sap->sin_port = htons(port);
-       sap = (struct sockaddr_in *)&rpcx_to_rdmad(xprt).addr;
-       sap->sin_port = htons(port);
        dprintk("RPC:       %s: %u\n", __func__, port);
 }
 
index 0b4d6a3f6d023c7ac71486b2adbaebb8dd0ff11d..d6c737d4c36b4f0b99294d34ec9d28558a7f0353 100644 (file)
@@ -294,8 +294,7 @@ connected:
 }
 
 static struct rdma_cm_id *
-rpcrdma_create_id(struct rpcrdma_xprt *xprt,
-                       struct rpcrdma_ia *ia, struct sockaddr *addr)
+rpcrdma_create_id(struct rpcrdma_xprt *xprt, struct rpcrdma_ia *ia)
 {
        unsigned long wtimeout = msecs_to_jiffies(RDMA_RESOLVE_TIMEOUT) + 1;
        struct rdma_cm_id *id;
@@ -314,7 +313,9 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
        }
 
        ia->ri_async_rc = -ETIMEDOUT;
-       rc = rdma_resolve_addr(id, NULL, addr, RDMA_RESOLVE_TIMEOUT);
+       rc = rdma_resolve_addr(id, NULL,
+                              (struct sockaddr *)&xprt->rx_xprt.addr,
+                              RDMA_RESOLVE_TIMEOUT);
        if (rc) {
                dprintk("RPC:       %s: rdma_resolve_addr() failed %i\n",
                        __func__, rc);
@@ -361,19 +362,18 @@ out:
 
 /**
  * rpcrdma_ia_open - Open and initialize an Interface Adapter.
- * @xprt: controlling transport
- * @addr: IP address of remote peer
+ * @xprt: transport with IA to (re)initialize
  *
  * Returns 0 on success, negative errno if an appropriate
  * Interface Adapter could not be found and opened.
  */
 int
-rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr)
+rpcrdma_ia_open(struct rpcrdma_xprt *xprt)
 {
        struct rpcrdma_ia *ia = &xprt->rx_ia;
        int rc;
 
-       ia->ri_id = rpcrdma_create_id(xprt, ia, addr);
+       ia->ri_id = rpcrdma_create_id(xprt, ia);
        if (IS_ERR(ia->ri_id)) {
                rc = PTR_ERR(ia->ri_id);
                goto out_err;
@@ -649,13 +649,12 @@ static int
 rpcrdma_ep_recreate_xprt(struct rpcrdma_xprt *r_xprt,
                         struct rpcrdma_ep *ep, struct rpcrdma_ia *ia)
 {
-       struct sockaddr *sap = (struct sockaddr *)&r_xprt->rx_data.addr;
        int rc, err;
 
        pr_info("%s: r_xprt = %p\n", __func__, r_xprt);
 
        rc = -EHOSTUNREACH;
-       if (rpcrdma_ia_open(r_xprt, sap))
+       if (rpcrdma_ia_open(r_xprt))
                goto out1;
 
        rc = -ENOMEM;
@@ -687,7 +686,6 @@ static int
 rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep,
                     struct rpcrdma_ia *ia)
 {
-       struct sockaddr *sap = (struct sockaddr *)&r_xprt->rx_data.addr;
        struct rdma_cm_id *id, *old;
        int err, rc;
 
@@ -696,7 +694,7 @@ rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep,
        rpcrdma_ep_disconnect(ep, ia);
 
        rc = -EHOSTUNREACH;
-       id = rpcrdma_create_id(r_xprt, ia, sap);
+       id = rpcrdma_create_id(r_xprt, ia);
        if (IS_ERR(id))
                goto out;
 
index 0b28026e150236718fa8b2342ca75e0ea3bfafee..7c09e2ae25423d923d9d6bc27e4c669968d8880f 100644 (file)
@@ -430,7 +430,6 @@ struct rpcrdma_buffer {
  * This data should be set with mount options
  */
 struct rpcrdma_create_data_internal {
-       struct sockaddr_storage addr;   /* RDMA server address */
        unsigned int    max_requests;   /* max requests (slots) in flight */
        unsigned int    rsize;          /* mount rsize - max read hdr+data */
        unsigned int    wsize;          /* mount wsize - max write hdr+data */
@@ -543,7 +542,7 @@ extern unsigned int xprt_rdma_memreg_strategy;
 /*
  * Interface Adapter calls - xprtrdma/verbs.c
  */
-int rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr);
+int rpcrdma_ia_open(struct rpcrdma_xprt *xprt);
 void rpcrdma_ia_remove(struct rpcrdma_ia *ia);
 void rpcrdma_ia_close(struct rpcrdma_ia *);
 bool frwr_is_supported(struct rpcrdma_ia *);