| From 88c47666171989ed4c5b1a5687df09511e8c5e35 Mon Sep 17 00:00:00 2001 |
| From: Stanislav Kinsbursky <skinsbursky@parallels.com> |
| Date: Thu, 6 Dec 2012 18:34:42 +0300 |
| Subject: nfsd: pass proper net to nfsd_destroy() from NFSd kthreads |
| |
| From: Stanislav Kinsbursky <skinsbursky@parallels.com> |
| |
| commit 88c47666171989ed4c5b1a5687df09511e8c5e35 upstream. |
| |
| Since NFSd service is per-net now, we have to pass proper network |
| context in nfsd_shutdown() from NFSd kthreads. |
| |
| The simplest way I found is to get proper net from one of transports |
| with permanent sockets. |
| |
| Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com> |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| [wengmeiling: backport to 3.4: adjust context] |
| Signed-off-by: Weng Meiling <wengmeiling.weng@huawei.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/nfsd/nfssvc.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/fs/nfsd/nfssvc.c |
| +++ b/fs/nfsd/nfssvc.c |
| @@ -483,6 +483,8 @@ static int |
| nfsd(void *vrqstp) |
| { |
| struct svc_rqst *rqstp = (struct svc_rqst *) vrqstp; |
| + struct svc_xprt *perm_sock = list_entry(rqstp->rq_server->sv_permsocks.next, typeof(struct svc_xprt), xpt_list); |
| + struct net *net = perm_sock->xpt_net; |
| int err, preverr = 0; |
| |
| /* Lock module and set up kernel thread */ |
| @@ -557,7 +559,7 @@ out: |
| /* Release the thread */ |
| svc_exit_thread(rqstp); |
| |
| - nfsd_destroy(&init_net); |
| + nfsd_destroy(net); |
| |
| /* Release module */ |
| mutex_unlock(&nfsd_mutex); |