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

Commit b607664e authored by Trond Myklebust's avatar Trond Myklebust Committed by J. Bruce Fields
Browse files

nfsd: Cleanup nfs4svc_encode_compoundres



Move the slot return, put session etc into a helper in fs/nfsd/nfs4state.c
instead of open coding in nfs4svc_encode_compoundres.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent e17f99b7
Loading
Loading
Loading
Loading
+22 −13
Original line number Original line Diff line number Diff line
@@ -203,18 +203,6 @@ static void put_client_renew_locked(struct nfs4_client *clp)
		renew_client_locked(clp);
		renew_client_locked(clp);
}
}


void put_client_renew(struct nfs4_client *clp)
{
	struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);

	if (!atomic_dec_and_lock(&clp->cl_refcount, &nn->client_lock))
		return;
	if (!is_client_expired(clp))
		renew_client_locked(clp);
	spin_unlock(&nn->client_lock);
}


static inline u32
static inline u32
opaque_hashval(const void *ptr, int nbytes)
opaque_hashval(const void *ptr, int nbytes)
{
{
@@ -1646,7 +1634,7 @@ gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se, struct svc_r
/*
/*
 * Cache a reply. nfsd4_check_resp_size() has bounded the cache size.
 * Cache a reply. nfsd4_check_resp_size() has bounded the cache size.
 */
 */
void
static void
nfsd4_store_cache_entry(struct nfsd4_compoundres *resp)
nfsd4_store_cache_entry(struct nfsd4_compoundres *resp)
{
{
	struct xdr_buf *buf = resp->xdr.buf;
	struct xdr_buf *buf = resp->xdr.buf;
@@ -2418,6 +2406,27 @@ nfsd4_sequence(struct svc_rqst *rqstp,
	goto out_no_session;
	goto out_no_session;
}
}


void
nfsd4_sequence_done(struct nfsd4_compoundres *resp)
{
	struct nfsd4_compound_state *cs = &resp->cstate;

	if (nfsd4_has_session(cs)) {
		struct nfs4_client *clp = cs->session->se_client;
		struct nfsd_net *nn = net_generic(clp->net, nfsd_net_id);

		if (cs->status != nfserr_replay_cache) {
			nfsd4_store_cache_entry(resp);
			cs->slot->sl_flags &= ~NFSD4_SLOT_INUSE;
		}
		/* Renew the clientid on success and on replay */
		spin_lock(&nn->client_lock);
		nfsd4_put_session(cs->session);
		put_client_renew_locked(clp);
		spin_unlock(&nn->client_lock);
	}
}

__be32
__be32
nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_destroy_clientid *dc)
nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_destroy_clientid *dc)
{
{
+1 −14
Original line number Original line Diff line number Diff line
@@ -4000,7 +4000,6 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
	/*
	/*
	 * All that remains is to write the tag and operation count...
	 * All that remains is to write the tag and operation count...
	 */
	 */
	struct nfsd4_compound_state *cs = &resp->cstate;
	struct xdr_buf *buf = resp->xdr.buf;
	struct xdr_buf *buf = resp->xdr.buf;


	WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len +
	WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len +
@@ -4014,19 +4013,7 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
	p += XDR_QUADLEN(resp->taglen);
	p += XDR_QUADLEN(resp->taglen);
	*p++ = htonl(resp->opcnt);
	*p++ = htonl(resp->opcnt);


	if (nfsd4_has_session(cs)) {
	nfsd4_sequence_done(resp);
		struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
		struct nfs4_client *clp = cs->session->se_client;
		if (cs->status != nfserr_replay_cache) {
			nfsd4_store_cache_entry(resp);
			cs->slot->sl_flags &= ~NFSD4_SLOT_INUSE;
		}
		/* Renew the clientid on success and on replay */
		spin_lock(&nn->client_lock);
		nfsd4_put_session(cs->session);
		spin_unlock(&nn->client_lock);
		put_client_renew(clp);
	}
	return 1;
	return 1;
}
}


+0 −1
Original line number Original line Diff line number Diff line
@@ -476,7 +476,6 @@ extern void nfs4_put_delegation(struct nfs4_delegation *dp);
extern struct nfs4_client_reclaim *nfs4_client_to_reclaim(const char *name,
extern struct nfs4_client_reclaim *nfs4_client_to_reclaim(const char *name,
							struct nfsd_net *nn);
							struct nfsd_net *nn);
extern bool nfs4_has_reclaimed_state(const char *name, struct nfsd_net *nn);
extern bool nfs4_has_reclaimed_state(const char *name, struct nfsd_net *nn);
extern void put_client_renew(struct nfs4_client *clp);


/* nfs4recover operations */
/* nfs4recover operations */
extern int nfsd4_client_tracking_init(struct net *net);
extern int nfsd4_client_tracking_init(struct net *net);
+1 −1
Original line number Original line Diff line number Diff line
@@ -578,7 +578,6 @@ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *,
		struct nfsd4_compound_state *,
		struct nfsd4_setclientid_confirm *setclientid_confirm);
		struct nfsd4_setclientid_confirm *setclientid_confirm);
extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *, struct nfsd4_exchange_id *);
		struct nfsd4_compound_state *, struct nfsd4_exchange_id *);
extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_backchannel_ctl *);
extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_backchannel_ctl *);
@@ -589,6 +588,7 @@ extern __be32 nfsd4_create_session(struct svc_rqst *,
extern __be32 nfsd4_sequence(struct svc_rqst *,
extern __be32 nfsd4_sequence(struct svc_rqst *,
		struct nfsd4_compound_state *,
		struct nfsd4_compound_state *,
		struct nfsd4_sequence *);
		struct nfsd4_sequence *);
extern void nfsd4_sequence_done(struct nfsd4_compoundres *resp);
extern __be32 nfsd4_destroy_session(struct svc_rqst *,
extern __be32 nfsd4_destroy_session(struct svc_rqst *,
		struct nfsd4_compound_state *,
		struct nfsd4_compound_state *,
		struct nfsd4_destroy_session *);
		struct nfsd4_destroy_session *);