]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/sunrpc/clnt.c
Merge branch 'usb-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[mv-sheeva.git] / net / sunrpc / clnt.c
index 57d344cf2256b84af606ff42582c400b3736f00f..e7a96e478f63a74da8e90e0f80748857f5c18fb0 100644 (file)
@@ -436,7 +436,9 @@ void rpc_killall_tasks(struct rpc_clnt *clnt)
                if (!(rovr->tk_flags & RPC_TASK_KILLED)) {
                        rovr->tk_flags |= RPC_TASK_KILLED;
                        rpc_exit(rovr, -EIO);
-                       rpc_wake_up_queued_task(rovr->tk_waitqueue, rovr);
+                       if (RPC_IS_QUEUED(rovr))
+                               rpc_wake_up_queued_task(rovr->tk_waitqueue,
+                                                       rovr);
                }
        }
        spin_unlock(&clnt->cl_lock);
@@ -597,6 +599,14 @@ void rpc_task_set_client(struct rpc_task *task, struct rpc_clnt *clnt)
        }
 }
 
+void rpc_task_reset_client(struct rpc_task *task, struct rpc_clnt *clnt)
+{
+       rpc_task_release_client(task);
+       rpc_task_set_client(task, clnt);
+}
+EXPORT_SYMBOL_GPL(rpc_task_reset_client);
+
+
 static void
 rpc_task_set_rpc_message(struct rpc_task *task, const struct rpc_message *msg)
 {
@@ -636,12 +646,6 @@ struct rpc_task *rpc_run_task(const struct rpc_task_setup *task_setup_data)
        rpc_task_set_client(task, task_setup_data->rpc_client);
        rpc_task_set_rpc_message(task, task_setup_data->rpc_message);
 
-       if (task->tk_status != 0) {
-               int ret = task->tk_status;
-               rpc_put_task(task);
-               return ERR_PTR(ret);
-       }
-
        if (task->tk_action == NULL)
                rpc_call_start(task);