diff options
-rw-r--r-- | fs/nfsd/nfs4proc.c | 19 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 8 | ||||
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 28 | ||||
-rw-r--r-- | fs/nfsd/xdr4.h | 4 |
4 files changed, 31 insertions, 28 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 3f7dbc410e3..2a9036670b8 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c | |||
@@ -489,14 +489,20 @@ nfsd4_access(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
489 | &access->ac_supported); | 489 | &access->ac_supported); |
490 | } | 490 | } |
491 | 491 | ||
492 | static void gen_boot_verifier(nfs4_verifier *verifier) | ||
493 | { | ||
494 | __be32 verf[2]; | ||
495 | |||
496 | verf[0] = (__be32)nfssvc_boot.tv_sec; | ||
497 | verf[1] = (__be32)nfssvc_boot.tv_usec; | ||
498 | memcpy(verifier->data, verf, sizeof(verifier->data)); | ||
499 | } | ||
500 | |||
492 | static __be32 | 501 | static __be32 |
493 | nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | 502 | nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, |
494 | struct nfsd4_commit *commit) | 503 | struct nfsd4_commit *commit) |
495 | { | 504 | { |
496 | u32 *p = (u32 *)commit->co_verf.data; | 505 | gen_boot_verifier(&commit->co_verf); |
497 | *p++ = nfssvc_boot.tv_sec; | ||
498 | *p++ = nfssvc_boot.tv_usec; | ||
499 | |||
500 | return nfsd_commit(rqstp, &cstate->current_fh, commit->co_offset, | 506 | return nfsd_commit(rqstp, &cstate->current_fh, commit->co_offset, |
501 | commit->co_count); | 507 | commit->co_count); |
502 | } | 508 | } |
@@ -873,7 +879,6 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
873 | { | 879 | { |
874 | stateid_t *stateid = &write->wr_stateid; | 880 | stateid_t *stateid = &write->wr_stateid; |
875 | struct file *filp = NULL; | 881 | struct file *filp = NULL; |
876 | u32 *p; | ||
877 | __be32 status = nfs_ok; | 882 | __be32 status = nfs_ok; |
878 | unsigned long cnt; | 883 | unsigned long cnt; |
879 | 884 | ||
@@ -895,9 +900,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
895 | 900 | ||
896 | cnt = write->wr_buflen; | 901 | cnt = write->wr_buflen; |
897 | write->wr_how_written = write->wr_stable_how; | 902 | write->wr_how_written = write->wr_stable_how; |
898 | p = (u32 *)write->wr_verifier.data; | 903 | gen_boot_verifier(&write->wr_verifier); |
899 | *p++ = nfssvc_boot.tv_sec; | ||
900 | *p++ = nfssvc_boot.tv_usec; | ||
901 | 904 | ||
902 | status = nfsd_write(rqstp, &cstate->current_fh, filp, | 905 | status = nfsd_write(rqstp, &cstate->current_fh, filp, |
903 | write->wr_offset, rqstp->rq_vec, write->wr_vlen, | 906 | write->wr_offset, rqstp->rq_vec, write->wr_vlen, |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index cdc406a28ef..e318964d8ac 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -1174,12 +1174,12 @@ static void gen_clid(struct nfs4_client *clp) | |||
1174 | 1174 | ||
1175 | static void gen_confirm(struct nfs4_client *clp) | 1175 | static void gen_confirm(struct nfs4_client *clp) |
1176 | { | 1176 | { |
1177 | __be32 verf[2]; | ||
1177 | static u32 i; | 1178 | static u32 i; |
1178 | u32 *p; | ||
1179 | 1179 | ||
1180 | p = (u32 *)clp->cl_confirm.data; | 1180 | verf[0] = (__be32)get_seconds(); |
1181 | *p++ = get_seconds(); | 1181 | verf[1] = (__be32)i++; |
1182 | *p++ = i++; | 1182 | memcpy(clp->cl_confirm.data, verf, sizeof(clp->cl_confirm.data)); |
1183 | } | 1183 | } |
1184 | 1184 | ||
1185 | static struct nfs4_stid *find_stateid(struct nfs4_client *cl, stateid_t *t) | 1185 | static struct nfs4_stid *find_stateid(struct nfs4_client *cl, stateid_t *t) |
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index f8fcddca041..bcd8904ab1e 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -749,14 +749,14 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) | |||
749 | goto out; | 749 | goto out; |
750 | break; | 750 | break; |
751 | case NFS4_CREATE_EXCLUSIVE: | 751 | case NFS4_CREATE_EXCLUSIVE: |
752 | READ_BUF(8); | 752 | READ_BUF(NFS4_VERIFIER_SIZE); |
753 | COPYMEM(open->op_verf.data, 8); | 753 | COPYMEM(open->op_verf.data, NFS4_VERIFIER_SIZE); |
754 | break; | 754 | break; |
755 | case NFS4_CREATE_EXCLUSIVE4_1: | 755 | case NFS4_CREATE_EXCLUSIVE4_1: |
756 | if (argp->minorversion < 1) | 756 | if (argp->minorversion < 1) |
757 | goto xdr_error; | 757 | goto xdr_error; |
758 | READ_BUF(8); | 758 | READ_BUF(NFS4_VERIFIER_SIZE); |
759 | COPYMEM(open->op_verf.data, 8); | 759 | COPYMEM(open->op_verf.data, NFS4_VERIFIER_SIZE); |
760 | status = nfsd4_decode_fattr(argp, open->op_bmval, | 760 | status = nfsd4_decode_fattr(argp, open->op_bmval, |
761 | &open->op_iattr, &open->op_acl); | 761 | &open->op_iattr, &open->op_acl); |
762 | if (status) | 762 | if (status) |
@@ -989,8 +989,8 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient | |||
989 | { | 989 | { |
990 | DECODE_HEAD; | 990 | DECODE_HEAD; |
991 | 991 | ||
992 | READ_BUF(8); | 992 | READ_BUF(NFS4_VERIFIER_SIZE); |
993 | COPYMEM(setclientid->se_verf.data, 8); | 993 | COPYMEM(setclientid->se_verf.data, NFS4_VERIFIER_SIZE); |
994 | 994 | ||
995 | status = nfsd4_decode_opaque(argp, &setclientid->se_name); | 995 | status = nfsd4_decode_opaque(argp, &setclientid->se_name); |
996 | if (status) | 996 | if (status) |
@@ -1015,9 +1015,9 @@ nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_s | |||
1015 | { | 1015 | { |
1016 | DECODE_HEAD; | 1016 | DECODE_HEAD; |
1017 | 1017 | ||
1018 | READ_BUF(8 + sizeof(nfs4_verifier)); | 1018 | READ_BUF(8 + NFS4_VERIFIER_SIZE); |
1019 | COPYMEM(&scd_c->sc_clientid, 8); | 1019 | COPYMEM(&scd_c->sc_clientid, 8); |
1020 | COPYMEM(&scd_c->sc_confirm, sizeof(nfs4_verifier)); | 1020 | COPYMEM(&scd_c->sc_confirm, NFS4_VERIFIER_SIZE); |
1021 | 1021 | ||
1022 | DECODE_TAIL; | 1022 | DECODE_TAIL; |
1023 | } | 1023 | } |
@@ -2659,8 +2659,8 @@ nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ | |||
2659 | __be32 *p; | 2659 | __be32 *p; |
2660 | 2660 | ||
2661 | if (!nfserr) { | 2661 | if (!nfserr) { |
2662 | RESERVE_SPACE(8); | 2662 | RESERVE_SPACE(NFS4_VERIFIER_SIZE); |
2663 | WRITEMEM(commit->co_verf.data, 8); | 2663 | WRITEMEM(commit->co_verf.data, NFS4_VERIFIER_SIZE); |
2664 | ADJUST_ARGS(); | 2664 | ADJUST_ARGS(); |
2665 | } | 2665 | } |
2666 | return nfserr; | 2666 | return nfserr; |
@@ -3020,7 +3020,7 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 | |||
3020 | if (resp->xbuf->page_len) | 3020 | if (resp->xbuf->page_len) |
3021 | return nfserr_resource; | 3021 | return nfserr_resource; |
3022 | 3022 | ||
3023 | RESERVE_SPACE(8); /* verifier */ | 3023 | RESERVE_SPACE(NFS4_VERIFIER_SIZE); |
3024 | savep = p; | 3024 | savep = p; |
3025 | 3025 | ||
3026 | /* XXX: Following NFSv3, we ignore the READDIR verifier for now. */ | 3026 | /* XXX: Following NFSv3, we ignore the READDIR verifier for now. */ |
@@ -3221,9 +3221,9 @@ nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct n | |||
3221 | __be32 *p; | 3221 | __be32 *p; |
3222 | 3222 | ||
3223 | if (!nfserr) { | 3223 | if (!nfserr) { |
3224 | RESERVE_SPACE(8 + sizeof(nfs4_verifier)); | 3224 | RESERVE_SPACE(8 + NFS4_VERIFIER_SIZE); |
3225 | WRITEMEM(&scd->se_clientid, 8); | 3225 | WRITEMEM(&scd->se_clientid, 8); |
3226 | WRITEMEM(&scd->se_confirm, sizeof(nfs4_verifier)); | 3226 | WRITEMEM(&scd->se_confirm, NFS4_VERIFIER_SIZE); |
3227 | ADJUST_ARGS(); | 3227 | ADJUST_ARGS(); |
3228 | } | 3228 | } |
3229 | else if (nfserr == nfserr_clid_inuse) { | 3229 | else if (nfserr == nfserr_clid_inuse) { |
@@ -3244,7 +3244,7 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w | |||
3244 | RESERVE_SPACE(16); | 3244 | RESERVE_SPACE(16); |
3245 | WRITE32(write->wr_bytes_written); | 3245 | WRITE32(write->wr_bytes_written); |
3246 | WRITE32(write->wr_how_written); | 3246 | WRITE32(write->wr_how_written); |
3247 | WRITEMEM(write->wr_verifier.data, 8); | 3247 | WRITEMEM(write->wr_verifier.data, NFS4_VERIFIER_SIZE); |
3248 | ADJUST_ARGS(); | 3248 | ADJUST_ARGS(); |
3249 | } | 3249 | } |
3250 | return nfserr; | 3250 | return nfserr; |
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index b89781f1477..1b3501598ab 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h | |||
@@ -228,7 +228,8 @@ struct nfsd4_open { | |||
228 | u32 op_createmode; /* request */ | 228 | u32 op_createmode; /* request */ |
229 | u32 op_bmval[3]; /* request */ | 229 | u32 op_bmval[3]; /* request */ |
230 | struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */ | 230 | struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */ |
231 | nfs4_verifier verf; /* EXCLUSIVE4 */ | 231 | nfs4_verifier op_verf __attribute__((aligned(32))); |
232 | /* EXCLUSIVE4 */ | ||
232 | clientid_t op_clientid; /* request */ | 233 | clientid_t op_clientid; /* request */ |
233 | struct xdr_netobj op_owner; /* request */ | 234 | struct xdr_netobj op_owner; /* request */ |
234 | u32 op_seqid; /* request */ | 235 | u32 op_seqid; /* request */ |
@@ -247,7 +248,6 @@ struct nfsd4_open { | |||
247 | struct nfs4_acl *op_acl; | 248 | struct nfs4_acl *op_acl; |
248 | }; | 249 | }; |
249 | #define op_iattr iattr | 250 | #define op_iattr iattr |
250 | #define op_verf verf | ||
251 | 251 | ||
252 | struct nfsd4_open_confirm { | 252 | struct nfsd4_open_confirm { |
253 | stateid_t oc_req_stateid /* request */; | 253 | stateid_t oc_req_stateid /* request */; |