]> err.no Git - linux-2.6/blobdiff - net/sunrpc/xprtrdma/transport.c
SUNRPC: Add support for per-client timeout values
[linux-2.6] / net / sunrpc / xprtrdma / transport.c
index dc55cc974c906e78d974aa664bde940fe058637c..d1389afc8342270a5df2ff7cc2e3177a33f7ea7e 100644 (file)
@@ -89,7 +89,7 @@ static struct ctl_table_header *sunrpc_table_header;
 
 static ctl_table xr_tunables_table[] = {
        {
-               .ctl_name       = CTL_SLOTTABLE_RDMA,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_slot_table_entries",
                .data           = &xprt_rdma_slot_table_entries,
                .maxlen         = sizeof(unsigned int),
@@ -100,7 +100,7 @@ static ctl_table xr_tunables_table[] = {
                .extra2         = &max_slot_table_size
        },
        {
-               .ctl_name       = CTL_RDMA_MAXINLINEREAD,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_max_inline_read",
                .data           = &xprt_rdma_max_inline_read,
                .maxlen         = sizeof(unsigned int),
@@ -109,7 +109,7 @@ static ctl_table xr_tunables_table[] = {
                .strategy       = &sysctl_intvec,
        },
        {
-               .ctl_name       = CTL_RDMA_MAXINLINEWRITE,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_max_inline_write",
                .data           = &xprt_rdma_max_inline_write,
                .maxlen         = sizeof(unsigned int),
@@ -118,7 +118,7 @@ static ctl_table xr_tunables_table[] = {
                .strategy       = &sysctl_intvec,
        },
        {
-               .ctl_name       = CTL_RDMA_WRITEPADDING,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_inline_write_padding",
                .data           = &xprt_rdma_inline_write_padding,
                .maxlen         = sizeof(unsigned int),
@@ -129,7 +129,7 @@ static ctl_table xr_tunables_table[] = {
                .extra2         = &max_padding,
        },
        {
-               .ctl_name       = CTL_RDMA_MEMREG,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_memreg_strategy",
                .data           = &xprt_rdma_memreg_strategy,
                .maxlen         = sizeof(unsigned int),
@@ -289,6 +289,11 @@ xprt_rdma_destroy(struct rpc_xprt *xprt)
        module_put(THIS_MODULE);
 }
 
+static const struct rpc_timeout xprt_rdma_default_timeout = {
+       .to_initval = 60 * HZ,
+       .to_maxval = 60 * HZ,
+};
+
 /**
  * xprt_setup_rdma - Set up transport to use RDMA
  *
@@ -320,14 +325,14 @@ xprt_setup_rdma(struct xprt_create *args)
        xprt->slot = kcalloc(xprt->max_reqs,
                                sizeof(struct rpc_rqst), GFP_KERNEL);
        if (xprt->slot == NULL) {
-               kfree(xprt);
                dprintk("RPC:       %s: couldn't allocate %d slots\n",
                        __func__, xprt->max_reqs);
+               kfree(xprt);
                return ERR_PTR(-ENOMEM);
        }
 
        /* 60 second timeout, no retries */
-       xprt_set_timeout(&xprt->timeout, 0, 60UL * HZ);
+       xprt->timeout = &xprt_rdma_default_timeout;
        xprt->bind_timeout = (60U * HZ);
        xprt->connect_timeout = (60U * HZ);
        xprt->reestablish_timeout = (5U * HZ);
@@ -449,7 +454,7 @@ xprt_rdma_close(struct rpc_xprt *xprt)
        struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
 
        dprintk("RPC:       %s: closing\n", __func__);
-       xprt_disconnect(xprt);
+       xprt_disconnect_done(xprt);
        (void) rpcrdma_ep_disconnect(&r_xprt->rx_ep, &r_xprt->rx_ia);
 }
 
@@ -682,7 +687,7 @@ xprt_rdma_send_request(struct rpc_task *task)
        }
 
        if (rpcrdma_ep_post(&r_xprt->rx_ia, &r_xprt->rx_ep, req)) {
-               xprt_disconnect(xprt);
+               xprt_disconnect_done(xprt);
                return -ENOTCONN;       /* implies disconnect */
        }