linux/fs/nfs
Trond Myklebust 2a4c8994ee NFSv4.1: Fix umount when filelayout DS is also the MDS
Currently there is a 'chicken and egg' issue when the DS is also the mounted
MDS. The nfs_match_client() reference from nfs4_set_ds_client bumps the
cl_count, the nfs_client is not freed at umount, and nfs4_deviceid_purge_client
is not called to dereference the MDS usage of a deviceid which holds a
reference to the DS nfs_client.  The result is the umount program returns,
but the nfs_client is not freed, and the cl_session hearbeat continues.

The MDS (and all other nfs mounts) lose their last nfs_client reference in
nfs_free_server when the last nfs_server (fsid) is umounted.
The file layout DS lose their last nfs_client reference in destroy_ds
when the last deviceid referencing the data server is put and destroy_ds is
called. This is triggered by a call to nfs4_deviceid_purge_client which
removes references to a pNFS deviceid used by an MDS mount.

The fix is to track how many pnfs enabled filesystems are mounted from
this server, and then to purge the device id cache once that count reaches
zero.

Reported-by: Jorge Mora <Jorge.Mora@netapp.com>
Reported-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2012-06-18 08:45:16 -04:00
..
blocklayout NFS: Use proper naming conventions for the nfs_client.net field 2012-05-22 16:45:44 -04:00
objlayout NFS: Fix sparse warnings 2012-05-04 14:59:51 -04:00
Kconfig NFS: Turn v3 on by default 2012-05-14 17:42:22 -07:00
Makefile NFS: Make v2 configurable 2012-05-14 17:42:22 -07:00
cache_lib.c
cache_lib.h
callback.c NFS: hard-code init_net for NFS callback transports 2012-06-14 13:53:43 -04:00
callback.h
callback_proc.c
callback_xdr.c NFS: add an endian notation for sparse 2012-06-12 09:54:40 -04:00
client.c NFSv4.1: Fix umount when filelayout DS is also the MDS 2012-06-18 08:45:16 -04:00
delegation.c NFSv4: nfs_client_return_marked_delegations can't flush data 2012-05-08 12:53:21 -04:00
delegation.h NFS: nfs_inode_return_delegation() should always flush dirty data 2012-05-08 12:53:21 -04:00
dir.c nfs: don't open in ->d_revalidate 2012-06-01 12:12:02 -04:00
direct.c NFS client bugfixes for Linux 3.5 2012-06-15 17:37:23 -07:00
dns_resolve.c
dns_resolve.h
file.c nfs: don't open in ->d_revalidate 2012-06-01 12:12:02 -04:00
fscache-index.c
fscache.c NFS: Don't pass mount data to nfs_fscache_get_super_cookie() 2012-05-14 17:30:26 -07:00
fscache.h NFS: Fix a compile issue when CONFIG_NFS_FSCACHE was undefined 2012-05-16 10:24:20 -07:00
getroot.c NFS: Create a single nfs_get_root() 2012-05-14 17:30:26 -07:00
idmap.c NFS: Add memory barriers to the nfs_client->cl_cons_state initialisation 2012-05-23 15:24:59 -04:00
inode.c NFS: Ensure that setattr and getattr wait for O_DIRECT write completion 2012-05-31 11:41:36 -07:00
internal.h NFS: Ensure that setattr and getattr wait for O_DIRECT write completion 2012-05-31 11:41:36 -07:00
iostat.h
mount_clnt.c SUNRPC/NFS: Add Kbuild dependencies for NFS_DEBUG/RPC_DEBUG 2012-03-20 13:08:26 -04:00
namespace.c NFS: Remove extra rpc_clnt argument to proc_lookup 2012-04-27 14:10:39 -04:00
netns.h NFS: Always use the same SETCLIENTID boot verifier 2012-05-22 16:45:46 -04:00
nfs2xdr.c NFS: Create an NFS v3 stat_to_errno() 2012-05-14 17:42:21 -07:00
nfs3acl.c
nfs3proc.c NFS client updates for Linux 3.5 2012-05-29 10:43:51 -07:00
nfs3xdr.c NFS: Create an NFS v3 stat_to_errno() 2012-05-14 17:42:21 -07:00
nfs4_fs.h NFSv4: Fix an Oops in the open recovery code 2012-06-05 10:00:14 -04:00
nfs4filelayout.c NFSv4.1: Handle other occurrences of NFS4ERR_CONN_NOT_BOUND_TO_SESSION 2012-05-27 14:33:07 -04:00
nfs4filelayout.h NFSv4.1 resend LAYOUTGET on data server invalid layout errors 2012-05-19 17:55:33 -04:00
nfs4filelayoutdev.c NFSv4.1: Fix session initialisation races 2012-05-23 15:20:57 -04:00
nfs4namespace.c Merge branch 'bugfixes' into nfs-for-next 2012-05-21 10:12:39 -04:00
nfs4proc.c NFSv4 do not send an empty SETATTR compound 2012-06-11 17:25:53 -04:00
nfs4renewd.c NFS: Add NFSDBG_STATE 2012-05-22 16:45:42 -04:00
nfs4state.c NFSv4.1: Ensure we clear session state flags after a session creation 2012-06-05 10:22:14 -04:00
nfs4xdr.c NFSv4: Fix up decode_attr_mdsthreshold 2012-06-05 10:00:47 -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 - Rename nfs_unlock_request and nfs_unlock_request_dont_release 2012-05-09 15:17:43 -04:00
pnfs.c NFSv4.1: Fix umount when filelayout DS is also the MDS 2012-06-18 08:45:16 -04:00
pnfs.h NFS4: Fix open bug when pnfs module blacklisted 2012-06-07 13:44:24 -04:00
pnfs_dev.c NFS: Fix more NFS debug related build warnings 2012-03-21 09:31:44 -04:00
proc.c NFSv2: EOF incorrectly set on short read 2012-06-11 17:25:00 -04:00
read.c NFSv4.1 add nfs_inode book keeping for mdsthreshold 2012-05-24 16:15:48 -04:00
super.c NFS: Use the NFS_DEFAULT_VERSION for v2 and v3 mounts 2012-06-09 14:38:59 -04:00
symlink.c
sysctl.c
unlink.c NFS: Remove nfs4_setup_sequence from generic rename code 2012-03-21 09:31:46 -04:00
write.c NFS: Fix a commit bug 2012-06-05 18:38:47 -04:00