* [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).