SUNRPC: Fix an RCU dereference in xprt_reserve
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
+4
-1
@@ -1093,7 +1093,7 @@ EXPORT_SYMBOL_GPL(xprt_free);
|
|||||||
*/
|
*/
|
||||||
void xprt_reserve(struct rpc_task *task)
|
void xprt_reserve(struct rpc_task *task)
|
||||||
{
|
{
|
||||||
struct rpc_xprt *xprt = task->tk_xprt;
|
struct rpc_xprt *xprt;
|
||||||
|
|
||||||
task->tk_status = 0;
|
task->tk_status = 0;
|
||||||
if (task->tk_rqstp != NULL)
|
if (task->tk_rqstp != NULL)
|
||||||
@@ -1101,7 +1101,10 @@ void xprt_reserve(struct rpc_task *task)
|
|||||||
|
|
||||||
task->tk_timeout = 0;
|
task->tk_timeout = 0;
|
||||||
task->tk_status = -EAGAIN;
|
task->tk_status = -EAGAIN;
|
||||||
|
rcu_read_lock();
|
||||||
|
xprt = rcu_dereference(task->tk_client->cl_xprt);
|
||||||
xprt->ops->alloc_slot(xprt, task);
|
xprt->ops->alloc_slot(xprt, task);
|
||||||
|
rcu_read_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt)
|
static inline __be32 xprt_alloc_xid(struct rpc_xprt *xprt)
|
||||||
|
|||||||
Reference in New Issue
Block a user