| From 2fefb8a09e7ed251ae8996e0c69066e74c5aa560 Mon Sep 17 00:00:00 2001 |
| From: "J. Bruce Fields" <bfields@redhat.com> |
| Date: Tue, 29 Nov 2011 11:35:35 -0500 |
| Subject: svcrpc: destroy server sockets all at once |
| |
| From: "J. Bruce Fields" <bfields@redhat.com> |
| |
| commit 2fefb8a09e7ed251ae8996e0c69066e74c5aa560 upstream. |
| |
| There's no reason I can see that we need to call sv_shutdown between |
| closing the two lists of sockets. |
| |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| include/linux/sunrpc/svcsock.h | 2 +- |
| net/sunrpc/svc.c | 7 +------ |
| net/sunrpc/svc_xprt.c | 11 ++++++++++- |
| 3 files changed, 12 insertions(+), 8 deletions(-) |
| |
| --- a/include/linux/sunrpc/svcsock.h |
| +++ b/include/linux/sunrpc/svcsock.h |
| @@ -34,7 +34,7 @@ struct svc_sock { |
| /* |
| * Function prototypes. |
| */ |
| -void svc_close_all(struct list_head *); |
| +void svc_close_all(struct svc_serv *); |
| int svc_recv(struct svc_rqst *, long); |
| int svc_send(struct svc_rqst *); |
| void svc_drop(struct svc_rqst *); |
| --- a/net/sunrpc/svc.c |
| +++ b/net/sunrpc/svc.c |
| @@ -475,16 +475,11 @@ svc_destroy(struct svc_serv *serv) |
| |
| del_timer_sync(&serv->sv_temptimer); |
| |
| - svc_close_all(&serv->sv_tempsocks); |
| + svc_close_all(serv); |
| |
| if (serv->sv_shutdown) |
| serv->sv_shutdown(serv); |
| |
| - svc_close_all(&serv->sv_permsocks); |
| - |
| - BUG_ON(!list_empty(&serv->sv_permsocks)); |
| - BUG_ON(!list_empty(&serv->sv_tempsocks)); |
| - |
| cache_clean_deferred(serv); |
| |
| if (svc_serv_is_pooled(serv)) |
| --- a/net/sunrpc/svc_xprt.c |
| +++ b/net/sunrpc/svc_xprt.c |
| @@ -927,7 +927,7 @@ void svc_close_xprt(struct svc_xprt *xpr |
| } |
| EXPORT_SYMBOL_GPL(svc_close_xprt); |
| |
| -void svc_close_all(struct list_head *xprt_list) |
| +static void svc_close_list(struct list_head *xprt_list) |
| { |
| struct svc_xprt *xprt; |
| struct svc_xprt *tmp; |
| @@ -945,6 +945,15 @@ void svc_close_all(struct list_head *xpr |
| } |
| } |
| |
| +void svc_close_all(struct svc_serv *serv) |
| +{ |
| + svc_close_list(&serv->sv_tempsocks); |
| + svc_close_list(&serv->sv_permsocks); |
| + BUG_ON(!list_empty(&serv->sv_permsocks)); |
| + BUG_ON(!list_empty(&serv->sv_tempsocks)); |
| + |
| +} |
| + |
| /* |
| * Handle defer and revisit of requests |
| */ |