diff options
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/svc_xprt.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c index dd61cd02461f..8c018df80692 100644 --- a/net/sunrpc/svc_xprt.c +++ b/net/sunrpc/svc_xprt.c | |||
@@ -941,16 +941,16 @@ void svc_close_all(struct list_head *xprt_list) | |||
941 | struct svc_xprt *xprt; | 941 | struct svc_xprt *xprt; |
942 | struct svc_xprt *tmp; | 942 | struct svc_xprt *tmp; |
943 | 943 | ||
944 | /* | ||
945 | * The server is shutting down, and no more threads are running. | ||
946 | * svc_xprt_enqueue() might still be running, but at worst it | ||
947 | * will re-add the xprt to sp_sockets, which will soon get | ||
948 | * freed. So we don't bother with any more locking, and don't | ||
949 | * leave the close to the (nonexistent) server threads: | ||
950 | */ | ||
944 | list_for_each_entry_safe(xprt, tmp, xprt_list, xpt_list) { | 951 | list_for_each_entry_safe(xprt, tmp, xprt_list, xpt_list) { |
945 | set_bit(XPT_CLOSE, &xprt->xpt_flags); | 952 | set_bit(XPT_CLOSE, &xprt->xpt_flags); |
946 | if (test_bit(XPT_BUSY, &xprt->xpt_flags)) { | 953 | svc_delete_xprt(xprt); |
947 | /* Waiting to be processed, but no threads left, | ||
948 | * So just remove it from the waiting list | ||
949 | */ | ||
950 | list_del_init(&xprt->xpt_ready); | ||
951 | clear_bit(XPT_BUSY, &xprt->xpt_flags); | ||
952 | } | ||
953 | svc_close_xprt(xprt); | ||
954 | } | 954 | } |
955 | } | 955 | } |
956 | 956 | ||