Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4f1706a authored by J.Bruce Fields's avatar J.Bruce Fields Committed by Linus Torvalds
Browse files

[PATCH] knfsd: nfsd4: move replay_owner to cstate



Tuck away the replay_owner in the cstate while we're at it.

Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d9e626f1
Loading
Loading
Loading
Loading
+14 −17
Original line number Diff line number Diff line
@@ -163,7 +163,7 @@ do_open_fhandle(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_

static inline __be32
nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	   struct nfsd4_open *open, struct nfs4_stateowner **replay_owner)
	   struct nfsd4_open *open)
{
	__be32 status;
	dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n",
@@ -255,7 +255,7 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
out:
	if (open->op_stateowner) {
		nfs4_get_stateowner(open->op_stateowner);
		*replay_owner = open->op_stateowner;
		cstate->replay_owner = open->op_stateowner;
	}
	nfs4_unlock_state();
	return status;
@@ -761,6 +761,7 @@ static void cstate_free(struct nfsd4_compound_state *cstate)
		return;
	fh_put(&cstate->current_fh);
	fh_put(&cstate->save_fh);
	BUG_ON(cstate->replay_owner);
	kfree(cstate);
}

@@ -773,6 +774,7 @@ static struct nfsd4_compound_state *cstate_alloc(void)
		return NULL;
	fh_init(&cstate->current_fh, NFS4_FHSIZE);
	fh_init(&cstate->save_fh, NFS4_FHSIZE);
	cstate->replay_owner = NULL;
	return cstate;
}

@@ -786,7 +788,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
{
	struct nfsd4_op	*op;
	struct nfsd4_compound_state *cstate = NULL;
	struct nfs4_stateowner *replay_owner = NULL;
	int		slack_bytes;
	__be32		status;

@@ -876,7 +877,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
			break;
		case OP_CLOSE:
			op->status = nfsd4_close(rqstp, cstate,
						 &op->u.close, &replay_owner);
						 &op->u.close);
			break;
		case OP_COMMIT:
			op->status = nfsd4_commit(rqstp, cstate,
@@ -901,15 +902,13 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
			op->status = nfsd4_link(rqstp, cstate, &op->u.link);
			break;
		case OP_LOCK:
			op->status = nfsd4_lock(rqstp, cstate, &op->u.lock,
						&replay_owner);
			op->status = nfsd4_lock(rqstp, cstate, &op->u.lock);
			break;
		case OP_LOCKT:
			op->status = nfsd4_lockt(rqstp, cstate, &op->u.lockt);
			break;
		case OP_LOCKU:
			op->status = nfsd4_locku(rqstp, cstate, &op->u.locku,
						 &replay_owner);
			op->status = nfsd4_locku(rqstp, cstate, &op->u.locku);
			break;
		case OP_LOOKUP:
			op->status = nfsd4_lookup(rqstp, cstate,
@@ -926,17 +925,15 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
			break;
		case OP_OPEN:
			op->status = nfsd4_open(rqstp, cstate,
						&op->u.open, &replay_owner);
						&op->u.open);
			break;
		case OP_OPEN_CONFIRM:
			op->status = nfsd4_open_confirm(rqstp, cstate,
							&op->u.open_confirm,
							&replay_owner);
							&op->u.open_confirm);
			break;
		case OP_OPEN_DOWNGRADE:
			op->status = nfsd4_open_downgrade(rqstp, cstate,
							 &op->u.open_downgrade,
							 &replay_owner);
							&op->u.open_downgrade);
			break;
		case OP_PUTFH:
			op->status = nfsd4_putfh(rqstp, cstate, &op->u.putfh);
@@ -1001,16 +998,16 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,

