Patch "nfsd: fix nsfd startup race triggering BUG_ON" has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
nfsd: fix nsfd startup race triggering BUG_ON
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsd-fix-nsfd-startup-race-triggering-bug_on.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
bb7ffbf29e76b89a86ca4c3ee0d4690641f2f772Mon Sep 17 00:00:00 2001
From: Giuseppe Cantavenera <[email protected]>
Date: Mon, 20 Apr 2015 18:00:08 +0200
Subject: nfsd: fix nsfd startup race triggering BUG_ON
From: Giuseppe Cantavenera <[email protected]>
commit bb7ffbf29e76b89a86ca4c3ee0d4690641f2f772 upstream.
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 0040f809kernel: ---[ end trace 7471374335809536 ]---
Fixed this behaviour by calling register_pernet_subsys(&nfsd_net_ops) before registering rpc_pipefs_event(...) with the notifier chain.
--- fs/nfsd/nfsctl.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
fs/nfsd/nfsctl.c +8 -8
@@ -1250,15 +1250,15 @@ static int __init init_nfsd(void)int retval;printk (KERN_INFO "Installing knfsd (copyright (C) 1996 [email protected]).\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; retval =nfsd4_init_pnfs ();if (retval) goto out_free_slabs;
@@ -1290,10 +1290,10 @@ out_exit_pnfs:nfsd4_exit_pnfs (); 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; }
@@ -1308,8 +1308,8 @@ static void __exit exit_nfsd(void)nfsd4_exit_pnfs ();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 <[email protected]>" );
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/nfsd-fix-nsfd-startup-race-triggering-bug_on.patch