]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/sunrpc/xprt.c
SUNRPC: prevent task_cleanup running on freed xprt
[net-next-2.6.git] / net / sunrpc / xprt.c
index dcd0132396ba37ad231d23f6af1cc63047fa3d62..970fb00f388ce532d7f0a4e3c7285f98e57af2f5 100644 (file)
@@ -1032,6 +1032,8 @@ void xprt_release(struct rpc_task *task)
        spin_unlock_bh(&xprt->transport_lock);
        if (req->rq_buffer)
                xprt->ops->buf_free(req->rq_buffer);
+       if (req->rq_cred != NULL)
+               put_rpccred(req->rq_cred);
        task->tk_rqstp = NULL;
        if (req->rq_release_snd_buf)
                req->rq_release_snd_buf(req);
@@ -1129,6 +1131,7 @@ static void xprt_destroy(struct kref *kref)
        rpc_destroy_wait_queue(&xprt->sending);
        rpc_destroy_wait_queue(&xprt->resend);
        rpc_destroy_wait_queue(&xprt->backlog);
+       cancel_work_sync(&xprt->task_cleanup);
        /*
         * Tear down transport state and free the rpc_xprt
         */