mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 13:15:57 +00:00
039b296f66
Add support for the delegated timestamps on write delegations. This allows the server to proxy timestamps from the delegation holder to other clients that are doing GETATTRs vs. the same inode. When OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS bit is set in the OPEN call, set the dl_type to the *_ATTRS_DELEG flavor of delegation. Add timespec64 fields to nfs4_cb_fattr and decode the timestamps into those. Vet those timestamps according to the delstid spec and update the inode attrs if necessary. Signed-off-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
79 lines
2.7 KiB
C
79 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#define NFS4_MAXTAGLEN 20
|
|
|
|
#define NFS4_enc_cb_null_sz 0
|
|
#define NFS4_dec_cb_null_sz 0
|
|
#define cb_compound_enc_hdr_sz 4
|
|
#define cb_compound_dec_hdr_sz (3 + (NFS4_MAXTAGLEN >> 2))
|
|
#define sessionid_sz (NFS4_MAX_SESSIONID_LEN >> 2)
|
|
#define cb_sequence_enc_sz (sessionid_sz + 4 + \
|
|
1 /* no referring calls list yet */)
|
|
#define cb_sequence_dec_sz (op_dec_sz + sessionid_sz + 4)
|
|
|
|
#define op_enc_sz 1
|
|
#define op_dec_sz 2
|
|
#define enc_nfs4_fh_sz (1 + (NFS4_FHSIZE >> 2))
|
|
#define enc_stateid_sz (NFS4_STATEID_SIZE >> 2)
|
|
#define NFS4_enc_cb_recall_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
1 + enc_stateid_sz + \
|
|
enc_nfs4_fh_sz)
|
|
|
|
#define NFS4_dec_cb_recall_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + \
|
|
op_dec_sz)
|
|
#define NFS4_enc_cb_layout_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
1 + 3 + \
|
|
enc_nfs4_fh_sz + 4)
|
|
#define NFS4_dec_cb_layout_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + \
|
|
op_dec_sz)
|
|
|
|
#define NFS4_enc_cb_notify_lock_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
2 + 1 + \
|
|
XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
|
|
enc_nfs4_fh_sz)
|
|
#define NFS4_dec_cb_notify_lock_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + \
|
|
op_dec_sz)
|
|
#define enc_cb_offload_info_sz (1 + 1 + 2 + 1 + \
|
|
XDR_QUADLEN(NFS4_VERIFIER_SIZE))
|
|
#define NFS4_enc_cb_offload_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
enc_nfs4_fh_sz + \
|
|
enc_stateid_sz + \
|
|
enc_cb_offload_info_sz)
|
|
#define NFS4_dec_cb_offload_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + \
|
|
op_dec_sz)
|
|
#define NFS4_enc_cb_recall_any_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
1 + 1 + 1)
|
|
#define NFS4_dec_cb_recall_any_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + \
|
|
op_dec_sz)
|
|
|
|
/*
|
|
* 1: CB_GETATTR opcode (32-bit)
|
|
* N: file_handle
|
|
* 1: number of entry in attribute array (32-bit)
|
|
* 3: entry 0-2 in attribute array (32-bit * 3)
|
|
*/
|
|
#define NFS4_enc_cb_getattr_sz (cb_compound_enc_hdr_sz + \
|
|
cb_sequence_enc_sz + \
|
|
1 + enc_nfs4_fh_sz + 1 + 3)
|
|
/*
|
|
* 4: fattr_bitmap_maxsz
|
|
* 1: attribute array len
|
|
* 2: change attr (64-bit)
|
|
* 2: size (64-bit)
|
|
* 2: atime.seconds (64-bit)
|
|
* 1: atime.nanoseconds (32-bit)
|
|
* 2: mtime.seconds (64-bit)
|
|
* 1: mtime.nanoseconds (32-bit)
|
|
*/
|
|
#define NFS4_dec_cb_getattr_sz (cb_compound_dec_hdr_sz + \
|
|
cb_sequence_dec_sz + 4 + 1 + 2 + 2 + 2 + 1 + 2 + 1 + op_dec_sz)
|