|
@@ -1950,6 +1950,17 @@ fail:
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+nfsd4_encode_stateid(struct nfsd4_compoundres *resp, stateid_t *sid)
|
|
|
+{
|
|
|
+ ENCODE_HEAD;
|
|
|
+
|
|
|
+ RESERVE_SPACE(sizeof(stateid_t));
|
|
|
+ WRITE32(sid->si_generation);
|
|
|
+ WRITEMEM(&sid->si_opaque, sizeof(stateid_opaque_t));
|
|
|
+ ADJUST_ARGS();
|
|
|
+}
|
|
|
+
|
|
|
static __be32
|
|
|
nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_access *access)
|
|
|
{
|
|
@@ -1969,12 +1980,9 @@ nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_c
|
|
|
{
|
|
|
ENCODE_SEQID_OP_HEAD;
|
|
|
|
|
|
- if (!nfserr) {
|
|
|
- RESERVE_SPACE(sizeof(stateid_t));
|
|
|
- WRITE32(close->cl_stateid.si_generation);
|
|
|
- WRITEMEM(&close->cl_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
- ADJUST_ARGS();
|
|
|
- }
|
|
|
+ if (!nfserr)
|
|
|
+ nfsd4_encode_stateid(resp, &close->cl_stateid);
|
|
|
+
|
|
|
ENCODE_SEQID_OP_TAIL(close->cl_stateowner);
|
|
|
return nfserr;
|
|
|
}
|
|
@@ -2074,12 +2082,9 @@ nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lo
|
|
|
{
|
|
|
ENCODE_SEQID_OP_HEAD;
|
|
|
|
|
|
- if (!nfserr) {
|
|
|
- RESERVE_SPACE(4 + sizeof(stateid_t));
|
|
|
- WRITE32(lock->lk_resp_stateid.si_generation);
|
|
|
- WRITEMEM(&lock->lk_resp_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
- ADJUST_ARGS();
|
|
|
- } else if (nfserr == nfserr_denied)
|
|
|
+ if (!nfserr)
|
|
|
+ nfsd4_encode_stateid(resp, &lock->lk_resp_stateid);
|
|
|
+ else if (nfserr == nfserr_denied)
|
|
|
nfsd4_encode_lock_denied(resp, &lock->lk_denied);
|
|
|
|
|
|
ENCODE_SEQID_OP_TAIL(lock->lk_replay_owner);
|
|
@@ -2099,13 +2104,9 @@ nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l
|
|
|
{
|
|
|
ENCODE_SEQID_OP_HEAD;
|
|
|
|
|
|
- if (!nfserr) {
|
|
|
- RESERVE_SPACE(sizeof(stateid_t));
|
|
|
- WRITE32(locku->lu_stateid.si_generation);
|
|
|
- WRITEMEM(&locku->lu_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
- ADJUST_ARGS();
|
|
|
- }
|
|
|
-
|
|
|
+ if (!nfserr)
|
|
|
+ nfsd4_encode_stateid(resp, &locku->lu_stateid);
|
|
|
+
|
|
|
ENCODE_SEQID_OP_TAIL(locku->lu_stateowner);
|
|
|
return nfserr;
|
|
|
}
|
|
@@ -2133,9 +2134,8 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
|
|
|
if (nfserr)
|
|
|
goto out;
|
|
|
|
|
|
- RESERVE_SPACE(40 + sizeof(stateid_t));
|
|
|
- WRITE32(open->op_stateid.si_generation);
|
|
|
- WRITEMEM(&open->op_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
+ nfsd4_encode_stateid(resp, &open->op_stateid);
|
|
|
+ RESERVE_SPACE(40);
|
|
|
WRITECINFO(open->op_cinfo);
|
|
|
WRITE32(open->op_rflags);
|
|
|
WRITE32(2);
|
|
@@ -2148,10 +2148,8 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
|
|
|
case NFS4_OPEN_DELEGATE_NONE:
|
|
|
break;
|
|
|
case NFS4_OPEN_DELEGATE_READ:
|
|
|
- RESERVE_SPACE(20 + sizeof(stateid_t));
|
|
|
- WRITE32(open->op_delegate_stateid.si_generation);
|
|
|
- WRITEMEM(&open->op_delegate_stateid.si_opaque,
|
|
|
- sizeof(stateid_opaque_t));
|
|
|
+ nfsd4_encode_stateid(resp, &open->op_delegate_stateid);
|
|
|
+ RESERVE_SPACE(20);
|
|
|
WRITE32(open->op_recall);
|
|
|
|
|
|
/*
|
|
@@ -2164,10 +2162,8 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op
|
|
|
ADJUST_ARGS();
|
|
|
break;
|
|
|
case NFS4_OPEN_DELEGATE_WRITE:
|
|
|
- RESERVE_SPACE(32 + sizeof(stateid_t));
|
|
|
- WRITE32(open->op_delegate_stateid.si_generation);
|
|
|
- WRITEMEM(&open->op_delegate_stateid.si_opaque,
|
|
|
- sizeof(stateid_opaque_t));
|
|
|
+ nfsd4_encode_stateid(resp, &open->op_delegate_stateid);
|
|
|
+ RESERVE_SPACE(32);
|
|
|
WRITE32(0);
|
|
|
|
|
|
/*
|
|
@@ -2199,13 +2195,9 @@ static __be32
|
|
|
nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_confirm *oc)
|
|
|
{
|
|
|
ENCODE_SEQID_OP_HEAD;
|
|
|
-
|
|
|
- if (!nfserr) {
|
|
|
- RESERVE_SPACE(sizeof(stateid_t));
|
|
|
- WRITE32(oc->oc_resp_stateid.si_generation);
|
|
|
- WRITEMEM(&oc->oc_resp_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
- ADJUST_ARGS();
|
|
|
- }
|
|
|
+
|
|
|
+ if (!nfserr)
|
|
|
+ nfsd4_encode_stateid(resp, &oc->oc_resp_stateid);
|
|
|
|
|
|
ENCODE_SEQID_OP_TAIL(oc->oc_stateowner);
|
|
|
return nfserr;
|
|
@@ -2215,13 +2207,9 @@ static __be32
|
|
|
nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_downgrade *od)
|
|
|
{
|
|
|
ENCODE_SEQID_OP_HEAD;
|
|
|
-
|
|
|
- if (!nfserr) {
|
|
|
- RESERVE_SPACE(sizeof(stateid_t));
|
|
|
- WRITE32(od->od_stateid.si_generation);
|
|
|
- WRITEMEM(&od->od_stateid.si_opaque, sizeof(stateid_opaque_t));
|
|
|
- ADJUST_ARGS();
|
|
|
- }
|
|
|
+
|
|
|
+ if (!nfserr)
|
|
|
+ nfsd4_encode_stateid(resp, &od->od_stateid);
|
|
|
|
|
|
ENCODE_SEQID_OP_TAIL(od->od_stateowner);
|
|
|
return nfserr;
|