linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] nfsd: fix: prevent BUG_ON registering rpc_pipefs_event for notifications only after nfsd_net_id is valid
@ 2015-04-17 10:25 Giuseppe Cantavenera
  2015-04-17 14:07 ` Kinglong Mee
  0 siblings, 1 reply; 3+ messages in thread
From: Giuseppe Cantavenera @ 2015-04-17 10:25 UTC (permalink / raw)
  To: linux-nfs
  Cc: alexander.sverdlin, bfields, Giuseppe Cantavenera,
	Lorenzo Restelli

nfsd triggered a BUG_ON in net_generic(...) when rpc_pipefs_event(...)
in fs/nfsd/nfs4recover.c was called before assigning ntfsd_net_id.
The following was observed on a MIPS 32-core processor:
kernel: Call Trace:
kernel: [<ffffffffc00bc5e4>] rpc_pipefs_event+0x7c/0x158 [nfsd]
kernel: [<ffffffff8017a2a0>] notifier_call_chain+0x70/0xb8
kernel: [<ffffffff8017a4e4>] __blocking_notifier_call_chain+0x4c/0x70
kernel: [<ffffffff8053aff8>] rpc_fill_super+0xf8/0x1a0
kernel: [<ffffffff8022204c>] mount_ns+0xb4/0xf0
kernel: [<ffffffff80222b48>] mount_fs+0x50/0x1f8
kernel: [<ffffffff8023dc00>] vfs_kern_mount+0x58/0xf0
kernel: [<ffffffff802404ac>] do_mount+0x27c/0xa28
kernel: [<ffffffff80240cf0>] SyS_mount+0x98/0xe8
kernel: [<ffffffff80135d24>] handle_sys64+0x44/0x68
kernel:
kernel:
        Code: 0040f809  00000000  2e020001 <00020336> 3c12c00d  3c02801a  de100000  6442eb98  0040f809
kernel: ---[ end trace 7471374335809536 ]---

Fixed this behaviour by calling register_pernet_subsys(&nfsd_net_ops) before
registering rpc_pipefs_event(...) with the notifier chain.

Signed-off-by: Giuseppe Cantavenera <giuseppe.cantavenera.ext@nokia.com>
Signed-off-by: Lorenzo Restelli <lorenzo.restelli.ext@nokia.com>
---
 fs/nfsd/nfsctl.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index f34d9de..3ee92a4 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -1170,15 +1170,15 @@ static int __init init_nfsd(void)
 	int retval;
 	printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
 
-	retval = register_cld_notifier();
-	if (retval)
-		return retval;
 	retval = register_pernet_subsys(&nfsd_net_ops);
 	if (retval < 0)
-		goto out_unregister_notifier;
-	retval = nfsd4_init_slabs();
+		return retval;
+	retval = register_cld_notifier();
 	if (retval)
 		goto out_unregister_pernet;
+	retval = nfsd4_init_slabs();
+	if (retval)
+		goto out_unregister_notifier;
 	nfs4_state_init();
 	retval = nfsd_fault_inject_init(); /* nfsd fault injection controls */
 	if (retval)
@@ -1206,10 +1206,10 @@ out_free_stat:
 	nfsd_fault_inject_cleanup();
 out_free_slabs:
 	nfsd4_free_slabs();
-out_unregister_pernet:
-	unregister_pernet_subsys(&nfsd_net_ops);
 out_unregister_notifier:
 	unregister_cld_notifier();
+out_unregister_pernet:
+	unregister_pernet_subsys(&nfsd_net_ops);
 	return retval;
 }
 
@@ -1223,8 +1223,8 @@ static void __exit exit_nfsd(void)
 	nfsd4_free_slabs();
 	nfsd_fault_inject_cleanup();
 	unregister_filesystem(&nfsd_fs_type);
-	unregister_pernet_subsys(&nfsd_net_ops);
 	unregister_cld_notifier();
+	unregister_pernet_subsys(&nfsd_net_ops);
 }
 
 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] nfsd: fix: prevent BUG_ON registering rpc_pipefs_event for notifications only after nfsd_net_id is valid
  2015-04-17 10:25 [PATCH] nfsd: fix: prevent BUG_ON registering rpc_pipefs_event for notifications only after nfsd_net_id is valid Giuseppe Cantavenera
@ 2015-04-17 14:07 ` Kinglong Mee
  2015-04-17 21:22   ` J. Bruce Fields
  0 siblings, 1 reply; 3+ messages in thread
From: Kinglong Mee @ 2015-04-17 14:07 UTC (permalink / raw)
  To: Giuseppe Cantavenera, linux-nfs
  Cc: alexander.sverdlin, bfields, Lorenzo Restelli

On 4/17/2015 6:25 PM, Giuseppe Cantavenera wrote:
> nfsd triggered a BUG_ON in net_generic(...) when rpc_pipefs_event(...)
> in fs/nfsd/nfs4recover.c was called before assigning ntfsd_net_id.
> The following was observed on a MIPS 32-core processor:
> kernel: Call Trace:
> kernel: [<ffffffffc00bc5e4>] rpc_pipefs_event+0x7c/0x158 [nfsd]
> kernel: [<ffffffff8017a2a0>] notifier_call_chain+0x70/0xb8
> kernel: [<ffffffff8017a4e4>] __blocking_notifier_call_chain+0x4c/0x70
> kernel: [<ffffffff8053aff8>] rpc_fill_super+0xf8/0x1a0
> kernel: [<ffffffff8022204c>] mount_ns+0xb4/0xf0
> kernel: [<ffffffff80222b48>] mount_fs+0x50/0x1f8
> kernel: [<ffffffff8023dc00>] vfs_kern_mount+0x58/0xf0
> kernel: [<ffffffff802404ac>] do_mount+0x27c/0xa28
> kernel: [<ffffffff80240cf0>] SyS_mount+0x98/0xe8
> kernel: [<ffffffff80135d24>] handle_sys64+0x44/0x68
> kernel:
> kernel:
>         Code: 0040f809  00000000  2e020001 <00020336> 3c12c00d  3c02801a  de100000  6442eb98  0040f809
> kernel: ---[ end trace 7471374335809536 ]---
> 
> Fixed this behaviour by calling register_pernet_subsys(&nfsd_net_ops) before
> registering rpc_pipefs_event(...) with the notifier chain.
> 
> Signed-off-by: Giuseppe Cantavenera <giuseppe.cantavenera.ext@nokia.com>
> Signed-off-by: Lorenzo Restelli <lorenzo.restelli.ext@nokia.com>

Make sense,
Reviewed-by: Kinglong Mee <kinglongmee@gmail.com>

> ---
>  fs/nfsd/nfsctl.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> index f34d9de..3ee92a4 100644
> --- a/fs/nfsd/nfsctl.c
> +++ b/fs/nfsd/nfsctl.c
> @@ -1170,15 +1170,15 @@ static int __init init_nfsd(void)
>  	int retval;
>  	printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
>  
> -	retval = register_cld_notifier();
> -	if (retval)
> -		return retval;
>  	retval = register_pernet_subsys(&nfsd_net_ops);
>  	if (retval < 0)
> -		goto out_unregister_notifier;
> -	retval = nfsd4_init_slabs();
> +		return retval;
> +	retval = register_cld_notifier();
>  	if (retval)
>  		goto out_unregister_pernet;
> +	retval = nfsd4_init_slabs();
> +	if (retval)
> +		goto out_unregister_notifier;
>  	nfs4_state_init();
>  	retval = nfsd_fault_inject_init(); /* nfsd fault injection controls */
>  	if (retval)
> @@ -1206,10 +1206,10 @@ out_free_stat:
>  	nfsd_fault_inject_cleanup();
>  out_free_slabs:
>  	nfsd4_free_slabs();
> -out_unregister_pernet:
> -	unregister_pernet_subsys(&nfsd_net_ops);
>  out_unregister_notifier:
>  	unregister_cld_notifier();
> +out_unregister_pernet:
> +	unregister_pernet_subsys(&nfsd_net_ops);
>  	return retval;
>  }
>  
> @@ -1223,8 +1223,8 @@ static void __exit exit_nfsd(void)
>  	nfsd4_free_slabs();
>  	nfsd_fault_inject_cleanup();
>  	unregister_filesystem(&nfsd_fs_type);
> -	unregister_pernet_subsys(&nfsd_net_ops);
>  	unregister_cld_notifier();
> +	unregister_pernet_subsys(&nfsd_net_ops);
>  }
>  
>  MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] nfsd: fix: prevent BUG_ON registering rpc_pipefs_event for notifications only after nfsd_net_id is valid
  2015-04-17 14:07 ` Kinglong Mee
