]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
NFSv4: Detect support for OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION
authorTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 17 Jun 2024 01:21:33 +0000 (21:21 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 8 Jul 2024 17:47:25 +0000 (13:47 -0400)
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>
fs/nfs/nfs4proc.c
include/linux/nfs_fs_sb.h
include/uapi/linux/nfs4.h

index ae91492e952177a95aa86b5ec84277476523a338..adf4fc8610f6e539f5da796686cff7209a6a7496 100644 (file)
@@ -3990,6 +3990,10 @@ static int _nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *f
                                sizeof(server->attr_bitmask));
                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));
                server->cache_consistency_bitmask[0] &= FATTR4_WORD0_CHANGE|FATTR4_WORD0_SIZE;
                server->cache_consistency_bitmask[1] &= FATTR4_WORD1_TIME_METADATA|FATTR4_WORD1_TIME_MODIFY;
index 5a76a87cd924440090ff00094afb72427b0f65b1..fe5b1a8bd723448246e8a513a235f2d454c6b443 100644 (file)
@@ -278,6 +278,7 @@ struct nfs_server {
 #define NFS_CAP_LGOPEN         (1U << 5)
 #define NFS_CAP_CASE_INSENSITIVE       (1U << 6)
 #define NFS_CAP_CASE_PRESERVING        (1U << 7)
+#define NFS_CAP_OPEN_XOR       (1U << 12)
 #define NFS_CAP_DELEGTIME      (1U << 13)
 #define NFS_CAP_POSIX_LOCK     (1U << 14)
 #define NFS_CAP_UIDGID_NOMAP   (1U << 15)
index afd7e32906c35a355a64086286e1b5338143379f..caf4db2fcbb94686631ec2232a8ff189c97c8617 100644 (file)
@@ -46,6 +46,7 @@
 #define NFS4_OPEN_RESULT_CONFIRM               0x0002
 #define NFS4_OPEN_RESULT_LOCKTYPE_POSIX                0x0004
 #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_SHARE_ACCESS_MASK 0x000F
@@ -70,6 +71,7 @@
 #define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED         0x20000
 
 #define NFS4_SHARE_WANT_DELEG_TIMESTAMPS               0x100000
+#define NFS4_SHARE_WANT_OPEN_XOR_DELEGATION            0x200000
 
 #define NFS4_CDFC4_FORE        0x1
 #define NFS4_CDFC4_BACK 0x2