From: Benny Halevy <bhalevy@panasas.com>
To: pnfs@linux-nfs.org
Cc: trond.myklebust@fys.uio.no, linux-nfs@vger.kernel.org
Subject: Re: [pnfs] [RFC 04/85] FIXME: NFS: Increment operation number in each encode_* routine
Date: Mon, 17 Nov 2008 15:26:44 +0200 [thread overview]
Message-ID: <49217114.4080907@panasas.com> (raw)
In-Reply-To: <1226348300-7130-1-git-send-email-bhalevy@panasas.com>
On Nov. 10, 2008, 22:18 +0200, Benny Halevy <bhalevy@panasas.com> wrote:
> From: Andy Adamson <andros@netapp.com>
>
> FIXME: bhalevy: is this a good opportunity for a cleanup-only patch to fix whitespacing?
>
> Pass in the compound_hdr and bump the number of operations in each encode_*
> subroutine so as to allow us to more easily construct new compound statements.
>
> Fix tabs, do not fix 'do not use assignment in if condition' warnings.
>
> Signed-off-by: Andy Adamson<andros@netapp.com>
> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
review 11-14: andy will submit:
* whitespace clenaup
* status removal
* move nops ptr into compound_hdr
> ---
> fs/nfs/nfs4xdr.c | 630 ++++++++++++++++++++++++++++++++++--------------------
> 1 files changed, 401 insertions(+), 229 deletions(-)
>
> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
> index 69b5a56..c1ff9c9 100644
> --- a/fs/nfs/nfs4xdr.c
> +++ b/fs/nfs/nfs4xdr.c
> @@ -578,9 +578,10 @@ static void encode_string(struct xdr_stream *xdr, unsigned int len, const char *
> xdr_encode_opaque(p, str, len);
> }
>
> -static int encode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr)
> +static __u32 *
> +encode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr)
> {
> - __be32 *p;
> + __be32 *p, *nops;
>
> dprintk("encode_compound: tag=%.*s\n", (int)hdr->taglen, hdr->tag);
> BUG_ON(hdr->taglen > NFS4_MAXTAGLEN);
> @@ -588,8 +589,14 @@ static int encode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr)
> WRITE32(hdr->taglen);
> WRITEMEM(hdr->tag, hdr->taglen);
> WRITE32(NFS4_MINOR_VERSION);
> + nops = p;
> WRITE32(hdr->nops);
> - return 0;
> + return nops;
> +}
> +
> +static inline void encode_nops(__be32 *nops, struct compound_hdr *hdr)
> +{
> + *nops = htonl(hdr->nops);
> }
>
> static void encode_nfs4_verifier(struct xdr_stream *xdr, const nfs4_verifier *verf)
> @@ -728,18 +735,22 @@ static int encode_attrs(struct xdr_stream *xdr, const struct iattr *iap, const s
> return status;
> }
>
> -static int encode_access(struct xdr_stream *xdr, u32 access)
> +static int
> +encode_access(struct xdr_stream *xdr, u32 access, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(8);
> WRITE32(OP_ACCESS);
> WRITE32(access);
> -
> + hdr->nops++;
> +
> return 0;
> }
>
> -static int encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg)
> +static int
> +encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -747,23 +758,29 @@ static int encode_close(struct xdr_stream *xdr, const struct nfs_closeargs *arg)
> WRITE32(OP_CLOSE);
> WRITE32(arg->seqid->sequence->counter);
> WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_commit(struct xdr_stream *xdr, const struct nfs_writeargs *args)
> +static int
> +encode_commit(struct xdr_stream *xdr, const struct nfs_writeargs *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> - RESERVE_SPACE(16);
> - WRITE32(OP_COMMIT);
> - WRITE64(args->offset);
> - WRITE32(args->count);
> + RESERVE_SPACE(16);
> + WRITE32(OP_COMMIT);
> + WRITE64(args->offset);
> + WRITE32(args->count);
> + hdr->nops++;
>
> - return 0;
> + return 0;
> }
>
> -static int encode_create(struct xdr_stream *xdr, const struct nfs4_create_arg *create)
> +static int
> +encode_create(struct xdr_stream *xdr, const struct nfs4_create_arg *create,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -791,11 +808,14 @@ static int encode_create(struct xdr_stream *xdr, const struct nfs4_create_arg *c
> RESERVE_SPACE(4 + create->name->len);
> WRITE32(create->name->len);
> WRITEMEM(create->name->name, create->name->len);
> + hdr->nops++;
>
> return encode_attrs(xdr, create->attrs, create->server);
> }
>
> -static int encode_getattr_one(struct xdr_stream *xdr, uint32_t bitmap)
> +static int
> +encode_getattr_one(struct xdr_stream *xdr, uint32_t bitmap,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -803,10 +823,13 @@ static int encode_getattr_one(struct xdr_stream *xdr, uint32_t bitmap)
> WRITE32(OP_GETATTR);
> WRITE32(1);
> WRITE32(bitmap);
> + hdr->nops++;
> return 0;
> }
>
> -static int encode_getattr_two(struct xdr_stream *xdr, uint32_t bm0, uint32_t bm1)
> +static int
> +encode_getattr_two(struct xdr_stream *xdr, uint32_t bm0, uint32_t bm1,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -815,40 +838,51 @@ static int encode_getattr_two(struct xdr_stream *xdr, uint32_t bm0, uint32_t bm1
> WRITE32(2);
> WRITE32(bm0);
> WRITE32(bm1);
> + hdr->nops++;
> return 0;
> }
>
> -static int encode_getfattr(struct xdr_stream *xdr, const u32* bitmask)
> +static int
> +encode_getfattr(struct xdr_stream *xdr, const u32 *bitmask,
> + struct compound_hdr *hdr)
> {
> return encode_getattr_two(xdr,
> bitmask[0] & nfs4_fattr_bitmap[0],
> - bitmask[1] & nfs4_fattr_bitmap[1]);
> + bitmask[1] & nfs4_fattr_bitmap[1], hdr);
> }
>
> -static int encode_fsinfo(struct xdr_stream *xdr, const u32* bitmask)
> +static int
> +encode_fsinfo(struct xdr_stream *xdr, const u32 *bitmask,
> + struct compound_hdr *hdr)
> {
> return encode_getattr_two(xdr, bitmask[0] & nfs4_fsinfo_bitmap[0],
> - bitmask[1] & nfs4_fsinfo_bitmap[1]);
> + bitmask[1] & nfs4_fsinfo_bitmap[1], hdr);
> }
>
> -static int encode_fs_locations(struct xdr_stream *xdr, const u32* bitmask)
> +static int
> +encode_fs_locations(struct xdr_stream *xdr, const u32 *bitmask,
> + struct compound_hdr *hdr)
> {
> return encode_getattr_two(xdr,
> bitmask[0] & nfs4_fs_locations_bitmap[0],
> - bitmask[1] & nfs4_fs_locations_bitmap[1]);
> + bitmask[1] & nfs4_fs_locations_bitmap[1],
> + hdr);
> }
>
> -static int encode_getfh(struct xdr_stream *xdr)
> +static int encode_getfh(struct xdr_stream *xdr, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(4);
> WRITE32(OP_GETFH);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_link(struct xdr_stream *xdr, const struct qstr *name)
> +static int
> +encode_link(struct xdr_stream *xdr, const struct qstr *name,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -856,6 +890,7 @@ static int encode_link(struct xdr_stream *xdr, const struct qstr *name)
> WRITE32(OP_LINK);
> WRITE32(name->len);
> WRITEMEM(name->name, name->len);
> + hdr->nops++;
>
> return 0;
> }
> @@ -878,7 +913,9 @@ static inline uint64_t nfs4_lock_length(struct file_lock *fl)
> * opcode,type,reclaim,offset,length,new_lock_owner = 32
> * open_seqid,open_stateid,lock_seqid,lock_owner.clientid, lock_owner.id = 40
> */
> -static int encode_lock(struct xdr_stream *xdr, const struct nfs_lock_args *args)
> +static int
> +encode_lock(struct xdr_stream *xdr, const struct nfs_lock_args *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -904,11 +941,14 @@ static int encode_lock(struct xdr_stream *xdr, const struct nfs_lock_args *args)
> WRITEMEM(args->lock_stateid->data, NFS4_STATEID_SIZE);
> WRITE32(args->lock_seqid->sequence->counter);
> }
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_lockt(struct xdr_stream *xdr, const struct nfs_lockt_args *args)
> +static int
> +encode_lockt(struct xdr_stream *xdr, const struct nfs_lockt_args *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -921,11 +961,14 @@ static int encode_lockt(struct xdr_stream *xdr, const struct nfs_lockt_args *arg
> WRITE32(16);
> WRITEMEM("lock id:", 8);
> WRITE64(args->lock_owner.id);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *args)
> +static int
> +encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -936,11 +979,14 @@ static int encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *arg
> WRITEMEM(args->stateid->data, NFS4_STATEID_SIZE);
> WRITE64(args->fl->fl_start);
> WRITE64(nfs4_lock_length(args->fl));
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_lookup(struct xdr_stream *xdr, const struct qstr *name)
> +static int
> +encode_lookup(struct xdr_stream *xdr, const struct qstr *name,
> + struct compound_hdr *hdr)
> {
> int len = name->len;
> __be32 *p;
> @@ -949,6 +995,7 @@ static int encode_lookup(struct xdr_stream *xdr, const struct qstr *name)
> WRITE32(OP_LOOKUP);
> WRITE32(len);
> WRITEMEM(name->name, len);
> + hdr->nops++;
>
> return 0;
> }
> @@ -1072,7 +1119,9 @@ static inline void encode_claim_delegate_cur(struct xdr_stream *xdr, const struc
> encode_string(xdr, name->len, name->name);
> }
>
> -static int encode_open(struct xdr_stream *xdr, const struct nfs_openargs *arg)
> +static int
> +encode_open(struct xdr_stream *xdr, const struct nfs_openargs *arg,
> + struct compound_hdr *hdr)
> {
> encode_openhdr(xdr, arg);
> encode_opentype(xdr, arg);
> @@ -1089,10 +1138,14 @@ static int encode_open(struct xdr_stream *xdr, const struct nfs_openargs *arg)
> default:
> BUG();
> }
> + hdr->nops++;
> return 0;
> }
>
> -static int encode_open_confirm(struct xdr_stream *xdr, const struct nfs_open_confirmargs *arg)
> +static int
> +encode_open_confirm(struct xdr_stream *xdr,
> + const struct nfs_open_confirmargs *arg,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1100,11 +1153,14 @@ static int encode_open_confirm(struct xdr_stream *xdr, const struct nfs_open_con
> WRITE32(OP_OPEN_CONFIRM);
> WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
> WRITE32(arg->seqid->sequence->counter);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closeargs *arg)
> +static int
> +encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closeargs *arg,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1113,11 +1169,13 @@ static int encode_open_downgrade(struct xdr_stream *xdr, const struct nfs_closea
> WRITEMEM(arg->stateid->data, NFS4_STATEID_SIZE);
> WRITE32(arg->seqid->sequence->counter);
> encode_share_access(xdr, arg->open_flags);
> + hdr->nops++;
> return 0;
> }
>
> static int
> -encode_putfh(struct xdr_stream *xdr, const struct nfs_fh *fh)
> +encode_putfh(struct xdr_stream *xdr, const struct nfs_fh *fh,
> + struct compound_hdr *hdr)
> {
> int len = fh->size;
> __be32 *p;
> @@ -1126,21 +1184,24 @@ encode_putfh(struct xdr_stream *xdr, const struct nfs_fh *fh)
> WRITE32(OP_PUTFH);
> WRITE32(len);
> WRITEMEM(fh->data, len);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_putrootfh(struct xdr_stream *xdr)
> +static int encode_putrootfh(struct xdr_stream *xdr, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(4);
> WRITE32(OP_PUTROOTFH);
> + hdr->nops++;
>
> return 0;
> }
>
> -static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context *ctx)
> +static void
> +encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context *ctx)
> {
> nfs4_stateid stateid;
> __be32 *p;
> @@ -1153,7 +1214,9 @@ static void encode_stateid(struct xdr_stream *xdr, const struct nfs_open_context
> WRITEMEM(zero_stateid.data, NFS4_STATEID_SIZE);
> }
>
> -static int encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args)
> +static int
> +encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1165,11 +1228,14 @@ static int encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args)
> RESERVE_SPACE(12);
> WRITE64(args->offset);
> WRITE32(args->count);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir, struct rpc_rqst *req)
> +static int
> +encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg *readdir,
> + struct rpc_rqst *req, struct compound_hdr *hdr)
> {
> uint32_t attrs[2] = {
> FATTR4_WORD0_RDATTR_ERROR|FATTR4_WORD0_FILEID,
> @@ -1191,6 +1257,7 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
> attrs[1] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID;
> WRITE32(attrs[0] & readdir->bitmask[0]);
> WRITE32(attrs[1] & readdir->bitmask[1]);
> + hdr->nops++;
> dprintk("%s: cookie = %Lu, verifier = %08x:%08x, bitmap = %08x:%08x\n",
> __func__,
> (unsigned long long)readdir->cookie,
> @@ -1202,17 +1269,22 @@ static int encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
> return 0;
> }
>
> -static int encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink, struct rpc_rqst *req)
> +static int
> +encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink,
> + struct rpc_rqst *req, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(4);
> WRITE32(OP_READLINK);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_remove(struct xdr_stream *xdr, const struct qstr *name)
> +static int
> +encode_remove(struct xdr_stream *xdr, const struct qstr *name,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1220,11 +1292,14 @@ static int encode_remove(struct xdr_stream *xdr, const struct qstr *name)
> WRITE32(OP_REMOVE);
> WRITE32(name->len);
> WRITEMEM(name->name, name->len);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_rename(struct xdr_stream *xdr, const struct qstr *oldname, const struct qstr *newname)
> +static int
> +encode_rename(struct xdr_stream *xdr, const struct qstr *oldname,
> + const struct qstr *newname, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1236,34 +1311,40 @@ static int encode_rename(struct xdr_stream *xdr, const struct qstr *oldname, con
> RESERVE_SPACE(4 + newname->len);
> WRITE32(newname->len);
> WRITEMEM(newname->name, newname->len);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_renew(struct xdr_stream *xdr, const struct nfs_client *client_stateid)
> +static int
> +encode_renew(struct xdr_stream *xdr, const struct nfs_client *client_stateid,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(12);
> WRITE32(OP_RENEW);
> WRITE64(client_stateid->cl_clientid);
> + hdr->nops++;
>
> return 0;
> }
>
> static int
> -encode_restorefh(struct xdr_stream *xdr)
> +encode_restorefh(struct xdr_stream *xdr, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(4);
> WRITE32(OP_RESTOREFH);
> + hdr->nops++;
>
> return 0;
> }
>
> static int
> -encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg)
> +encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1278,21 +1359,25 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg)
> RESERVE_SPACE(4);
> WRITE32(arg->acl_len);
> xdr_write_pages(xdr, arg->acl_pages, arg->acl_pgbase, arg->acl_len);
> + hdr->nops++;
> return 0;
> }
>
> static int
> -encode_savefh(struct xdr_stream *xdr)
> +encode_savefh(struct xdr_stream *xdr, struct compound_hdr *hdr)
> {
> __be32 *p;
>
> RESERVE_SPACE(4);
> WRITE32(OP_SAVEFH);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *arg, const struct nfs_server *server)
> +static int
> +encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *arg,
> + const struct nfs_server *server, struct compound_hdr *hdr)
> {
> int status;
> __be32 *p;
> @@ -1300,6 +1385,7 @@ static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *
> RESERVE_SPACE(4+NFS4_STATEID_SIZE);
> WRITE32(OP_SETATTR);
> WRITEMEM(arg->stateid.data, NFS4_STATEID_SIZE);
> + hdr->nops++;
>
> if ((status = encode_attrs(xdr, arg->iap, server)))
> return status;
> @@ -1307,7 +1393,10 @@ static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *
> return 0;
> }
>
> -static int encode_setclientid(struct xdr_stream *xdr, const struct nfs4_setclientid *setclientid)
> +static int
> +encode_setclientid(struct xdr_stream *xdr,
> + const struct nfs4_setclientid *setclientid,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1322,11 +1411,15 @@ static int encode_setclientid(struct xdr_stream *xdr, const struct nfs4_setclien
> encode_string(xdr, setclientid->sc_uaddr_len, setclientid->sc_uaddr);
> RESERVE_SPACE(4);
> WRITE32(setclientid->sc_cb_ident);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_setclientid_confirm(struct xdr_stream *xdr, const struct nfs_client *client_state)
> +static int
> +encode_setclientid_confirm(struct xdr_stream *xdr,
> + const struct nfs_client *client_state,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1334,11 +1427,14 @@ static int encode_setclientid_confirm(struct xdr_stream *xdr, const struct nfs_c
> WRITE32(OP_SETCLIENTID_CONFIRM);
> WRITE64(client_state->cl_clientid);
> WRITEMEM(client_state->cl_confirm.data, NFS4_VERIFIER_SIZE);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *args)
> +static int
> +encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *args,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1353,11 +1449,14 @@ static int encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *args
> WRITE32(args->count);
>
> xdr_write_pages(xdr, args->pages, args->pgbase, args->count);
> + hdr->nops++;
>
> return 0;
> }
>
> -static int encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *stateid)
> +static int
> +encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *stateid,
> + struct compound_hdr *hdr)
> {
> __be32 *p;
>
> @@ -1365,6 +1464,7 @@ static int encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *statei
>
> WRITE32(OP_DELEGRETURN);
> WRITEMEM(stateid->data, NFS4_STATEID_SIZE);
> + hdr->nops++;
> return 0;
>
> }
> @@ -1379,20 +1479,22 @@ static int nfs4_xdr_enc_access(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status != 0)
> goto out;
> - status = encode_access(&xdr, args->access);
> + status = encode_access(&xdr, args->access, &hdr);
> if (status != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1403,20 +1505,22 @@ static int nfs4_xdr_enc_lookup(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 4,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->dir_fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_lookup(&xdr, args->name)) != 0)
> + if ((status = encode_lookup(&xdr, args->name, &hdr)) != 0)
> goto out;
> - if ((status = encode_getfh(&xdr)) != 0)
> + if ((status = encode_getfh(&xdr, &hdr)) != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1427,17 +1531,19 @@ static int nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, __be32 *p, const struc
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putrootfh(&xdr)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putrootfh(&xdr, &hdr)) != 0)
> goto out;
> - if ((status = encode_getfh(&xdr)) == 0)
> - status = encode_getfattr(&xdr, args->bitmask);
> + if ((status = encode_getfh(&xdr, &hdr)) == 0)
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1448,18 +1554,20 @@ static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->fh)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_remove(&xdr, &args->name)) != 0)
> + if ((status = encode_remove(&xdr, &args->name, &hdr)) != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1470,26 +1578,29 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 7,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->old_dir)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->old_dir, &hdr)) != 0)
> goto out;
> - if ((status = encode_savefh(&xdr)) != 0)
> + if ((status = encode_savefh(&xdr, &hdr)) != 0)
> goto out;
> - if ((status = encode_putfh(&xdr, args->new_dir)) != 0)
> + if ((status = encode_putfh(&xdr, args->new_dir, &hdr)) != 0)
> goto out;
> - if ((status = encode_rename(&xdr, args->old_name, args->new_name)) != 0)
> + if ((status = encode_rename(&xdr, args->old_name, args->new_name,
> + &hdr)) != 0)
> goto out;
> - if ((status = encode_getfattr(&xdr, args->bitmask)) != 0)
> + if ((status = encode_getfattr(&xdr, args->bitmask, &hdr)) != 0)
> goto out;
> - if ((status = encode_restorefh(&xdr)) != 0)
> + if ((status = encode_restorefh(&xdr, &hdr)) != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1500,26 +1611,28 @@ static int nfs4_xdr_enc_link(struct rpc_rqst *req, __be32 *p, const struct nfs4_
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 7,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->fh)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_savefh(&xdr)) != 0)
> + if ((status = encode_savefh(&xdr, &hdr)) != 0)
> goto out;
> - if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)
> + if ((status = encode_putfh(&xdr, args->dir_fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_link(&xdr, args->name)) != 0)
> + if ((status = encode_link(&xdr, args->name, &hdr)) != 0)
> goto out;
> - if ((status = encode_getfattr(&xdr, args->bitmask)) != 0)
> + if ((status = encode_getfattr(&xdr, args->bitmask, &hdr)) != 0)
> goto out;
> - if ((status = encode_restorefh(&xdr)) != 0)
> + if ((status = encode_restorefh(&xdr, &hdr)) != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1530,26 +1643,28 @@ static int nfs4_xdr_enc_create(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 7,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->dir_fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_savefh(&xdr)) != 0)
> + if ((status = encode_savefh(&xdr, &hdr)) != 0)
> goto out;
> - if ((status = encode_create(&xdr, args)) != 0)
> + if ((status = encode_create(&xdr, args, &hdr)) != 0)
> goto out;
> - if ((status = encode_getfh(&xdr)) != 0)
> + if ((status = encode_getfh(&xdr, &hdr)) != 0)
> goto out;
> - if ((status = encode_getfattr(&xdr, args->bitmask)) != 0)
> + if ((status = encode_getfattr(&xdr, args->bitmask, &hdr)) != 0)
> goto out;
> - if ((status = encode_restorefh(&xdr)) != 0)
> + if ((status = encode_restorefh(&xdr, &hdr)) != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1568,14 +1683,16 @@ static int nfs4_xdr_enc_getattr(struct rpc_rqst *req, __be32 *p, const struct nf
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->fh)) == 0)
> - status = encode_getfattr(&xdr, args->bitmask);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->fh, &hdr)) == 0)
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1586,20 +1703,22 @@ static int nfs4_xdr_enc_close(struct rpc_rqst *req, __be32 *p, struct nfs_closea
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_close(&xdr, args);
> + status = encode_close(&xdr, args, &hdr);
> if (status != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1610,32 +1729,34 @@ static int nfs4_xdr_enc_open(struct rpc_rqst *req, __be32 *p, struct nfs_openarg
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 7,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_savefh(&xdr);
> + status = encode_savefh(&xdr, &hdr);
> if (status)
> goto out;
> - status = encode_open(&xdr, args);
> + status = encode_open(&xdr, args, &hdr);
> if (status)
> goto out;
> - status = encode_getfh(&xdr);
> + status = encode_getfh(&xdr, &hdr);
> if (status)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> if (status)
> goto out;
> - status = encode_restorefh(&xdr);
> + status = encode_restorefh(&xdr, &hdr);
> if (status)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1646,17 +1767,19 @@ static int nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, __be32 *p, struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_open_confirm(&xdr, args);
> + status = encode_open_confirm(&xdr, args, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1667,20 +1790,22 @@ static int nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, __be32 *p, struct nfs_
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_open(&xdr, args);
> + status = encode_open(&xdr, args, &hdr);
> if (status)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1691,20 +1816,22 @@ static int nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, __be32 *p, struct n
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_open_downgrade(&xdr, args);
> + status = encode_open_downgrade(&xdr, args, &hdr);
> if (status != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1715,17 +1842,19 @@ static int nfs4_xdr_enc_lock(struct rpc_rqst *req, __be32 *p, struct nfs_lock_ar
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_lock(&xdr, args);
> + status = encode_lock(&xdr, args, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1736,17 +1865,19 @@ static int nfs4_xdr_enc_lockt(struct rpc_rqst *req, __be32 *p, struct nfs_lockt_
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_lockt(&xdr, args);
> + status = encode_lockt(&xdr, args, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1757,17 +1888,19 @@ static int nfs4_xdr_enc_locku(struct rpc_rqst *req, __be32 *p, struct nfs_locku_
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_locku(&xdr, args);
> + status = encode_locku(&xdr, args, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1778,18 +1911,19 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
> unsigned int replen;
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_readlink(&xdr, args, req);
> + status = encode_readlink(&xdr, args, req, &hdr);
>
> /* set up reply kvec
> * toplevel_status + taglen + rescount + OP_PUTFH + status
> @@ -1800,6 +1934,7 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
> args->pgbase, args->pglen);
>
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1810,18 +1945,19 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
> int replen;
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if(status)
> goto out;
> - status = encode_readdir(&xdr, args, req);
> + status = encode_readdir(&xdr, args, req, &hdr);
>
> /* set up reply kvec
> * toplevel_status + taglen + rescount + OP_PUTFH + status
> @@ -1835,6 +1971,7 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
> args->pgbase, args->count);
>
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1846,16 +1983,17 @@ static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readarg
> struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int replen, status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_read(&xdr, args);
> + status = encode_read(&xdr, args, &hdr);
> if (status)
> goto out;
>
> @@ -1868,6 +2006,7 @@ static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readarg
> args->pages, args->pgbase, args->count);
> req->rq_rcv_buf.flags |= XDRBUF_READ;
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1877,23 +2016,25 @@ out:
> static int nfs4_xdr_enc_setattr(struct rpc_rqst *req, __be32 *p, struct nfs_setattrargs *args)
>
> {
> - struct xdr_stream xdr;
> - struct compound_hdr hdr = {
> - .nops = 3,
> - };
> - int status;
> + struct xdr_stream xdr;
> + struct compound_hdr hdr = {
> + .nops = 0,
> + };
> + int status;
> + __be32 *nops;
>
> - xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> - if(status)
> - goto out;
> - status = encode_setattr(&xdr, args, args->server);
> - if(status)
> - goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> + if (status)
> + goto out;
> + status = encode_setattr(&xdr, args, args->server, &hdr);
> + if (status)
> + goto out;
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> - return status;
> + encode_nops(nops, &hdr);
> + return status;
> }
>
> /*
> @@ -1906,21 +2047,23 @@ nfs4_xdr_enc_getacl(struct rpc_rqst *req, __be32 *p,
> struct xdr_stream xdr;
> struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int replen, status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_getattr_two(&xdr, FATTR4_WORD0_ACL, 0);
> + status = encode_getattr_two(&xdr, FATTR4_WORD0_ACL, 0, &hdr);
> /* set up reply buffer: */
> replen = (RPC_REPHDRSIZE + auth->au_rslack + NFS4_dec_getacl_sz) << 2;
> xdr_inline_pages(&req->rq_rcv_buf, replen,
> args->acl_pages, args->acl_pgbase, args->acl_len);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1931,21 +2074,23 @@ static int nfs4_xdr_enc_write(struct rpc_rqst *req, __be32 *p, struct nfs_writea
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_write(&xdr, args);
> + status = encode_write(&xdr, args, &hdr);
> if (status)
> goto out;
> req->rq_snd_buf.flags |= XDRBUF_WRITE;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1956,20 +2101,22 @@ static int nfs4_xdr_enc_commit(struct rpc_rqst *req, __be32 *p, struct nfs_write
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status)
> goto out;
> - status = encode_commit(&xdr, args);
> + status = encode_commit(&xdr, args, &hdr);
> if (status)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1980,15 +2127,17 @@ static int nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, __be32 *p, struct nfs4_fsin
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (!status)
> - status = encode_fsinfo(&xdr, args->bitmask);
> + status = encode_fsinfo(&xdr, args->bitmask, &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -1999,16 +2148,19 @@ static int nfs4_xdr_enc_pathconf(struct rpc_rqst *req, __be32 *p, const struct n
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (!status)
> status = encode_getattr_one(&xdr,
> - args->bitmask[0] & nfs4_pathconf_bitmap[0]);
> + args->bitmask[0] & nfs4_pathconf_bitmap[0],
> + &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -2019,17 +2171,19 @@ static int nfs4_xdr_enc_statfs(struct rpc_rqst *req, __be32 *p, const struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> if (status == 0)
> status = encode_getattr_two(&xdr,
> args->bitmask[0] & nfs4_statfs_bitmap[0],
> - args->bitmask[1] & nfs4_statfs_bitmap[1]);
> + args->bitmask[1] & nfs4_statfs_bitmap[1], &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -2040,18 +2194,20 @@ static int nfs4_xdr_enc_server_caps(struct rpc_rqst *req, __be32 *p, const struc
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 2,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, fhandle);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, fhandle, &hdr);
> if (status == 0)
> status = encode_getattr_one(&xdr, FATTR4_WORD0_SUPPORTED_ATTRS|
> FATTR4_WORD0_LINK_SUPPORT|
> FATTR4_WORD0_SYMLINK_SUPPORT|
> - FATTR4_WORD0_ACLSUPPORT);
> + FATTR4_WORD0_ACLSUPPORT, &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -2062,12 +2218,16 @@ static int nfs4_xdr_enc_renew(struct rpc_rqst *req, __be32 *p, struct nfs_client
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 1,
> + .nops = 0,
> };
> + int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - return encode_renew(&xdr, clp);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_renew(&xdr, clp, &hdr);
> + encode_nops(nops, &hdr);
> + return status;
> }
>
> /*
> @@ -2077,12 +2237,16 @@ static int nfs4_xdr_enc_setclientid(struct rpc_rqst *req, __be32 *p, struct nfs4
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 1,
> + .nops = 0,
> };
> + int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - return encode_setclientid(&xdr, sc);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_setclientid(&xdr, sc, &hdr);
> + encode_nops(nops, &hdr);
> + return status;
> }
>
> /*
> @@ -2092,18 +2256,20 @@ static int nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req, __be32 *p, str
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> const u32 lease_bitmap[2] = { FATTR4_WORD0_LEASE_TIME, 0 };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_setclientid_confirm(&xdr, clp);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_setclientid_confirm(&xdr, clp, &hdr);
> if (!status)
> - status = encode_putrootfh(&xdr);
> + status = encode_putrootfh(&xdr, &hdr);
> if (!status)
> - status = encode_fsinfo(&xdr, lease_bitmap);
> + status = encode_fsinfo(&xdr, lease_bitmap, &hdr);
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -2114,20 +2280,22 @@ static int nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, __be32 *p, const struc
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fhandle);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fhandle, &hdr);
> if (status != 0)
> goto out;
> - status = encode_delegreturn(&xdr, args->stateid);
> + status = encode_delegreturn(&xdr, args->stateid, &hdr);
> if (status != 0)
> goto out;
> - status = encode_getfattr(&xdr, args->bitmask);
> + status = encode_getfattr(&xdr, args->bitmask, &hdr);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -2138,19 +2306,20 @@ static int nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, __be32 *p, struct nfs
> {
> struct xdr_stream xdr;
> struct compound_hdr hdr = {
> - .nops = 3,
> + .nops = 0,
> };
> struct rpc_auth *auth = req->rq_task->tk_msg.rpc_cred->cr_auth;
> int replen;
> int status;
> + __be32 *nops;
>
> xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)
> + nops = encode_compound_hdr(&xdr, &hdr);
> + if ((status = encode_putfh(&xdr, args->dir_fh, &hdr)) != 0)
> goto out;
> - if ((status = encode_lookup(&xdr, args->name)) != 0)
> + if ((status = encode_lookup(&xdr, args->name, &hdr)) != 0)
> goto out;
> - if ((status = encode_fs_locations(&xdr, args->bitmask)) != 0)
> + if ((status = encode_fs_locations(&xdr, args->bitmask, &hdr)) != 0)
> goto out;
> /* set up reply
> * toplevel_status + OP_PUTFH + status
> @@ -2160,6 +2329,7 @@ static int nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, __be32 *p, struct nfs
> xdr_inline_pages(&req->rq_rcv_buf, replen, &args->page,
> 0, PAGE_SIZE);
> out:
> + encode_nops(nops, &hdr);
> return status;
> }
>
> @@ -4036,20 +4206,22 @@ out:
> static int
> nfs4_xdr_enc_setacl(struct rpc_rqst *req, __be32 *p, struct nfs_setaclargs *args)
> {
> - struct xdr_stream xdr;
> - struct compound_hdr hdr = {
> - .nops = 2,
> - };
> - int status;
> + struct xdr_stream xdr;
> + struct compound_hdr hdr = {
> + .nops = 0,
> + };
> + int status;
> + __be32 *nops;
>
> - xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> - encode_compound_hdr(&xdr, &hdr);
> - status = encode_putfh(&xdr, args->fh);
> - if (status)
> - goto out;
> - status = encode_setacl(&xdr, args);
> + xdr_init_encode(&xdr, &req->rq_snd_buf, p);
> + nops = encode_compound_hdr(&xdr, &hdr);
> + status = encode_putfh(&xdr, args->fh, &hdr);
> + if (status)
> + goto out;
> + status = encode_setacl(&xdr, args, &hdr);
> out:
> - return status;
> + encode_nops(nops, &hdr);
> + return status;
> }
> /*
> * Decode SETACL response
> --
> 1.6.0.1
>
next prev parent reply other threads:[~2008-11-17 13:26 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-10 19:57 [RFC 0/85] nfs41 client patches for review Benny Halevy
2008-11-10 20:05 ` [RFC 03/85] nfs: remove incorrect usage of nfs4 compound response hdr.status Benny Halevy
2008-11-17 13:24 ` [pnfs] " Benny Halevy
2008-11-10 20:18 ` [RFC 04/85] FIXME: NFS: Increment operation number in each encode_* routine Benny Halevy
2008-11-17 13:26 ` Benny Halevy [this message]
2008-11-10 20:18 ` [RFC 05/85] nfs41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2008-11-17 13:27 ` [pnfs] " Benny Halevy
2008-11-10 20:18 ` [RFC 06/85] nfs41: common protocol definitions Benny Halevy
2008-11-17 13:28 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 07/85] nfs41: define NFS4_MAX_MINOR_VERSION based on CONFIG_NFS_V4_1 Benny Halevy
2008-11-10 20:19 ` [RFC 08/85] nfs41: client xdr definitions Benny Halevy
2008-11-17 13:31 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 09/85] nfs41: add mount command option minorvers Benny Halevy
2008-11-17 13:34 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 10/85] nfs41: struct nfs_server minorversion Benny Halevy
2008-11-17 13:34 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 11/85] nfs41: nfs_client.cl_minorversion Benny Halevy
2008-11-17 13:37 ` [pnfs] " Benny Halevy
2008-11-10 20:19 ` [RFC 12/85] nfs41: set nfs_client rpc_ops based on minorversion Benny Halevy
2008-11-10 20:20 ` [RFC 13/85] nfs41: use ptr to rpc procedures via struct nfs_client Benny Halevy
2008-11-17 13:40 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 14/85] nfs41: sunrpc: support minorversion for rpc_clnt version table Benny Halevy
2008-11-17 13:41 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 15/85] nfs41: Proper initialization of nfs_client_initdata.rpc_ops Benny Halevy
2008-11-17 13:41 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 16/85] nfs41: pass recovery status from reclaimer kthread up to nfs4_wait_clnt_recover Benny Halevy
2008-11-17 13:42 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 17/85] nfs41: fallback to lower minorversion if nfs4_create_server fails Benny Halevy
2008-11-17 13:43 ` [pnfs] " Benny Halevy
2008-11-10 20:20 ` [RFC 18/85] nfs41: sessions client infrastructure Benny Halevy
2008-11-17 13:44 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 19/85] nfs41: share client sessions across mounts Benny Halevy
2008-11-17 13:45 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 20/85] nfs41: slot table init and destroy Benny Halevy
2008-11-17 13:46 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 21/85] nfs41: find slot Benny Halevy
2008-11-17 13:46 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 22/85] nfs41: free slot Benny Halevy
2008-11-17 13:47 ` [pnfs] " Benny Halevy
2008-11-10 20:21 ` [RFC 23/85] nfs41: minorversion support for xdr Benny Halevy
2008-11-17 13:48 ` [pnfs] " Benny Halevy
2008-11-10 20:22 ` [RFC 24/85] nfs41: stubs for nfs41 procedures Benny Halevy
2008-11-10 20:22 ` [RFC 25/85] nfs41: make nfs4_wait_bit_killable public Benny Halevy
2008-11-10 20:22 ` [RFC 26/85] nfs41: introduce nfs4_call_sync Benny Halevy
2008-11-17 13:49 ` [pnfs] " Benny Halevy
2008-11-10 20:22 ` [RFC 27/85] nfs41: nfs4_setup_sequence Benny Halevy
2008-11-17 13:49 ` [pnfs] " Benny Halevy
2008-11-10 20:22 ` [RFC 28/85] nfs41: setup_sequence method Benny Halevy
2008-11-10 20:23 ` [RFC 02/85] nfs: return compound hdr.status when there are no op replies Benny Halevy
2008-11-10 20:23 ` [RFC 29/85] nfs41: nfs41_sequence_done Benny Halevy
2008-11-17 13:50 ` [pnfs] " Benny Halevy
2008-11-10 20:23 ` [RFC 30/85] nfs41: nfs41_call_sync_done Benny Halevy
2008-11-10 20:23 ` [RFC 31/85] nfs41: separate free slot from sequence done Benny Halevy
2008-11-10 20:23 ` [RFC 32/85] nfs41: sequence setup/done support Benny Halevy
2008-11-10 20:23 ` [RFC 33/85] nfs41: Support sessions with O_DIRECT Benny Halevy
2008-11-10 20:24 ` [RFC 34/85] nfs41: exchange_id operation Benny Halevy
2008-11-10 20:24 ` [RFC 35/85] nfs41: get_lease_time Benny Halevy
2008-11-10 20:24 ` [RFC 36/85] nfs41: create_session operation Benny Halevy
2008-11-10 20:24 ` [RFC 37/85] nfs41: destroy_session operation Benny Halevy
2008-11-10 20:24 ` [RFC 38/85] nfs41: sequence operation Benny Halevy
2008-11-10 20:25 ` [RFC 39/85] nfs41: session recovery infrastructure Benny Halevy
2008-11-10 20:25 ` [RFC 40/85] nfs41: schedule async session reset Benny Halevy
2008-11-10 20:25 ` [RFC 41/85] nfs41: lease renewal Benny Halevy
2008-11-10 20:25 ` [RFC 42/85] nfs41: sunrpc: Export the call prepare state for session reset Benny Halevy
2008-11-10 20:25 ` [RFC 43/85] nfs41: use rpc prepare call " Benny Halevy
2008-11-11 8:01 ` [pnfs] [RFC 43/85] nfs41: use rpc prepare call state for sessionreset Halevy, Benny
2008-11-10 20:25 ` [RFC 44/85] nfs41: kick start nfs41 session recovery when handling errors Benny Halevy
2008-11-10 20:26 ` [RFC 45/85] nfs41: start session recovery from nfs4_setup_sequence Benny Halevy
2008-11-10 20:26 ` [RFC 46/85] nfs41: introduce get_state_renewal_cred Benny Halevy
2008-11-10 20:26 ` [RFC 47/85] nfs41: get cred in exchange_id when cred arg is NULL Benny Halevy
2008-11-10 20:26 ` [RFC 48/85] nfs41: establish sessions-based clientid Benny Halevy
2008-11-10 20:26 ` [RFC 49/85] nfs41: recover lease in _nfs4_lookup_root Benny Halevy
2008-11-17 13:51 ` [pnfs] " Benny Halevy
2008-11-10 20:27 ` [RFC 50/85] nfs41: schedule state recovery on BAD or DEAD session Benny Halevy
2008-11-10 20:27 ` [RFC 51/85] nfs41: state reclaimer renew lease error handling Benny Halevy
2008-11-10 20:27 ` [RFC 52/85] nfs41: increment_{open,lock}_seqid Benny Halevy
2008-11-10 20:27 ` [RFC 53/85] nfs41: Add ability to read RPC call direction on TCP stream Benny Halevy
2008-11-17 13:52 ` [pnfs] " Benny Halevy
2008-11-10 20:27 ` [RFC 54/85] nfs41: Skip past the RPC call direction Benny Halevy
2008-11-10 20:27 ` [RFC 55/85] nfs41: Refactor NFSv4 callback service Benny Halevy
2008-11-10 20:28 ` [RFC 56/85] nfs41: client callback structures Benny Halevy
2008-11-10 20:28 ` [RFC 57/85] nfs41: Initialize new rpc_xprt callback related fields Benny Halevy
2008-11-10 20:28 ` [RFC 58/85] nfs41: New backchannel helper routines Benny Halevy
2008-11-10 20:28 ` [RFC 59/85] nfs41: New include/linux/sunrpc/bc_xprt.h Benny Halevy
2008-11-10 20:28 ` [RFC 60/85] nfs41: New xs_tcp_read_data() Benny Halevy
2008-11-10 20:29 ` [RFC 61/85] nfs41: Add backchannel processing support to RPC state machine Benny Halevy
2008-11-17 13:53 ` [pnfs] " Benny Halevy
2008-11-10 20:29 ` [RFC 62/85] nfs41: Backchannel callback service helper routines Benny Halevy
2008-11-10 20:29 ` [RFC 63/85] FIXME: nfs41: sunrpc: handle clnt==NULL in call_status Benny Halevy
2008-11-10 20:29 ` [RFC 64/85] nfs41: Refactor svc_process() Benny Halevy
2008-11-17 13:54 ` [pnfs] " Benny Halevy
2008-11-10 20:29 ` [RFC 65/85] nfs41: Backchannel bc_svc_process() Benny Halevy
2008-11-17 13:55 ` [pnfs] " Benny Halevy
2008-11-10 20:30 ` [RFC 66/85] nfs41: Implement NFSv4.1 callback service process Benny Halevy
2008-11-10 20:30 ` [RFC 67/85] nfs41: sunrpc: provide functions to create and destroy a svc_xprt for backchannel use Benny Halevy
2008-11-10 20:30 ` [RFC 68/85] nfs41: sunrpc: add a struct svc_xprt pointer to struct svc_serv " Benny Halevy
2008-11-10 20:30 ` [RFC 69/85] nfs41: create a svc_xprt for nfs41 callback thread and use for incoming callbacks Benny Halevy
2008-11-10 20:30 ` [RFC 70/85] nfs41: save svc_serv in nfs_callback_info Benny Halevy
2008-11-10 20:30 ` [RFC 71/85] nfs41: Add a reference to svc_serv during callback service bring up Benny Halevy
2008-11-10 20:31 ` [RFC 72/85] nfs41: Allow NFSv4 and NFSv4.1 callback services to coexist Benny Halevy
2008-11-10 20:31 ` [RFC 73/85] nfs41: Setup the backchannel Benny Halevy
2008-11-10 20:31 ` [RFC 74/85] nfs41: Client indicates presence of NFSv4.1 callback channel Benny Halevy
2008-11-10 20:31 ` [RFC 75/85] nfs41: Get the rpc_xprt * from the rpc_rqst instead of the rpc_clnt Benny Halevy
2008-11-10 20:31 ` [RFC 76/85] nfs41: Release backchannel resources associated with session Benny Halevy
2008-11-10 20:31 ` [RFC 77/85] nfs41: store minorversion in cb_compound_hdr_arg Benny Halevy
2008-11-10 20:32 ` [RFC 78/85] nfs41: decode minorversion 1 cb_compound header Benny Halevy
2008-11-10 20:32 ` [RFC 79/85] nfs41: callback numbers definitions Benny Halevy
2008-11-10 20:32 ` [RFC 80/85] nfs41: consider minorversion in callback_xdr:process_op Benny Halevy
2008-11-10 20:32 ` [RFC 81/85] nfs41: define CB_NOTIFY_DEVICEID as not supported Benny Halevy
2008-11-10 20:32 ` [RFC 82/85] nfs41: cb_sequence protocol level data structures Benny Halevy
2008-11-10 20:33 ` [RFC 83/85] nfs41: cb_sequence proc implementation Benny Halevy
2008-11-10 20:33 ` [RFC 84/85] nfs41: cb_sequence xdr implementation Benny Halevy
2008-11-10 20:33 ` [RFC 85/85] nfs41: verify CB_SEQUENCE position in callback compound Benny Halevy
2008-11-10 20:37 ` [pnfs] [RFC 0/85] nfs41 client patches for review Benny Halevy
2008-11-10 20:42 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49217114.4080907@panasas.com \
--to=bhalevy@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=pnfs@linux-nfs.org \
--cc=trond.myklebust@fys.uio.no \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.