Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d9266ff authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Initalise the struct xprt upon allocation

parent 43cedbf0
Loading
Loading
Loading
Loading
+37 −30
Original line number Original line Diff line number Diff line
@@ -1091,38 +1091,9 @@ void xprt_release(struct rpc_task *task)
		xprt_free_bc_request(req);
		xprt_free_bc_request(req);
}
}


/**
static void xprt_init(struct rpc_xprt *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 rpc_rqst	*req;
	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->transport_lock);
	spin_lock_init(&xprt->reserve_lock);
	spin_lock_init(&xprt->reserve_lock);
@@ -1156,6 +1127,42 @@ found:


	xprt_init_xid(xprt);
	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,
	dprintk("RPC:       created transport %p with %u slots\n", xprt,
			xprt->max_reqs);
			xprt->max_reqs);
	return xprt;
	return xprt;