c5c707f96f
Add support to issue layout recalls to clients. For now we only support full-file recalls to get a simple and stable implementation. This allows to embedd a nfsd4_callback structure in the layout_state and thus avoid any memory allocations under spinlocks during a recall. For normal use cases that do not intent to share a single file between multiple clients this implementation is fully sufficient. To ensure layouts are recalled on local filesystem access each layout state registers a new FL_LAYOUT lease with the kernel file locking code, which filesystems that support pNFS exports that require recalls need to break on conflicting access patterns. The XDR code is based on the old pNFS server implementation by Andy Adamson, Benny Halevy, Boaz Harrosh, Dean Hildebrand, Fred Isaman, Marc Eshel, Mike Sager and Ricardo Labiaga. Signed-off-by: Christoph Hellwig <hch@lst.de>
31 lines
1.1 KiB
C
31 lines
1.1 KiB
C
#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)
|