xprtrdma: Eliminate struct rpcrdma_create_data_internal
authorChuck Lever <chuck.lever@oracle.com>
Wed, 24 Apr 2019 13:40:25 +0000 (09:40 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 25 Apr 2019 19:39:40 +0000 (15:39 -0400)
Clean up.

Move the remaining field in rpcrdma_create_data_internal so the
structure can be removed.

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

index 7cd27184ecd10abe5d6208244244bb4f00dcd1e2..1d369b65e845daf3c8ace377529d416d35ae062f 100644 (file)
@@ -194,12 +194,11 @@ out_list_err:
  * frwr_open - Prepare an endpoint for use with FRWR
  * @ia: interface adapter this endpoint will use
  * @ep: endpoint to prepare
- * @cdata: transport parameters
  *
  * On success, sets:
  *     ep->rep_attr.cap.max_send_wr
  *     ep->rep_attr.cap.max_recv_wr
- *     cdata->max_requests
+ *     ep->rep_max_requests
  *     ia->ri_max_segs
  *
  * And these FRWR-related fields:
@@ -208,8 +207,7 @@ out_list_err:
  *
  * On failure, a negative errno is returned.
  */
-int frwr_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
-             struct rpcrdma_create_data_internal *cdata)
+int frwr_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep)
 {
        struct ib_device_attr *attrs = &ia->ri_id->device->attrs;
        int max_qp_wr, depth, delta;
@@ -258,19 +256,18 @@ int frwr_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
        max_qp_wr -= 1;
        if (max_qp_wr < RPCRDMA_MIN_SLOT_TABLE)
                return -ENOMEM;
-       if (cdata->max_requests > max_qp_wr)
-               cdata->max_requests = max_qp_wr;
-       ep->rep_attr.cap.max_send_wr = cdata->max_requests * depth;
+       if (ep->rep_max_requests > max_qp_wr)
+               ep->rep_max_requests = max_qp_wr;
+       ep->rep_attr.cap.max_send_wr = ep->rep_max_requests * depth;
        if (ep->rep_attr.cap.max_send_wr > max_qp_wr) {
-               cdata->max_requests = max_qp_wr / depth;
-               if (!cdata->max_requests)
+               ep->rep_max_requests = max_qp_wr / depth;
+               if (!ep->rep_max_requests)
                        return -EINVAL;
-               ep->rep_attr.cap.max_send_wr = cdata->max_requests *
-                                              depth;
+               ep->rep_attr.cap.max_send_wr = ep->rep_max_requests * depth;
        }
        ep->rep_attr.cap.max_send_wr += RPCRDMA_BACKWARD_WRS;
        ep->rep_attr.cap.max_send_wr += 1; /* for ib_drain_sq */
-       ep->rep_attr.cap.max_recv_wr = cdata->max_requests;
+       ep->rep_attr.cap.max_recv_wr = ep->rep_max_requests;
        ep->rep_attr.cap.max_recv_wr += RPCRDMA_BACKWARD_WRS;
        ep->rep_attr.cap.max_recv_wr += 1; /* for ib_drain_rq */
 
index b37a3e0f67283eb1458e49b28cff168fecc88293..1f73a6a7e43c248d795f162239891c5ad4549ebb 100644 (file)
@@ -68,7 +68,7 @@
  * tunables
  */
 
-static unsigned int xprt_rdma_slot_table_entries = RPCRDMA_DEF_SLOT_TABLE;
+unsigned int xprt_rdma_slot_table_entries = RPCRDMA_DEF_SLOT_TABLE;
 unsigned int xprt_rdma_max_inline_read = RPCRDMA_DEF_INLINE;
 unsigned int xprt_rdma_max_inline_write = RPCRDMA_DEF_INLINE;
 unsigned int xprt_rdma_memreg_strategy         = RPCRDMA_FRWR;
@@ -288,7 +288,7 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
 
        cancel_delayed_work_sync(&r_xprt->rx_connect_worker);
 
-       rpcrdma_ep_destroy(&r_xprt->rx_ep, &r_xprt->rx_ia);
+       rpcrdma_ep_destroy(r_xprt);
        rpcrdma_buffer_destroy(&r_xprt->rx_buf);
        rpcrdma_ia_close(&r_xprt->rx_ia);
 
@@ -311,10 +311,8 @@ static const struct rpc_timeout xprt_rdma_default_timeout = {
 static struct rpc_xprt *
 xprt_setup_rdma(struct xprt_create *args)
 {
-       struct rpcrdma_create_data_internal cdata;
        struct rpc_xprt *xprt;
        struct rpcrdma_xprt *new_xprt;
-       struct rpcrdma_ep *new_ep;
        struct sockaddr *sap;
        int rc;
 
@@ -349,29 +347,12 @@ xprt_setup_rdma(struct xprt_create *args)
                xprt_set_bound(xprt);
        xprt_rdma_format_addresses(xprt, sap);
 
-       cdata.max_requests = xprt_rdma_slot_table_entries;
-
-       /*
-        * Create new transport instance, which includes initialized
-        *  o ia
-        *  o endpoint
-        *  o buffers
-        */
-
        new_xprt = rpcx_to_rdmax(xprt);
-
        rc = rpcrdma_ia_open(new_xprt);
        if (rc)
                goto out1;
 
-       /*
-        * initialize and create ep
-        */
-       new_xprt->rx_data = cdata;
-       new_ep = &new_xprt->rx_ep;
-
-       rc = rpcrdma_ep_create(&new_xprt->rx_ep,
-                               &new_xprt->rx_ia, &new_xprt->rx_data);
+       rc = rpcrdma_ep_create(new_xprt);
        if (rc)
                goto out2;
 
@@ -402,7 +383,7 @@ out4:
        rpcrdma_buffer_destroy(&new_xprt->rx_buf);
        rc = -ENODEV;
 out3:
-       rpcrdma_ep_destroy(new_ep, &new_xprt->rx_ia);
+       rpcrdma_ep_destroy(new_xprt);
 out2:
        rpcrdma_ia_close(&new_xprt->rx_ia);
 out1:
index 9e24ca502430d7b4617e676e429977172be41d21..0d0c3356f34eadd5ff3ed5a9fa9acfb36e1e365c 100644 (file)
@@ -476,18 +476,22 @@ rpcrdma_ia_close(struct rpcrdma_ia *ia)
        ia->ri_pd = NULL;
 }
 
-/*
- * Create unconnected endpoint.
+/**
+ * rpcrdma_ep_create - Create unconnected endpoint
+ * @r_xprt: transport to instantiate
+ *
+ * Returns zero on success, or a negative errno.
  */
-int
-rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
-                 struct rpcrdma_create_data_internal *cdata)
+int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt)
 {
+       struct rpcrdma_ep *ep = &r_xprt->rx_ep;
+       struct rpcrdma_ia *ia = &r_xprt->rx_ia;
        struct rpcrdma_connect_private *pmsg = &ep->rep_cm_private;
        struct ib_cq *sendcq, *recvcq;
        unsigned int max_sge;
        int rc;
 
+       ep->rep_max_requests = xprt_rdma_slot_table_entries;
        ep->rep_inline_send = xprt_rdma_max_inline_write;
        ep->rep_inline_recv = xprt_rdma_max_inline_read;
 
@@ -499,7 +503,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
        }
        ia->ri_max_send_sges = max_sge;
 
