|
@@ -43,6 +43,7 @@
|
|
|
#include <linux/sunrpc/xdr.h>
|
|
|
#include <linux/sunrpc/svc.h>
|
|
|
#include <linux/sunrpc/clnt.h>
|
|
|
+#include <linux/sunrpc/svcsock.h>
|
|
|
#include <linux/nfsd/nfsd.h>
|
|
|
#include <linux/nfsd/state.h>
|
|
|
#include <linux/sunrpc/sched.h>
|
|
@@ -52,16 +53,19 @@
|
|
|
|
|
|
#define NFSPROC4_CB_NULL 0
|
|
|
#define NFSPROC4_CB_COMPOUND 1
|
|
|
+#define NFS4_STATEID_SIZE 16
|
|
|
|
|
|
/* Index of predefined Linux callback client operations */
|
|
|
|
|
|
enum {
|
|
|
NFSPROC4_CLNT_CB_NULL = 0,
|
|
|
NFSPROC4_CLNT_CB_RECALL,
|
|
|
+ NFSPROC4_CLNT_CB_SEQUENCE,
|
|
|
};
|
|
|
|
|
|
enum nfs_cb_opnum4 {
|
|
|
OP_CB_RECALL = 4,
|
|
|
+ OP_CB_SEQUENCE = 11,
|
|
|
};
|
|
|
|
|
|
#define NFS4_MAXTAGLEN 20
|
|
@@ -70,15 +74,22 @@ enum nfs_cb_opnum4 {
|
|
|
#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)
|
|
|
|
|
|
/*
|
|
@@ -137,11 +148,13 @@ xdr_error: \
|
|
|
} while (0)
|
|
|
|
|
|
struct nfs4_cb_compound_hdr {
|
|
|
- int status;
|
|
|
- u32 ident;
|
|
|
+ /* args */
|
|
|
+ u32 ident; /* minorversion 0 only */
|
|
|
u32 nops;
|
|
|
__be32 *nops_p;
|
|
|
u32 minorversion;
|
|
|
+ /* res */
|
|
|
+ int status;
|
|
|
u32 taglen;
|
|
|
char *tag;
|
|
|
};
|