diff options
Diffstat (limited to 'net/sunrpc/clnt.c')
-rw-r--r-- | net/sunrpc/clnt.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index fb65249538d4..34662dfa9cc0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -249,8 +249,6 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args) | |||
249 | clnt->cl_intr = 1; | 249 | clnt->cl_intr = 1; |
250 | if (args->flags & RPC_CLNT_CREATE_AUTOBIND) | 250 | if (args->flags & RPC_CLNT_CREATE_AUTOBIND) |
251 | clnt->cl_autobind = 1; | 251 | clnt->cl_autobind = 1; |
252 | if (args->flags & RPC_CLNT_CREATE_ONESHOT) | ||
253 | clnt->cl_oneshot = 1; | ||
254 | if (args->flags & RPC_CLNT_CREATE_DISCRTRY) | 252 | if (args->flags & RPC_CLNT_CREATE_DISCRTRY) |
255 | clnt->cl_discrtry = 1; | 253 | clnt->cl_discrtry = 1; |
256 | 254 | ||
@@ -285,7 +283,6 @@ rpc_clone_client(struct rpc_clnt *clnt) | |||
285 | new->cl_xprt = xprt_get(clnt->cl_xprt); | 283 | new->cl_xprt = xprt_get(clnt->cl_xprt); |
286 | /* Turn off autobind on clones */ | 284 | /* Turn off autobind on clones */ |
287 | new->cl_autobind = 0; | 285 | new->cl_autobind = 0; |
288 | new->cl_oneshot = 0; | ||
289 | INIT_LIST_HEAD(&new->cl_tasks); | 286 | INIT_LIST_HEAD(&new->cl_tasks); |
290 | spin_lock_init(&new->cl_lock); | 287 | spin_lock_init(&new->cl_lock); |
291 | rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval); | 288 | rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval); |
@@ -304,8 +301,7 @@ out_no_clnt: | |||
304 | 301 | ||
305 | /* | 302 | /* |
306 | * Properly shut down an RPC client, terminating all outstanding | 303 | * Properly shut down an RPC client, terminating all outstanding |
307 | * requests. Note that we must be certain that cl_oneshot is cleared, | 304 | * requests. |
308 | * or else the client would be destroyed when the last task releases it. | ||
309 | */ | 305 | */ |
310 | int | 306 | int |
311 | rpc_shutdown_client(struct rpc_clnt *clnt) | 307 | rpc_shutdown_client(struct rpc_clnt *clnt) |
@@ -314,8 +310,6 @@ rpc_shutdown_client(struct rpc_clnt *clnt) | |||
314 | clnt->cl_protname, clnt->cl_server); | 310 | clnt->cl_protname, clnt->cl_server); |
315 | 311 | ||
316 | while (!list_empty(&clnt->cl_tasks)) { | 312 | while (!list_empty(&clnt->cl_tasks)) { |
317 | /* Don't let rpc_release_client destroy us */ | ||
318 | clnt->cl_oneshot = 0; | ||
319 | rpc_killall_tasks(clnt); | 313 | rpc_killall_tasks(clnt); |
320 | wait_event_timeout(destroy_wait, | 314 | wait_event_timeout(destroy_wait, |
321 | list_empty(&clnt->cl_tasks), 1*HZ); | 315 | list_empty(&clnt->cl_tasks), 1*HZ); |
@@ -366,8 +360,6 @@ rpc_release_client(struct rpc_clnt *clnt) | |||
366 | 360 | ||
367 | if (list_empty(&clnt->cl_tasks)) | 361 | if (list_empty(&clnt->cl_tasks)) |
368 | wake_up(&destroy_wait); | 362 | wake_up(&destroy_wait); |
369 | if (clnt->cl_oneshot) | ||
370 | rpc_destroy_client(clnt); | ||
371 | kref_put(&clnt->cl_kref, rpc_free_client); | 363 | kref_put(&clnt->cl_kref, rpc_free_client); |
372 | } | 364 | } |
373 | 365 | ||