@ 2015-04-17 21:22   ` J. Bruce Fields
  0 siblings, 0 replies; 3+ messages in thread
From: J. Bruce Fields @ 2015-04-17 21:22 UTC (permalink / raw)
  To: Kinglong Mee
  Cc: Giuseppe Cantavenera, linux-nfs, alexander.sverdlin,
	Lorenzo Restelli

On Fri, Apr 17, 2015 at 10:07:41PM +0800, Kinglong Mee wrote:
> On 4/17/2015 6:25 PM, Giuseppe Cantavenera wrote:
> > nfsd triggered a BUG_ON in net_generic(...) when rpc_pipefs_event(...)
> > in fs/nfsd/nfs4recover.c was called before assigning ntfsd_net_id.
> > The following was observed on a MIPS 32-core processor:
> > kernel: Call Trace:
> > kernel: [<ffffffffc00bc5e4>] rpc_pipefs_event+0x7c/0x158 [nfsd]
> > kernel: [<ffffffff8017a2a0>] notifier_call_chain+0x70/0xb8
> > kernel: [<ffffffff8017a4e4>] __blocking_notifier_call_chain+0x4c/0x70
> > kernel: [<ffffffff8053aff8>] rpc_fill_super+0xf8/0x1a0
> > kernel: [<ffffffff8022204c>] mount_ns+0xb4/0xf0
> > kernel: [<ffffffff80222b48>] mount_fs+0x50/0x1f8
> > kernel: [<ffffffff8023dc00>] vfs_kern_mount+0x58/0xf0
> > kernel: [<ffffffff802404ac>] do_mount+0x27c/0xa28
> > kernel: [<ffffffff80240cf0>] SyS_mount+0x98/0xe8
> > kernel: [<ffffffff80135d24>] handle_sys64+0x44/0x68
> > kernel:
> > kernel:
> >         Code: 0040f809  00000000  2e020001 <00020336> 3c12c00d  3c02801a  de100000  6442eb98  0040f809
> > kernel: ---[ end trace 7471374335809536 ]---
> > 
> > Fixed this behaviour by calling register_pernet_subsys(&nfsd_net_ops) before
> > registering rpc_pipefs_event(...) with the notifier chain.
> > 
> > Signed-off-by: Giuseppe Cantavenera <giuseppe.cantavenera.ext@nokia.com>
> > Signed-off-by: Lorenzo Restelli <lorenzo.restelli.ext@nokia.com>
> 
> Make sense,
> Reviewed-by: Kinglong Mee <kinglongmee@gmail.com>

Thanks, applying.--b.

> 
> > ---
> >  fs/nfsd/nfsctl.c | 16 ++++++++--------
> >  1 file changed, 8 insertions(+), 8 deletions(-)
> > 
> > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
> > index f34d9de..3ee92a4 100644
> > --- a/fs/nfsd/nfsctl.c
> > +++ b/fs/nfsd/nfsctl.c
> > @@ -1170,15 +1170,15 @@ static int __init init_nfsd(void)
> >  	int retval;
> >  	printk(KERN_INFO "Installing knfsd (copyright (C) 1996 okir@monad.swb.de).\n");
> >  
> > -	retval = register_cld_notifier();
> > -	if (retval)
> > -		return retval;
> >  	retval = register_pernet_subsys(&nfsd_net_ops);
> >  	if (retval < 0)
> > -		goto out_unregister_notifier;
> > -	retval = nfsd4_init_slabs();
> > +		return retval;
> > +	retval = register_cld_notifier();
> >  	if (retval)
> >  		goto out_unregister_pernet;
> > +	retval = nfsd4_init_slabs();
> > +	if (retval)
> > +		goto out_unregister_notifier;
> >  	nfs4_state_init();
> >  	retval = nfsd_fault_inject_init(); /* nfsd fault injection controls */
> >  	if (retval)
> > @@ -1206,10 +1206,10 @@ out_free_stat:
> >  	nfsd_fault_inject_cleanup();
> >  out_free_slabs:
> >  	nfsd4_free_slabs();
> > -out_unregister_pernet:
> > -	unregister_pernet_subsys(&nfsd_net_ops);
> >  out_unregister_notifier:
> >  	unregister_cld_notifier();
> > +out_unregister_pernet:
> > +	unregister_pernet_subsys(&nfsd_net_ops);
> >  	return retval;
> >  }
> >  
> > @@ -1223,8 +1223,8 @@ static void __exit exit_nfsd(void)
> >  	nfsd4_free_slabs();
> >  	nfsd_fault_inject_cleanup();
> >  	unregister_filesystem(&nfsd_fs_type);
> > -	unregister_pernet_subsys(&nfsd_net_ops);
> >  	unregister_cld_notifier();
> > +	unregister_pernet_subsys(&nfsd_net_ops);
> >  }
> >  
> >  MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
> > 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-04-17 21:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-17 10:25 [PATCH] nfsd: fix: prevent BUG_ON registering rpc_pipefs_event for notifications only after nfsd_net_id is valid Giuseppe Cantavenera
2015-04-17 14:07 ` Kinglong Mee
2015-04-17 21:22   ` J. Bruce Fields

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).