linux_dsm_epyc7002/fs/nfs
Weston Andros Adamson a47970ff78 NFSv4.1: Hold reference to layout hdr in layoutget
This fixes an oops where a LAYOUTGET is in still in the rpciod queue,
but the requesting processes has been killed.  Without this, killing
the process does the final pnfs_put_layout_hdr() and sets NFS_I(inode)->layout
to NULL while the LAYOUTGET rpc task still references it.

Example oops:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000080
IP: [<ffffffffa01bd586>] pnfs_choose_layoutget_stateid+0x37/0xef [nfsv4]
PGD 7365b067 PUD 7365d067 PMD 0
Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
Modules linked in: nfs_layout_nfsv41_files nfsv4 auth_rpcgss nfs lockd sunrpc ipt_MASQUERADE ip6table_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 iptable_nat nf_nat_ipv4 nf_nat iptable_mangle ip6table_filter ip6_tables ppdev e1000 i2c_piix4 i2c_core shpchp parport_pc parport crc32c_intel aesni_intel xts aes_x86_64 lrw gf128mul ablk_helper cryptd mptspi scsi_transport_spi mptscsih mptbase floppy autofs4
CPU 0
Pid: 27, comm: kworker/0:1 Not tainted 3.8.0-dros_cthon2013+ #4 VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform
RIP: 0010:[<ffffffffa01bd586>]  [<ffffffffa01bd586>] pnfs_choose_layoutget_stateid+0x37/0xef [nfsv4]
RSP: 0018:ffff88007b0c1c88  EFLAGS: 00010246
RAX: ffff88006ed36678 RBX: 0000000000000000 RCX: 0000000ea877e3bc
RDX: ffff88007a729da8 RSI: 0000000000000000 RDI: ffff88007a72b958
RBP: ffff88007b0c1ca8 R08: 0000000000000002 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88007a72b958
R13: ffff88007a729da8 R14: 0000000000000000 R15: ffffffffa011077e
FS:  0000000000000000(0000) GS:ffff88007f600000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000080 CR3: 00000000735f8000 CR4: 00000000001407f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process kworker/0:1 (pid: 27, threadinfo ffff88007b0c0000, task ffff88007c2fa0c0)
Stack:
 ffff88006fc05388 ffff88007a72b908 ffff88007b240900 ffff88006fc05388
 ffff88007b0c1cd8 ffffffffa01a2170 ffff88007b240900 ffff88007b240900
 ffff88007b240970 ffffffffa011077e ffff88007b0c1ce8 ffffffffa0110791
Call Trace:
 [<ffffffffa01a2170>] nfs4_layoutget_prepare+0x7b/0x92 [nfsv4]
 [<ffffffffa011077e>] ? __rpc_atrun+0x15/0x15 [sunrpc]
 [<ffffffffa0110791>] rpc_prepare_task+0x13/0x15 [sunrpc]

