diff options
Diffstat (limited to 'fs/nfsd/nfs4callback.c')
-rw-r--r-- | fs/nfsd/nfs4callback.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 128519769ea8..db4188ce9b00 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <linux/sunrpc/xdr.h> | 43 | #include <linux/sunrpc/xdr.h> |
44 | #include <linux/sunrpc/svc.h> | 44 | #include <linux/sunrpc/svc.h> |
45 | #include <linux/sunrpc/clnt.h> | 45 | #include <linux/sunrpc/clnt.h> |
46 | #include <linux/sunrpc/svcsock.h> | ||
46 | #include <linux/nfsd/nfsd.h> | 47 | #include <linux/nfsd/nfsd.h> |
47 | #include <linux/nfsd/state.h> | 48 | #include <linux/nfsd/state.h> |
48 | #include <linux/sunrpc/sched.h> | 49 | #include <linux/sunrpc/sched.h> |
@@ -52,16 +53,19 @@ | |||
52 | 53 | ||
53 | #define NFSPROC4_CB_NULL 0 | 54 | #define NFSPROC4_CB_NULL 0 |
54 | #define NFSPROC4_CB_COMPOUND 1 | 55 | #define NFSPROC4_CB_COMPOUND 1 |
56 | #define NFS4_STATEID_SIZE 16 | ||
55 | 57 | ||
56 | /* Index of predefined Linux callback client operations */ | 58 | /* Index of predefined Linux callback client operations */ |
57 | 59 | ||
58 | enum { | 60 | enum { |
59 | NFSPROC4_CLNT_CB_NULL = 0, | 61 | NFSPROC4_CLNT_CB_NULL = 0, |
60 | NFSPROC4_CLNT_CB_RECALL, | 62 | NFSPROC4_CLNT_CB_RECALL, |
63 | NFSPROC4_CLNT_CB_SEQUENCE, | ||
61 | }; | 64 | }; |
62 | 65 | ||
63 | enum nfs_cb_opnum4 { | 66 | enum nfs_cb_opnum4 { |
64 | OP_CB_RECALL = 4, | 67 | OP_CB_RECALL = 4, |
68 | OP_CB_SEQUENCE = 11, | ||
65 | }; | 69 | }; |
66 | 70 | ||
67 | #define NFS4_MAXTAGLEN 20 | 71 | #define NFS4_MAXTAGLEN 20 |
@@ -70,15 +74,22 @@ enum nfs_cb_opnum4 { | |||
70 | #define NFS4_dec_cb_null_sz 0 | 74 | #define NFS4_dec_cb_null_sz 0 |
71 | #define cb_compound_enc_hdr_sz 4 | 75 | #define cb_compound_enc_hdr_sz 4 |
72 | #define cb_compound_dec_hdr_sz (3 + (NFS4_MAXTAGLEN >> 2)) | 76 | #define cb_compound_dec_hdr_sz (3 + (NFS4_MAXTAGLEN >> 2)) |
77 | #define sessionid_sz (NFS4_MAX_SESSIONID_LEN >> 2) | ||
78 | #define cb_sequence_enc_sz (sessionid_sz + 4 + \ | ||
79 | 1 /* no referring calls list yet */) | ||
80 | #define cb_sequence_dec_sz (op_dec_sz + sessionid_sz + 4) | ||
81 | |||
73 | #define op_enc_sz 1 | 82 | #define op_enc_sz 1 |
74 | #define op_dec_sz 2 | 83 | #define op_dec_sz 2 |
75 | #define enc_nfs4_fh_sz (1 + (NFS4_FHSIZE >> 2)) | 84 | #define enc_nfs4_fh_sz (1 + (NFS4_FHSIZE >> 2)) |
76 | #define enc_stateid_sz (NFS4_STATEID_SIZE >> 2) | 85 | #define enc_stateid_sz (NFS4_STATEID_SIZE >> 2) |
77 | #define NFS4_enc_cb_recall_sz (cb_compound_enc_hdr_sz + \ | 86 | #define NFS4_enc_cb_recall_sz (cb_compound_enc_hdr_sz + \ |
87 | cb_sequence_enc_sz + \ | ||
78 | 1 + enc_stateid_sz + \ | 88 | 1 + enc_stateid_sz + \ |
79 | enc_nfs4_fh_sz) | 89 | enc_nfs4_fh_sz) |
80 | 90 | ||
81 | #define NFS4_dec_cb_recall_sz (cb_compound_dec_hdr_sz + \ | 91 | #define NFS4_dec_cb_recall_sz (cb_compound_dec_hdr_sz + \ |
92 | cb_sequence_dec_sz + \ | ||
82 | op_dec_sz) | 93 | op_dec_sz) |
83 | 94 | ||
84 | /* | 95 | /* |
@@ -137,11 +148,13 @@ xdr_error: \ | |||
137 | } while (0) | 148 | } while (0) |
138 | 149 | ||
139 | struct nfs4_cb_compound_hdr { | 150 | struct nfs4_cb_compound_hdr { |
140 | int status; | 151 | /* args */ |
141 | u32 ident; | 152 | u32 ident; /* minorversion 0 only */ |
142 | u32 nops; | 153 | u32 nops; |
143 | __be32 *nops_p; | 154 | __be32 *nops_p; |
144 | u32 minorversion; | 155 | u32 minorversion; |
156 | /* res */ | ||
157 | int status; | ||
145 | u32 taglen; | 158 | u32 taglen; |
146 | char *tag; | 159 | char *tag; |
147 | }; | 160 | }; |