]> git.karo-electronics.de Git - linux-beck.git/commitdiff
SUNRPC: Initalise the struct xprt upon allocation
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Sun, 17 Jul 2011 20:01:09 +0000 (16:01 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sun, 17 Jul 2011 20:01:09 +0000 (16:01 -0400)
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/xprt.c

index ccd583a46ff62d27ad40c7a712b47887038d6e70..efb8dc5ab81b0736efe42ef4293969bcd408dbcb 100644 (file)
@@ -1091,38 +1091,9 @@ void xprt_release(struct rpc_task *task)
                xprt_free_bc_request(req);
 }
 
-/**
- * xprt_create_transport - create an RPC transport
- * @args: rpc transport creation arguments
- *
- */
-struct rpc_xprt *xprt_create_transport(struct xprt_create *args)
+static void xprt_init(struct rpc_xprt *xprt)
 {
-       struct rpc_xprt *xprt;
        struct rpc_rqst *req;
-       struct xprt_class *t;
-
-       spin_lock(&xprt_list_lock);
-       list_for_each_entry(t, &xprt_list, list) {
-               if (t->ident == args->ident) {
-                       spin_unlock(&xprt_list_lock);
-                       goto found;
-               }
-       }
-       spin_unlock(&xprt_list_lock);
-       printk(KERN_ERR "RPC: transport (%d) not supported\n", args->ident);
-       return ERR_PTR(-EIO);
-
-found:
-       xprt = t->setup(args);
-       if (IS_ERR(xprt)) {
-               dprintk("RPC:       xprt_create_transport: failed, %ld\n",
-                               -PTR_ERR(xprt));
-               return xprt;
-       }
-       if (test_and_set_bit(XPRT_INITIALIZED, &xprt->state))
-               /* ->setup returned a pre-initialized xprt: */
-               return xprt;
 
        spin_lock_init(&xprt->transport_lock);
        spin_lock_init(&xprt->reserve_lock);
@@ -1156,6 +1127,42 @@ found:
 
        xprt_init_xid(xprt);
 
+}
+
+/**
+ * xprt_create_transport - create an RPC transport
+ * @args: rpc transport creation arguments
+ *
+ */
+struct rpc_xprt *xprt_create_transport(struct xprt_create *args)
+{
+       struct rpc_xprt *xprt;
+       struct xprt_class *t;
+
+       spin_lock(&xprt_list_lock);
+       list_for_each_entry(t, &xprt_list, list) {
+               if (t->ident == args->ident) {
+                       spin_unlock(&xprt_list_lock);
+                       goto found;
+               }
+       }
+       spin_unlock(&xprt_list_lock);
+       printk(KERN_ERR "RPC: transport (%d) not supported\n", args->ident);
+       return ERR_PTR(-EIO);
+
+found:
+       xprt = t->setup(args);
+       if (IS_ERR(xprt)) {
+               dprintk("RPC:       xprt_create_transport: failed, %ld\n",
+                               -PTR_ERR(xprt));
+               return xprt;
+       }
+       if (test_and_set_bit(XPRT_INITIALIZED, &xprt->state))
+               /* ->setup returned a pre-initialized xprt: */
+               return xprt;
+
+       xprt_init(xprt);
+
        dprintk("RPC:       created transport %p with %u slots\n", xprt,
                        xprt->max_reqs);
        return xprt;