NFSv4: Detect support for OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION
If the server supports the NFSv4.2 protocol extension to optimise away returning a stateid when it returns a delegation, then we cache that information in another capability flag. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com> Signed-off-by: Lance Shelton <lance.shelton@hammerspace.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
707f13b3d0
commit
d2a00cceb9
@ -3990,6 +3990,10 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
|
|||||||
sizeof(server->attr_bitmask));
|
sizeof(server->attr_bitmask));
|
||||||
server->attr_bitmask_nl[2] &= ~FATTR4_WORD2_SECURITY_LABEL;
|
server->attr_bitmask_nl[2] &= ~FATTR4_WORD2_SECURITY_LABEL;
|
||||||
|
|
||||||
|
if (res.open_caps.oa_share_access_want[0] &
|
||||||
|
NFS4_SHARE_WANT_OPEN_XOR_DELEGATION)
|
||||||
|
server->caps |= NFS_CAP_OPEN_XOR;
|
||||||
|
|
||||||
memcpy(server->cache_consistency_bitmask, res.attr_bitmask, sizeof(server->cache_consistency_bitmask));
|
memcpy(server->cache_consistency_bitmask, res.attr_bitmask, sizeof(server->cache_consistency_bitmask));
|
||||||
server->cache_consistency_bitmask[0] &= FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
|
server->cache_consistency_bitmask[0] &= FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
|
||||||
server->cache_consistency_bitmask[1] &= FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
|
server->cache_consistency_bitmask[1] &= FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
|
||||||
|
@ -278,6 +278,7 @@ struct nfs_server {
|
|||||||
#define NFS_CAP_LGOPEN (1U << 5)
|
#define NFS_CAP_LGOPEN (1U << 5)
|
||||||
#define NFS_CAP_CASE_INSENSITIVE (1U << 6)
|
#define NFS_CAP_CASE_INSENSITIVE (1U << 6)
|
||||||
#define NFS_CAP_CASE_PRESERVING (1U << 7)
|
#define NFS_CAP_CASE_PRESERVING (1U << 7)
|
||||||
|
#define NFS_CAP_OPEN_XOR (1U << 12)
|
||||||
#define NFS_CAP_DELEGTIME (1U << 13)
|
#define NFS_CAP_DELEGTIME (1U << 13)
|
||||||
#define NFS_CAP_POSIX_LOCK (1U << 14)
|
#define NFS_CAP_POSIX_LOCK (1U << 14)
|
||||||
#define NFS_CAP_UIDGID_NOMAP (1U << 15)
|
#define NFS_CAP_UIDGID_NOMAP (1U << 15)
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#define NFS4_OPEN_RESULT_CONFIRM 0x0002
|
#define NFS4_OPEN_RESULT_CONFIRM 0x0002
|
||||||
#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
|
#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
|
||||||
#define NFS4_OPEN_RESULT_PRESERVE_UNLINKED 0x0008
|
#define NFS4_OPEN_RESULT_PRESERVE_UNLINKED 0x0008
|
||||||
|
#define NFS4_OPEN_RESULT_NO_OPEN_STATEID 0x0010
|
||||||
#define NFS4_OPEN_RESULT_MAY_NOTIFY_LOCK 0x0020
|
#define NFS4_OPEN_RESULT_MAY_NOTIFY_LOCK 0x0020
|
||||||
|
|
||||||
#define NFS4_SHARE_ACCESS_MASK 0x000F
|
#define NFS4_SHARE_ACCESS_MASK 0x000F
|
||||||
@ -70,6 +71,7 @@
|
|||||||
#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED 0x20000
|
#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED 0x20000
|
||||||
|
|
||||||
#define NFS4_SHARE_WANT_DELEG_TIMESTAMPS 0x100000
|
#define NFS4_SHARE_WANT_DELEG_TIMESTAMPS 0x100000
|
||||||
|
#define NFS4_SHARE_WANT_OPEN_XOR_DELEGATION 0x200000
|
||||||
|
|
||||||
#define NFS4_CDFC4_FORE 0x1
|
#define NFS4_CDFC4_FORE 0x1
|
||||||
#define NFS4_CDFC4_BACK 0x2
|
#define NFS4_CDFC4_BACK 0x2
|
||||||
|
Loading…
Reference in New Issue
Block a user