Loading fs/nfsd/nfs4proc.c +9 −31 Original line number Diff line number Diff line Loading @@ -809,29 +809,6 @@ static inline void nfsd4_increment_op_stats(u32 opnum) nfsdstats.nfs4_opcount[opnum]++; } static void cstate_free(struct nfsd4_compound_state *cstate) { if (cstate == NULL) return; fh_put(&cstate->current_fh); fh_put(&cstate->save_fh); BUG_ON(cstate->replay_owner); kfree(cstate); } static struct nfsd4_compound_state *cstate_alloc(void) { struct nfsd4_compound_state *cstate; cstate = kmalloc(sizeof(struct nfsd4_compound_state), GFP_KERNEL); if (cstate == NULL) return NULL; fh_init(&cstate->current_fh, NFS4_FHSIZE); fh_init(&cstate->save_fh, NFS4_FHSIZE); cstate->replay_owner = NULL; return cstate; } typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, void *); Loading Loading @@ -859,12 +836,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, { struct nfsd4_op *op; struct nfsd4_operation *opdesc; struct nfsd4_compound_state *cstate = NULL; struct nfsd4_compound_state *cstate = &resp->cstate; int slack_bytes; __be32 status; resp->xbuf = &rqstp->rq_res; resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; resp->tagp = resp->p; /* reserve space for: taglen, tag, and opcnt */ resp->p += 2 + XDR_QUADLEN(args->taglen); Loading @@ -873,6 +851,9 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, resp->tag = args->tag; resp->opcnt = 0; resp->rqstp = rqstp; resp->cstate.replay_owner = NULL; fh_init(&resp->cstate.current_fh, NFS4_FHSIZE); fh_init(&resp->cstate.save_fh, NFS4_FHSIZE); /* * According to RFC3010, this takes precedence over all other errors. Loading @@ -881,11 +862,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION) goto out; status = nfserr_resource; cstate = cstate_alloc(); if (cstate == NULL) goto out; status = nfs_ok; while (!status && resp->opcnt < args->opcnt) { op = &args->ops[resp->opcnt++]; Loading Loading @@ -958,7 +934,9 @@ encode_op: nfsd4_increment_op_stats(op->opnum); } cstate_free(cstate); fh_put(&resp->cstate.current_fh); fh_put(&resp->cstate.save_fh); BUG_ON(resp->cstate.replay_owner); out: nfsd4_release_compoundargs(args); dprintk("nfsv4 compound returned %d\n", ntohl(status)); Loading include/linux/nfsd/xdr4.h +5 −4 Original line number Diff line number Diff line Loading @@ -416,7 +416,8 @@ struct nfsd4_compoundres { u32 taglen; char * tag; u32 opcnt; __be32 * tagp; /* where to encode tag and opcount */ __be32 * tagp; /* tag, opcount encode location */ struct nfsd4_compound_state cstate; }; #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) Loading Loading
fs/nfsd/nfs4proc.c +9 −31 Original line number Diff line number Diff line Loading @@ -809,29 +809,6 @@ static inline void nfsd4_increment_op_stats(u32 opnum) nfsdstats.nfs4_opcount[opnum]++; } static void cstate_free(struct nfsd4_compound_state *cstate) { if (cstate == NULL) return; fh_put(&cstate->current_fh); fh_put(&cstate->save_fh); BUG_ON(cstate->replay_owner); kfree(cstate); } static struct nfsd4_compound_state *cstate_alloc(void) { struct nfsd4_compound_state *cstate; cstate = kmalloc(sizeof(struct nfsd4_compound_state), GFP_KERNEL); if (cstate == NULL) return NULL; fh_init(&cstate->current_fh, NFS4_FHSIZE); fh_init(&cstate->save_fh, NFS4_FHSIZE); cstate->replay_owner = NULL; return cstate; } typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *, void *); Loading Loading @@ -859,12 +836,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, { struct nfsd4_op *op; struct nfsd4_operation *opdesc; struct nfsd4_compound_state *cstate = NULL; struct nfsd4_compound_state *cstate = &resp->cstate; int slack_bytes; __be32 status; resp->xbuf = &rqstp->rq_res; resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; resp->p = rqstp->rq_res.head[0].iov_base + rqstp->rq_res.head[0].iov_len; resp->tagp = resp->p; /* reserve space for: taglen, tag, and opcnt */ resp->p += 2 + XDR_QUADLEN(args->taglen); Loading @@ -873,6 +851,9 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, resp->tag = args->tag; resp->opcnt = 0; resp->rqstp = rqstp; resp->cstate.replay_owner = NULL; fh_init(&resp->cstate.current_fh, NFS4_FHSIZE); fh_init(&resp->cstate.save_fh, NFS4_FHSIZE); /* * According to RFC3010, this takes precedence over all other errors. Loading @@ -881,11 +862,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp, if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION) goto out; status = nfserr_resource; cstate = cstate_alloc(); if (cstate == NULL) goto out; status = nfs_ok; while (!status && resp->opcnt < args->opcnt) { op = &args->ops[resp->opcnt++]; Loading Loading @@ -958,7 +934,9 @@ encode_op: nfsd4_increment_op_stats(op->opnum); } cstate_free(cstate); fh_put(&resp->cstate.current_fh); fh_put(&resp->cstate.save_fh); BUG_ON(resp->cstate.replay_owner); out: nfsd4_release_compoundargs(args); dprintk("nfsv4 compound returned %d\n", ntohl(status)); Loading
include/linux/nfsd/xdr4.h +5 −4 Original line number Diff line number Diff line Loading @@ -416,7 +416,8 @@ struct nfsd4_compoundres { u32 taglen; char * tag; u32 opcnt; __be32 * tagp; /* where to encode tag and opcount */ __be32 * tagp; /* tag, opcount encode location */ struct nfsd4_compound_state cstate; }; #define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs) Loading