-       rc = frwr_open(ia, ep, cdata);
+       rc = frwr_open(ia, ep);
        if (rc)
                return rc;
 
@@ -521,7 +525,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
                ep->rep_attr.cap.max_send_sge,
                ep->rep_attr.cap.max_recv_sge);
 
-       ep->rep_send_batch = cdata->max_requests >> 3;
+       ep->rep_send_batch = ep->rep_max_requests >> 3;
        ep->rep_send_count = ep->rep_send_batch;
        init_waitqueue_head(&ep->rep_connect_wait);
        ep->rep_receive_count = 0;
@@ -584,16 +588,16 @@ out1:
        return rc;
 }
 
-/*
- * rpcrdma_ep_destroy
+/**
+ * rpcrdma_ep_destroy - Disconnect and destroy endpoint.
+ * @r_xprt: transport instance to shut down
  *
- * Disconnect and destroy endpoint. After this, the only
- * valid operations on the ep are to free it (if dynamically
- * allocated) or re-create it.
  */
-void
-rpcrdma_ep_destroy(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia)
+void rpcrdma_ep_destroy(struct rpcrdma_xprt *r_xprt)
 {
+       struct rpcrdma_ep *ep = &r_xprt->rx_ep;
+       struct rpcrdma_ia *ia = &r_xprt->rx_ia;
+
        if (ia->ri_id && ia->ri_id->qp) {
                rpcrdma_ep_disconnect(ep, ia);
                rdma_destroy_qp(ia->ri_id);
@@ -623,7 +627,7 @@ rpcrdma_ep_recreate_xprt(struct rpcrdma_xprt *r_xprt,
                goto out1;
 
        rc = -ENOMEM;
-       err = rpcrdma_ep_create(ep, ia, &r_xprt->rx_data);
+       err = rpcrdma_ep_create(r_xprt);
        if (err) {
                pr_err("rpcrdma: rpcrdma_ep_create returned %d\n", err);
                goto out2;
@@ -640,7 +644,7 @@ rpcrdma_ep_recreate_xprt(struct rpcrdma_xprt *r_xprt,
        return 0;
 
 out3:
-       rpcrdma_ep_destroy(ep, ia);
+       rpcrdma_ep_destroy(r_xprt);
 out2:
        rpcrdma_ia_close(ia);
 out1:
@@ -1082,14 +1086,19 @@ out:
        return false;
 }
 
-int
-rpcrdma_buffer_create(struct rpcrdma_xprt *r_xprt)
+/**
+ * rpcrdma_buffer_create - Create initial set of req/rep objects
+ * @r_xprt: transport instance to (re)initialize
+ *
+ * Returns zero on success, otherwise a negative errno.
+ */
+int rpcrdma_buffer_create(struct rpcrdma_xprt *r_xprt)
 {
        struct rpcrdma_buffer *buf = &r_xprt->rx_buf;
        int i, rc;
 
        buf->rb_flags = 0;
-       buf->rb_max_requests = r_xprt->rx_data.max_requests;
+       buf->rb_max_requests = r_xprt->rx_ep.rep_max_requests;
        buf->rb_bc_srv_max_requests = 0;
        spin_lock_init(&buf->rb_mrlock);
        spin_lock_init(&buf->rb_lock);
index edf602afb08a99a312ddf054eb073eda8adda4f4..9e98ee0cd9372a489c5d335b25427b7418b47689 100644 (file)
@@ -97,6 +97,7 @@ struct rpcrdma_ep {
        wait_queue_head_t       rep_connect_wait;
        struct rpcrdma_connect_private  rep_cm_private;
        struct rdma_conn_param  rep_remote_cma;
+       unsigned int            rep_max_requests;       /* set by /proc */
        unsigned int            rep_inline_send;        /* negotiated */
        unsigned int            rep_inline_recv;        /* negotiated */
        int                     rep_receive_count;
@@ -413,16 +414,6 @@ enum {
        RPCRDMA_BUF_F_EMPTY_SCQ = 0,
 };
 
-/*
- * Internal structure for transport instance creation. This
- * exists primarily for modularity.
- *
- * This data should be set with mount options
- */
-struct rpcrdma_create_data_internal {
-       unsigned int    max_requests;   /* max requests (slots) in flight */
-};
-
 /*
  * Statistics for RPCRDMA
  */
@@ -467,13 +458,11 @@ struct rpcrdma_xprt {
        struct rpcrdma_ia       rx_ia;
        struct rpcrdma_ep       rx_ep;
        struct rpcrdma_buffer   rx_buf;
-       struct rpcrdma_create_data_internal rx_data;
        struct delayed_work     rx_connect_worker;
        struct rpcrdma_stats    rx_stats;
 };
 
 #define rpcx_to_rdmax(x) container_of(x, struct rpcrdma_xprt, rx_xprt)
-#define rpcx_to_rdmad(x) (rpcx_to_rdmax(x)->rx_data)
 
 static inline const char *
 rpcrdma_addrstr(const struct rpcrdma_xprt *r_xprt)
@@ -507,9 +496,8 @@ void rpcrdma_ia_close(struct rpcrdma_ia *);
 /*
  * Endpoint calls - xprtrdma/verbs.c
  */
-int rpcrdma_ep_create(struct rpcrdma_ep *, struct rpcrdma_ia *,
-                               struct rpcrdma_create_data_internal *);
-void rpcrdma_ep_destroy(struct rpcrdma_ep *, struct rpcrdma_ia *);
+int rpcrdma_ep_create(struct rpcrdma_xprt *r_xprt);
+void rpcrdma_ep_destroy(struct rpcrdma_xprt *r_xprt);
 int rpcrdma_ep_connect(struct rpcrdma_ep *, struct rpcrdma_ia *);
 void rpcrdma_ep_disconnect(struct rpcrdma_ep *, struct rpcrdma_ia *);
 
@@ -583,8 +571,7 @@ rpcrdma_data_dir(bool writing)
 /* Memory registration calls xprtrdma/frwr_ops.c
  */
 bool frwr_is_supported(struct ib_device *device);
-int frwr_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep,
-             struct rpcrdma_create_data_internal *cdata);
+int frwr_open(struct rpcrdma_ia *ia, struct rpcrdma_ep *ep);
 int frwr_init_mr(struct rpcrdma_ia *ia, struct rpcrdma_mr *mr);
 void frwr_release_mr(struct rpcrdma_mr *mr);
 size_t frwr_maxpages(struct rpcrdma_xprt *r_xprt);
@@ -630,6 +617,7 @@ static inline void rpcrdma_set_xdrlen(struct xdr_buf *xdr, size_t len)
 
 /* RPC/RDMA module init - xprtrdma/transport.c
  */
+extern unsigned int xprt_rdma_slot_table_entries;
 extern unsigned int xprt_rdma_max_inline_read;
 extern unsigned int xprt_rdma_max_inline_write;
 void xprt_rdma_format_addresses(struct rpc_xprt *xprt, struct sockaddr *sap);