encode_op:
		if (op->status == nfserr_replay_me) {
			op->replay = &replay_owner->so_replay;
			op->replay = &cstate->replay_owner->so_replay;
			nfsd4_encode_replay(resp, op);
			status = op->status = op->replay->rp_status;
		} else {
			nfsd4_encode_operation(resp, op);
			status = op->status;
		}
		if (replay_owner) {
			nfs4_put_stateowner(replay_owner);
			replay_owner = NULL;
		if (cstate->replay_owner) {
			nfs4_put_stateowner(cstate->replay_owner);
			cstate->replay_owner = NULL;
		}
		/* XXX Ugh, we need to get rid of this kind of special case: */
		if (op->opnum == OP_READ && op->u.read.rd_filp)
+10 −12
Original line number Diff line number Diff line
@@ -2242,8 +2242,7 @@ nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *statei

__be32
nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
		   struct nfsd4_open_confirm *oc,
		   struct nfs4_stateowner **replay_owner)
		   struct nfsd4_open_confirm *oc)
{
	__be32 status;
	struct nfs4_stateowner *sop;
@@ -2280,7 +2279,7 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
out:
	if (oc->oc_stateowner) {
		nfs4_get_stateowner(oc->oc_stateowner);
		*replay_owner = oc->oc_stateowner;
		cstate->replay_owner = oc->oc_stateowner;
	}
	nfs4_unlock_state();
	return status;
@@ -2314,8 +2313,7 @@ reset_union_bmap_deny(unsigned long deny, unsigned long *bmap)
__be32
nfsd4_open_downgrade(struct svc_rqst *rqstp,
		     struct nfsd4_compound_state *cstate,
		     struct nfsd4_open_downgrade *od,
		     struct nfs4_stateowner **replay_owner)
		     struct nfsd4_open_downgrade *od)
{
	__be32 status;
	struct nfs4_stateid *stp;
@@ -2361,7 +2359,7 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
out:
	if (od->od_stateowner) {
		nfs4_get_stateowner(od->od_stateowner);
		*replay_owner = od->od_stateowner;
		cstate->replay_owner = od->od_stateowner;
	}
	nfs4_unlock_state();
	return status;
@@ -2372,7 +2370,7 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
 */
__be32
nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	    struct nfsd4_close *close, struct nfs4_stateowner **replay_owner)
	    struct nfsd4_close *close)
{
	__be32 status;
	struct nfs4_stateid *stp;
@@ -2405,7 +2403,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
out:
	if (close->cl_stateowner) {
		nfs4_get_stateowner(close->cl_stateowner);
		*replay_owner = close->cl_stateowner;
		cstate->replay_owner = close->cl_stateowner;
	}
	nfs4_unlock_state();
	return status;
@@ -2646,7 +2644,7 @@ check_lock_length(u64 offset, u64 length)
 */
__be32
nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	   struct nfsd4_lock *lock, struct nfs4_stateowner **replay_owner)
	   struct nfsd4_lock *lock)
{
	struct nfs4_stateowner *open_sop = NULL;
	struct nfs4_stateowner *lock_sop = NULL;
@@ -2796,7 +2794,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
		release_stateowner(lock_sop);
	if (lock->lk_replay_owner) {
		nfs4_get_stateowner(lock->lk_replay_owner);
		*replay_owner = lock->lk_replay_owner;
		cstate->replay_owner = lock->lk_replay_owner;
	}
	nfs4_unlock_state();
	return status;
@@ -2888,7 +2886,7 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,

__be32
nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	    struct nfsd4_locku *locku, struct nfs4_stateowner **replay_owner)
	    struct nfsd4_locku *locku)
{
	struct nfs4_stateid *stp;
	struct file *filp = NULL;
@@ -2946,7 +2944,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
out:
	if (locku->lu_stateowner) {
		nfs4_get_stateowner(locku->lu_stateowner);
		*replay_owner = locku->lu_stateowner;
		cstate->replay_owner = locku->lu_stateowner;
	}
	nfs4_unlock_state();
	return status;
+7 −10
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
struct nfsd4_compound_state {
	struct svc_fh current_fh;
	struct svc_fh save_fh;
	struct nfs4_stateowner *replay_owner;
};

struct nfsd4_change_info {
@@ -442,25 +443,21 @@ extern __be32 nfsd4_process_open1(struct nfsd4_open *open);
extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
		struct svc_fh *current_fh, struct nfsd4_open *open);
extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc,
		struct nfs4_stateowner **);
		struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
extern __be32 nfsd4_close(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *,
		struct nfsd4_close *close,
		struct nfs4_stateowner **replay_owner);
		struct nfsd4_close *close);
extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *, struct nfsd4_open_downgrade *od,
		struct nfs4_stateowner **replay_owner);
		struct nfsd4_compound_state *,
		struct nfsd4_open_downgrade *od);
extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
		struct nfsd4_lock *lock,
		struct nfs4_stateowner **replay_owner);
		struct nfsd4_lock *lock);
extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *,
		struct nfsd4_lockt *lockt);
extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *,
		struct nfsd4_locku *locku,
		struct nfs4_stateowner **replay_owner);
		struct nfsd4_locku *locku);
extern __be32
nfsd4_release_lockowner(struct svc_rqst *rqstp,
		struct nfsd4_release_lockowner *rlockowner);