linux/fs/nfs
Chuck Lever 838edb9497 NFSv4.1: Use seqid returned by EXCHANGE_ID after state migration
Transparent State Migration copies a client's lease state from the
server where a filesystem used to reside to the server where it now
resides. When an NFSv4.1 client first contacts that destination
server, it uses EXCHANGE_ID to detect trunking relationships.

The lease that was copied there is returned to that client, but the
destination server sets EXCHGID4_FLAG_CONFIRMED_R when replying to
the client. This is because the lease was confirmed on the source
server (before it was copied).

When CONFIRMED_R is set, the client throws away the sequence ID
returned by the server. During a Transparent State Migration, however
there's no other way for the client to know what sequence ID to use
with a lease that's been migrated.

Therefore, the client must save and use the contrived slot sequence
value returned by the destination server even when CONFIRMED_R is
set.

Note that some servers always return a seqid of 1 after a migration.

Reported-by: Xuan Qi <xuan.qi@oracle.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Xuan Qi <xuan.qi@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2017-07-13 16:00:12 -04:00
..
blocklayout lib/vsprintf.c: remove %Z support 2017-02-27 18:43:47 -08:00
filelayout PNFS for stateid errors retry against MDS first 2017-07-13 16:00:08 -04:00
flexfilelayout PNFS for stateid errors retry against MDS first 2017-07-13 16:00:08 -04:00
cache_lib.c sunrpc/nfs: cleanup procfs/pipefs entry in cache_detail 2017-02-08 17:02:45 -05:00
cache_lib.h
callback_proc.c nfs: don't cast callback decode/proc/encode routines 2017-07-13 15:57:56 -04:00
callback_xdr.c sunrpc: mark all struct svc_version instances as const 2017-07-13 15:58:03 -04:00
callback.c sunrpc: mark all struct svc_version instances as const 2017-07-13 15:58:03 -04:00
callback.h nfs: don't cast callback decode/proc/encode routines 2017-07-13 15:57:56 -04:00
client.c NFS client updates for Linux 4.12 2017-05-10 13:03:38 -07:00
delegation.c NFSv4: Optimise away forced revalidation when we know the attributes are OK 2016-12-01 17:21:37 -05:00
delegation.h NFSv4: nfs_inode_find_state_and_recover() should check all stateids 2016-09-27 14:34:35 -04:00
dir.c NFS: guard against confused server in nfs_atomic_open() 2017-07-13 16:00:08 -04:00
direct.c NFS client updates for Linux 4.12 2017-05-10 13:03:38 -07:00
dns_resolve.c
dns_resolve.h
file.c NFSv4: Don't special case "launder" 2017-04-26 13:03:04 -04:00
fscache-index.c
fscache.c
fscache.h
getroot.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
inode.c NFS: check for nfs_refresh_inode() errors in nfs_fhget() 2017-07-13 16:00:09 -04:00
internal.h NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
io.c NFS: Do not serialise O_DIRECT reads and writes 2016-07-05 19:11:04 -04:00
iostat.h
Kconfig nfs: remove the objlayout driver 2017-04-20 15:51:23 -04:00
Makefile nfs: remove the objlayout driver 2017-04-20 15:51:23 -04:00
mount_clnt.c sunrpc: mark all struct rpc_procinfo instances as const 2017-07-13 15:57:57 -04:00
namespace.c NFS: Use ERR_CAST() to avoid cross-structure cast 2017-05-28 10:11:47 -07:00
netns.h netns: make struct pernet_operations::id unsigned int 2016-11-18 10:59:15 -05:00
nfs2super.c
nfs2xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs3_fs.h
nfs3acl.c
nfs3client.c NFS: Remove unused authflavour parameter from nfs_get_client() 2016-12-01 17:46:32 -05:00
nfs3proc.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs3super.c
nfs3xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs4_fs.h sunrpc: mark all struct svc_version instances as const 2017-07-13 15:58:03 -04:00
nfs4client.c NFSv4.1: Handle EXCHGID4_FLAG_CONFIRMED_R during NFSv4.1 migration 2017-07-13 16:00:12 -04:00
nfs4file.c NFSv4: add flock_owner to open context 2016-12-01 17:57:27 -05:00
nfs4getroot.c NFS: Clean up nfs4_get_rootfh() 2017-04-20 13:39:35 -04:00
nfs4idmap.c NFS: silence a uninitialized variable warning 2017-07-13 15:58:28 -04:00
nfs4idmap.h
nfs4namespace.c NFS: Remove extra dprintk()s from nfs4namespace.c 2017-04-20 13:39:35 -04:00
nfs4proc.c NFSv4.1: Use seqid returned by EXCHANGE_ID after state migration 2017-07-13 16:00:12 -04:00
nfs4renewd.c NFSv4: Set the connection timeout to match the lease period 2017-02-09 14:15:16 -05:00
nfs4session.c NFSv4.1: Fix regression in callback retry handling 2016-12-01 17:21:38 -05:00
nfs4session.h NFS: Make trace_nfs4_setup_sequence() available to NFS v4.0 2017-01-30 13:14:50 -05:00
nfs4state.c NFSv4.1: Handle EXCHGID4_FLAG_CONFIRMED_R during NFSv4.1 migration 2017-07-13 16:00:12 -04:00
nfs4super.c
nfs4sysctl.c
nfs4trace.c
nfs4trace.h NFS: Make trace_nfs4_setup_sequence() available to NFS v4.0 2017-01-30 13:14:50 -05:00
nfs4xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs42.h
nfs42proc.c NFS fix COMMIT after COPY 2017-05-24 07:52:48 -04:00
nfs42xdr.c nfs: fix decoder callback prototypes 2017-07-13 15:57:56 -04:00
nfs.h
nfsroot.c
nfstrace.c
nfstrace.h NFS client updates for Linux 4.8 2016-07-30 16:33:25 -07:00
pagelist.c NFS: Fix initialization of nfs_page_array->npages 2017-07-13 15:58:06 -04:00
pnfs_dev.c
pnfs_nfs.c pNFS: Fix NULL dereference in pnfs_generic_alloc_ds_commits 2017-05-03 12:29:41 -04:00
pnfs.c pnfs: Fix the check for requests in range of layout segment 2017-05-24 07:55:02 -04:00
pnfs.h pnfs: Fix the check for requests in range of layout segment 2017-05-24 07:55:02 -04:00
proc.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
read.c NFS: move rw_mode to nfs_pageio_header 2017-04-20 14:00:41 -04:00
super.c nfs: Fix fscache stat printing in nfs_show_stats() 2017-07-13 15:58:27 -04:00
symlink.c vfs: remove ".readlink = generic_readlink" assignments 2016-12-09 16:45:04 +01:00
sysctl.c
unlink.c NFS: nfs_rename() - revalidate directories on -ERESTARTSYS 2017-07-13 15:58:04 -04:00
write.c NFS: Fix commit policy for non-blocking calls to nfs_write_inode() 2017-07-13 15:58:05 -04:00