OSDN Git Service

SUNRPC: Split the xdr_buf event class
[tomoyo/tomoyo-test1.git] / net / sunrpc / clnt.c
index 8350d3a..0e684d9 100644 (file)
@@ -889,7 +889,9 @@ static void rpc_free_client_work(struct work_struct *work)
         * here.
         */
        rpc_clnt_debugfs_unregister(clnt);
+       rpc_free_clid(clnt);
        rpc_clnt_remove_pipedir(clnt);
+       xprt_put(rcu_dereference_raw(clnt->cl_xprt));
 
        kfree(clnt);
        rpciod_down();
@@ -907,10 +909,8 @@ rpc_free_client(struct rpc_clnt *clnt)
        rpc_unregister_client(clnt);
        rpc_free_iostats(clnt->cl_metrics);
        clnt->cl_metrics = NULL;
-       xprt_put(rcu_dereference_raw(clnt->cl_xprt));
        xprt_iter_destroy(&clnt->cl_xpi);
        put_cred(clnt->cl_cred);
-       rpc_free_clid(clnt);
 
        INIT_WORK(&clnt->cl_work, rpc_free_client_work);
        schedule_work(&clnt->cl_work);
@@ -1270,7 +1270,7 @@ void rpc_prepare_reply_pages(struct rpc_rqst *req, struct page **pages,
        hdrsize += RPC_REPHDRSIZE + req->rq_cred->cr_auth->au_ralign - 1;
 
        xdr_inline_pages(&req->rq_rcv_buf, hdrsize << 2, pages, base, len);
-       trace_rpc_reply_pages(req);
+       trace_rpc_xdr_reply_pages(req->rq_task, &req->rq_rcv_buf);
 }
 EXPORT_SYMBOL_GPL(rpc_prepare_reply_pages);
 
@@ -1624,6 +1624,7 @@ const char
 static void
 __rpc_call_rpcerror(struct rpc_task *task, int tk_status, int rpc_status)
 {
+       trace_rpc_call_rpcerror(task, tk_status, rpc_status);
        task->tk_rpc_status = rpc_status;
        rpc_exit(task, tk_status);
 }
@@ -2433,6 +2434,11 @@ rpc_check_timeout(struct rpc_task *task)
 {
        struct rpc_clnt *clnt = task->tk_client;
 
+       if (RPC_SIGNALLED(task)) {
+               rpc_call_rpcerror(task, -ERESTARTSYS);
+               return;
+       }
+
        if (xprt_adjust_timeout(task->tk_rqstp) == 0)
                return;
 
@@ -2526,7 +2532,7 @@ call_decode(struct rpc_task *task)
                goto out;
 
        req->rq_rcv_buf.len = req->rq_private_buf.len;
-       trace_xprt_recvfrom(&req->rq_rcv_buf);
+       trace_rpc_xdr_recvfrom(task, &req->rq_rcv_buf);
 
        /* Check that the softirq receive buffer is valid */
        WARN_ON(memcmp(&req->rq_rcv_buf, &req->rq_private_buf,