NFSD: Error out when register_shrinker() fail
If register_shrinker() failed, nfsd will cause a NULL pointer access as,
[ 9250.875465] nfsd: last server has exited, flushing export cache
[ 9251.427270] BUG: unable to handle kernel NULL pointer dereference at (null)
[ 9251.427393] IP: [<
ffffffff8136fc29>] __list_del_entry+0x29/0xd0
[ 9251.427579] PGD
13e4d067 PUD
13e4c067 PMD 0
[ 9251.427633] Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
[ 9251.427706] Modules linked in: ip6t_rpfilter ip6t_REJECT bnep bluetooth xt_conntrack cfg80211 rfkill ebtable_nat ebtable_broute bridge stp llc ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security iptable_raw btrfs xfs microcode ppdev serio_raw pcspkr xor libcrc32c raid6_pq e1000 parport_pc parport i2c_piix4 i2c_core nfsd(OE-) auth_rpcgss nfs_acl lockd sunrpc(E) ata_generic pata_acpi
[ 9251.428240] CPU: 0 PID: 1557 Comm: rmmod Tainted: G OE 3.16.0-rc2+ #22
[ 9251.428366] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/31/2013
[ 9251.428496] task:
ffff880000849540 ti:
ffff8800136f4000 task.ti:
ffff8800136f4000
[ 9251.428593] RIP: 0010:[<
ffffffff8136fc29>] [<
ffffffff8136fc29>] __list_del_entry+0x29/0xd0
[ 9251.428696] RSP: 0018:
ffff8800136f7ea0 EFLAGS:
00010207
[ 9251.428751] RAX:
0000000000000000 RBX:
ffffffffa0116d48 RCX:
dead000000200200
[ 9251.428814] RDX:
0000000000000000 RSI:
0000000000000000 RDI:
ffffffffa0116d48
[ 9251.428876] RBP:
ffff8800136f7ea0 R08:
ffff8800136f4000 R09:
0000000000000001
[ 9251.428939] R10:
8080808080808080 R11:
0000000000000000 R12:
ffffffffa011a5a0
[ 9251.429002] R13:
0000000000000800 R14:
0000000000000000 R15:
00000000018ac090
[ 9251.429064] FS:
00007fb9acef0740(0000) GS:
ffff88003fa00000(0000) knlGS:
0000000000000000
[ 9251.429164] CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
[ 9251.429221] CR2:
0000000000000000 CR3:
0000000031a17000 CR4:
00000000001407f0
[ 9251.429306] Stack:
[ 9251.429410]
ffff8800136f7eb8 ffffffff8136fcdd ffffffffa0116d20 ffff8800136f7ed0
[ 9251.429511]
ffffffff8118a0f2 0000000000000000 ffff8800136f7ee0 ffffffffa00eb765
[ 9251.429610]
ffff8800136f7ef0 ffffffffa010e93c ffff8800136f7f78 ffffffff81104ac2
[ 9251.429709] Call Trace:
[ 9251.429755] [<
ffffffff8136fcdd>] list_del+0xd/0x30
[ 9251.429896] [<
ffffffff8118a0f2>] unregister_shrinker+0x22/0x40
[ 9251.430037] [<
ffffffffa00eb765>] nfsd_reply_cache_shutdown+0x15/0x90 [nfsd]
[ 9251.430106] [<
ffffffffa010e93c>] exit_nfsd+0x9/0x6cd [nfsd]
[ 9251.430192] [<
ffffffff81104ac2>] SyS_delete_module+0x162/0x200
[ 9251.430280] [<
ffffffff81013b69>] ? do_notify_resume+0x59/0x90
[ 9251.430395] [<
ffffffff816f2369>] system_call_fastpath+0x16/0x1b
[ 9251.430457] Code: 00 00 55 48 8b 17 48 b9 00 01 10 00 00 00 ad de 48 8b 47 08 48 89 e5 48 39 ca 74 29 48 b9 00 02 20 00 00 00 ad de 48 39 c8 74 7a <4c> 8b 00 4c 39 c7 75 53 4c 8b 42 08 4c 39 c7 75 2b 48 89 42 08
[ 9251.430691] RIP [<
ffffffff8136fc29>] __list_del_entry+0x29/0xd0
[ 9251.430755] RSP <
ffff8800136f7ea0>
[ 9251.430805] CR2:
0000000000000000
[ 9251.431033] ---[ end trace
080f3050d082b4ea ]---
Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>