diff options
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 34ccf815ea8a..ac17a7080239 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -1234,6 +1234,16 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, | |||
1234 | DECODE_TAIL; | 1234 | DECODE_TAIL; |
1235 | } | 1235 | } |
1236 | 1236 | ||
1237 | static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc) | ||
1238 | { | ||
1239 | DECODE_HEAD; | ||
1240 | |||
1241 | READ_BUF(4); | ||
1242 | READ32(rc->rca_one_fs); | ||
1243 | |||
1244 | DECODE_TAIL; | ||
1245 | } | ||
1246 | |||
1237 | static __be32 | 1247 | static __be32 |
1238 | nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p) | 1248 | nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p) |
1239 | { | 1249 | { |
@@ -1346,7 +1356,7 @@ static nfsd4_dec nfsd41_dec_ops[] = { | |||
1346 | [OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_notsupp, | 1356 | [OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_notsupp, |
1347 | [OP_WANT_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp, | 1357 | [OP_WANT_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp, |
1348 | [OP_DESTROY_CLIENTID] = (nfsd4_dec)nfsd4_decode_notsupp, | 1358 | [OP_DESTROY_CLIENTID] = (nfsd4_dec)nfsd4_decode_notsupp, |
1349 | [OP_RECLAIM_COMPLETE] = (nfsd4_dec)nfsd4_decode_notsupp, | 1359 | [OP_RECLAIM_COMPLETE] = (nfsd4_dec)nfsd4_decode_reclaim_complete, |
1350 | }; | 1360 | }; |
1351 | 1361 | ||
1352 | struct nfsd4_minorversion_ops { | 1362 | struct nfsd4_minorversion_ops { |
@@ -1900,7 +1910,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
1900 | if (bmval0 & FATTR4_WORD0_LEASE_TIME) { | 1910 | if (bmval0 & FATTR4_WORD0_LEASE_TIME) { |
1901 | if ((buflen -= 4) < 0) | 1911 | if ((buflen -= 4) < 0) |
1902 | goto out_resource; | 1912 | goto out_resource; |
1903 | WRITE32(NFSD_LEASE_TIME); | 1913 | WRITE32(nfsd4_lease); |
1904 | } | 1914 | } |
1905 | if (bmval0 & FATTR4_WORD0_RDATTR_ERROR) { | 1915 | if (bmval0 & FATTR4_WORD0_RDATTR_ERROR) { |
1906 | if ((buflen -= 4) < 0) | 1916 | if ((buflen -= 4) < 0) |
@@ -3307,11 +3317,14 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo | |||
3307 | iov = &rqstp->rq_res.head[0]; | 3317 | iov = &rqstp->rq_res.head[0]; |
3308 | iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; | 3318 | iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base; |
3309 | BUG_ON(iov->iov_len > PAGE_SIZE); | 3319 | BUG_ON(iov->iov_len > PAGE_SIZE); |
3310 | if (nfsd4_has_session(cs) && cs->status != nfserr_replay_cache) { | 3320 | if (nfsd4_has_session(cs)) { |
3311 | nfsd4_store_cache_entry(resp); | 3321 | if (cs->status != nfserr_replay_cache) { |
3312 | dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__); | 3322 | nfsd4_store_cache_entry(resp); |
3313 | resp->cstate.slot->sl_inuse = false; | 3323 | dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__); |
3314 | nfsd4_put_session(resp->cstate.session); | 3324 | cs->slot->sl_inuse = false; |
3325 | } | ||
3326 | /* Renew the clientid on success and on replay */ | ||
3327 | release_session_client(cs->session); | ||
3315 | } | 3328 | } |
3316 | return 1; | 3329 | return 1; |
3317 | } | 3330 | } |