浏览代码

SUNRPC: rpc_execute should not return task->tk_status;

 Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Trond Myklebust 19 年之前
父节点
当前提交
e60859ac0e
共有 2 个文件被更改,包括 7 次插入8 次删除
  1. 6 5
      net/sunrpc/clnt.c
  2. 1 3
      net/sunrpc/sched.c

+ 6 - 5
net/sunrpc/clnt.c

@@ -446,14 +446,15 @@ int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, int flags)
 	rpc_call_setup(task, msg, 0);
 
 	/* Set up the call info struct and execute the task */
-	if (task->tk_status == 0) {
+	status = task->tk_status;
+	if (status == 0) {
+		atomic_inc(&task->tk_count);
 		status = rpc_execute(task);
-	} else {
-		status = task->tk_status;
-		rpc_release_task(task);
+		if (status == 0)
+			status = task->tk_status;
 	}
-
 	rpc_restore_sigmask(&oldset);
+	rpc_release_task(task);
 out:
 	return status;
 }

+ 1 - 3
net/sunrpc/sched.c

@@ -694,9 +694,7 @@ static int __rpc_execute(struct rpc_task *task)
 		dprintk("RPC: %4d sync task resuming\n", task->tk_pid);
 	}
 
-	dprintk("RPC: %4d exit() = %d\n", task->tk_pid, task->tk_status);
-	status = task->tk_status;
-
+	dprintk("RPC: %4d, return %d, status %d\n", task->tk_pid, status, task->tk_status);
 	/* Wake up anyone who is waiting for task completion */
 	rpc_mark_complete_task(task);
 	/* Release all resources associated with the task */