Reported-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Cc: stable@kernel.org
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2013-02-25 18:32:59 -08:00
..
blocklayout umount oops when remove blocklayoutdriver first 2013-02-17 15:40:15 -05:00
objlayout umount oops when remove blocklayoutdriver first 2013-02-17 15:40:15 -05:00
cache_lib.c NFSv4: Get rid of unnecessary BUG_ON()s 2012-11-04 14:43:39 -05:00
cache_lib.h NFS: DNS resolver PipeFS notifier introduced 2012-01-31 18:20:26 -05:00
callback_proc.c NFSv4.1: Fix bulk recall and destroy of layouts 2013-02-14 13:22:50 -05:00
callback_xdr.c NFSv4.1: Move slot table and session struct definitions to nfs4session.h 2012-12-06 00:30:46 +01:00
callback.c NFSv4: Fix the return value for nfs_callback_start_svc 2012-10-16 13:14:42 -04:00
callback.h NFSv4.1: Clean up session draining 2012-12-06 00:30:44 +01:00
client.c NFS: avoid NULL dereference in nfs_destroy_server 2012-12-12 23:55:56 -05:00
delegation.c NFSv4: Ensure delegation recall and byte range lock removal don't conflict 2013-02-11 15:33:13 -05:00
delegation.h NFSv4.1: Don't lose locks when a server reboots during delegation return 2013-02-11 15:33:12 -05:00
dir.c NFS: Fix access to suid/sgid executables 2013-01-03 17:06:27 -05:00
direct.c nfs: fix page dirtying in NFS DIO read codepath 2012-12-12 12:56:19 -05:00
dns_resolve.c NFS: fix bug in legacy DNS resolver. 2012-10-31 16:25:59 -04:00
dns_resolve.h NFS: DNS resolver cache per network namespace context introduced 2012-01-31 18:20:26 -05:00
file.c lseek: the "whence" argument is called "whence" 2012-12-17 17:15:12 -08:00
fscache-index.c
fscache.c NFS4: Open files for fscaching 2012-12-20 22:19:42 +00:00
fscache.h NFS: Provide stub nfs_fscache_wait_on_invalidate() for when CONFIG_NFS_FSCACHE=n 2012-12-21 08:06:48 -08:00
getroot.c nfs: remove kfree() redundant null checks 2013-02-17 15:27:21 -05:00
idmap.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2012-12-16 15:40:50 -08:00
inode.c Revert "NFS: add nfs_sb_deactive_async to avoid deadlock" 2013-02-01 10:13:48 -05:00
internal.h Revert "NFS: add nfs_sb_deactive_async to avoid deadlock" 2013-02-01 10:13:48 -05:00
iostat.h
Kconfig NFSv4.1: Remove the dependency on CONFIG_EXPERIMENTAL 2012-10-03 10:54:50 -07:00
Makefile NFSv4.1: Cleanup move session slot management to fs/nfs/nfs4session.c 2012-12-06 00:30:45 +01:00
mount_clnt.c NFS: Remove the BUG_ON() in the mount code 2012-11-04 14:43:39 -05:00
namespace.c NFS: Don't silently fail setattr() requests on mountpoints 2013-01-30 17:41:04 -05:00
netns.h nfs: include NFSv4 header in netns.h 2012-10-02 08:17:02 -07:00
nfs2super.c NFS: Convert v2 into a module 2012-07-30 19:06:41 -04:00
nfs2xdr.c NFS: Remove asserts from the NFS XDR code 2012-11-04 14:43:38 -05:00
nfs3acl.c userns: Pass a userns parameter into posix_acl_to_xattr and posix_acl_from_xattr 2012-09-18 01:01:35 -07:00
nfs3client.c NFS: Only initialize the ACL client in the v3 case 2012-07-30 19:05:54 -04:00
nfs3proc.c SUNRPC handle EKEYEXPIRED in call_refreshresult 2012-12-12 15:36:02 -05:00
nfs3super.c NFS: Convert v3 into a module 2012-07-30 19:06:46 -04:00
nfs3xdr.c NFS: Remove asserts from the NFS XDR code 2012-11-04 14:43:38 -05:00
nfs4_fs.h NFSv4: Ensure delegation recall and byte range lock removal don't conflict 2013-02-11 15:33:13 -05:00
nfs4client.c NFSv4.1: Ensure that nfs41_walk_client_list() does start lease recovery 2013-01-27 15:51:41 -05:00
nfs4file.c NFS4: Open files for fscaching 2012-12-20 22:19:42 +00:00
nfs4filelayout.c pnfs: fix resend_to_mds for directio 2013-02-24 10:07:36 -05:00
nfs4filelayout.h NFSv4.1: Kill nfs4_ds_disconnect() 2012-10-15 10:49:42 -04:00
nfs4filelayoutdev.c NFSv4.1: Cleanup move session slot management to fs/nfs/nfs4session.c 2012-12-06 00:30:45 +01:00
nfs4getroot.c NFSv4: fs/nfs/nfs4getroot.c needs to include "internal.h" 2012-10-16 12:37:59 -04:00
nfs4namespace.c nfs: Show original device name verbatim in /proc/*/mount{s,info} 2012-10-31 16:26:26 -04:00
nfs4proc.c NFSv4.1: Hold reference to layout hdr in layoutget 2013-02-25 18:32:59 -08:00
nfs4renewd.c workqueue: use mod_delayed_work() instead of cancel + queue 2012-08-13 16:27:37 -07:00
nfs4session.c NFSv4.1: Deal effectively with interrupted RPC calls. 2012-12-15 15:39:59 -05:00
nfs4session.h NFSv4.1: Deal effectively with interrupted RPC calls. 2012-12-15 15:39:59 -05:00
nfs4state.c NFSv4: Ensure delegation recall and byte range lock removal don't conflict 2013-02-11 15:33:13 -05:00
nfs4super.c NFS: Ensure that we always drop inodes that have been marked as stale 2012-12-14 14:36:36 -05:00
nfs4sysctl.c nfs: include nfs4_fh.h in nfs4sysctl.c 2012-10-02 08:17:03 -07:00
nfs4xdr.c Merge branch 'bugfixes' into nfs-for-next 2012-12-11 09:16:26 -05:00
nfs.h NFS: Convert v4 into a module 2012-07-30 19:06:52 -04:00
nfsroot.c SUNRPC/NFS: Add Kbuild dependencies for NFS_DEBUG/RPC_DEBUG 2012-03-20 13:08:26 -04:00
pagelist.c NFS: Clean up helper function nfs4_select_rw_stateid() 2012-09-28 16:03:04 -04:00
pnfs_dev.c NFSv4.1: pNFS data servers may be temporarily offline 2012-09-28 16:03:09 -04:00
pnfs.c pnfs: fix resend_to_mds for directio 2013-02-24 10:07:36 -05:00
pnfs.h pnfs: fix resend_to_mds for directio 2013-02-24 10:07:36 -05:00
proc.c SUNRPC handle EKEYEXPIRED in call_refreshresult 2012-12-12 15:36:02 -05:00
read.c NFS: Ensure that we free the rpc_task after read and write cleanups are done 2013-01-04 12:59:10 -05:00
super.c Revert "NFS: add nfs_sb_deactive_async to avoid deadlock" 2013-02-01 10:13:48 -05:00
symlink.c
sysctl.c NFS: Initialize v4 sysctls from nfs_init_v4() 2012-07-17 13:33:18 -04:00
unlink.c NFS: Don't allow NFS silly-renamed files to be deleted, no signal 2013-02-22 14:55:34 -05:00
write.c NFS: Ensure that we free the rpc_task after read and write cleanups are done 2013-01-04 12:59:10 -05:00