]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
MFC: r336839
authorrmacklem <rmacklem@FreeBSD.org>
Tue, 21 Aug 2018 11:10:49 +0000 (11:10 +0000)
committerrmacklem <rmacklem@FreeBSD.org>
Tue, 21 Aug 2018 11:10:49 +0000 (11:10 +0000)
commit121df03ce024a9e8f52afc369903523b8607fc4d
treedc0e6d88d93aa12bae8f29b679a3d6aebf3fde4c
parenta637c8386f0522f1b253ba58f497f31ac4fa981a
MFC: r336839
Modify the NFSv4.1 server so that it allows ReclaimComplete as done by ESXi 6.7.

I believe that a ReclaimComplete with rca_one_fs == TRUE is only
to be used after a file system has been transferred to a different
file server.  However, RFC5661 is somewhat vague w.r.t. this and
the ESXi 6.7 client does both a ReclaimComplete with rca_one_fs == TRUE
and one with ReclaimComplete with rca_one_fs == FALSE.
Therefore, just ignore the rca_one_fs == TRUE operation and return
NFS_OK without doing anything instead of replying NFS4ERR_NOTSUPP.
This allows the ESXi 6.7 NFSv4.1 client to do a mount.
After discussion on the NFSv4 IETF working group mailing list, doing this
along with setting a flag to note that a ReclaimComplete with rca_one_fs TRUE
was an appropriate way to handle this.
The flag that indicates that a ReclaimComplete with rca_one_fs == TRUE was
done may be used to disable replies of NFS4ERR_GRACE for non-reclaim
state operations in a future commit.

This patch along with r332790, r334492 and r336357 allow ESXi 6.7 NFSv4.1 mounts
work ok. ESX 6.5 NFSv4.1 mounts do not work well, due to what I believe are
violations of RFC-5661 and should not be used.
sys/fs/nfs/nfs.h
sys/fs/nfs/nfs_var.h
sys/fs/nfsserver/nfs_nfsdserv.c
sys/fs/nfsserver/nfs_nfsdstate.c