浏览代码

nfsd4: rearrange struct nfsd4_slot

Combine two booleans into a single flag field, move the smaller fields
to the end.

(In practice this doesn't make the struct any smaller.  But we'll be
adding another flag here soon.)

Remove some debugging code that doesn't look useful, while we're in the
neighborhood.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
J. Bruce Fields 13 年之前
父节点
当前提交
73e79482b4
共有 4 个文件被更改,包括 14 次插入14 次删除
  1. 6 7
      fs/nfsd/nfs4state.c
  2. 2 3
      fs/nfsd/nfs4xdr.c
  3. 4 3
      fs/nfsd/state.h
  4. 2 1
      fs/nfsd/xdr4.h

+ 6 - 7
fs/nfsd/nfs4state.c

@@ -1374,15 +1374,12 @@ nfsd4_enc_sequence_replay(struct nfsd4_compoundargs *args,
 	struct nfsd4_op *op;
 	struct nfsd4_op *op;
 	struct nfsd4_slot *slot = resp->cstate.slot;
 	struct nfsd4_slot *slot = resp->cstate.slot;
 
 
-	dprintk("--> %s resp->opcnt %d cachethis %u \n", __func__,
-		resp->opcnt, resp->cstate.slot->sl_cachethis);
-
 	/* Encode the replayed sequence operation */
 	/* Encode the replayed sequence operation */
 	op = &args->ops[resp->opcnt - 1];
 	op = &args->ops[resp->opcnt - 1];
 	nfsd4_encode_operation(resp, op);
 	nfsd4_encode_operation(resp, op);
 
 
 	/* Return nfserr_retry_uncached_rep in next operation. */
 	/* Return nfserr_retry_uncached_rep in next operation. */
-	if (args->opcnt > 1 && slot->sl_cachethis == 0) {
+	if (args->opcnt > 1 && !(slot->sl_flags & NFSD4_SLOT_CACHETHIS)) {
 		op = &args->ops[resp->opcnt++];
 		op = &args->ops[resp->opcnt++];
 		op->status = nfserr_retry_uncached_rep;
 		op->status = nfserr_retry_uncached_rep;
 		nfsd4_encode_operation(resp, op);
 		nfsd4_encode_operation(resp, op);
@@ -1916,7 +1913,8 @@ nfsd4_sequence(struct svc_rqst *rqstp,
 	 * sr_highest_slotid and the sr_target_slot id to maxslots */
 	 * sr_highest_slotid and the sr_target_slot id to maxslots */
 	seq->maxslots = session->se_fchannel.maxreqs;
 	seq->maxslots = session->se_fchannel.maxreqs;
 
 
-	status = check_slot_seqid(seq->seqid, slot->sl_seqid, slot->sl_inuse);
+	status = check_slot_seqid(seq->seqid, slot->sl_seqid,
+					slot->sl_flags & NFSD4_SLOT_INUSE);
 	if (status == nfserr_replay_cache) {
 	if (status == nfserr_replay_cache) {
 		cstate->slot = slot;
 		cstate->slot = slot;
 		cstate->session = session;
 		cstate->session = session;
@@ -1933,9 +1931,10 @@ nfsd4_sequence(struct svc_rqst *rqstp,
 	conn = NULL;
 	conn = NULL;
 
 
 	/* Success! bump slot seqid */
 	/* Success! bump slot seqid */
-	slot->sl_inuse = true;
 	slot->sl_seqid = seq->seqid;
 	slot->sl_seqid = seq->seqid;
-	slot->sl_cachethis = seq->cachethis;
+	slot->sl_flags = NFSD4_SLOT_INUSE;
+	if (seq->cachethis)
+		slot->sl_flags |= NFSD4_SLOT_CACHETHIS;
 
 
 	cstate->slot = slot;
 	cstate->slot = slot;
 	cstate->session = session;
 	cstate->session = session;

+ 2 - 3
fs/nfsd/nfs4xdr.c

@@ -3532,7 +3532,7 @@ int nfsd4_check_resp_size(struct nfsd4_compoundres *resp, u32 pad)
 	if (length > session->se_fchannel.maxresp_sz)
 	if (length > session->se_fchannel.maxresp_sz)
 		return nfserr_rep_too_big;
 		return nfserr_rep_too_big;
 
 
-	if (slot->sl_cachethis == 1 &&
+	if ((slot->sl_flags & NFSD4_SLOT_CACHETHIS) &&
 	    length > session->se_fchannel.maxresp_cached)
 	    length > session->se_fchannel.maxresp_cached)
 		return nfserr_rep_too_big_to_cache;
 		return nfserr_rep_too_big_to_cache;
 
 
@@ -3656,8 +3656,7 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
 	if (nfsd4_has_session(cs)) {
 	if (nfsd4_has_session(cs)) {
 		if (cs->status != nfserr_replay_cache) {
 		if (cs->status != nfserr_replay_cache) {
 			nfsd4_store_cache_entry(resp);
 			nfsd4_store_cache_entry(resp);
-			dprintk("%s: SET SLOT STATE TO AVAILABLE\n", __func__);
-			cs->slot->sl_inuse = false;
+			cs->slot->sl_flags &= ~NFSD4_SLOT_INUSE;
 		}
 		}
 		/* Renew the clientid on success and on replay */
 		/* Renew the clientid on success and on replay */
 		release_session_client(cs->session);
 		release_session_client(cs->session);

+ 4 - 3
fs/nfsd/state.h

@@ -128,12 +128,13 @@ static inline struct nfs4_delegation *delegstateid(struct nfs4_stid *s)
 		(NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE)
 		(NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE)
 
 
 struct nfsd4_slot {
 struct nfsd4_slot {
-	bool	sl_inuse;
-	bool	sl_cachethis;
-	u16	sl_opcnt;
 	u32	sl_seqid;
 	u32	sl_seqid;
 	__be32	sl_status;
 	__be32	sl_status;
 	u32	sl_datalen;
 	u32	sl_datalen;
+	u16	sl_opcnt;
+#define NFSD4_SLOT_INUSE	(1 << 0)
+#define NFSD4_SLOT_CACHETHIS	(1 << 1)
+	u8	sl_flags;
 	char	sl_data[];
 	char	sl_data[];
 };
 };
 
 

+ 2 - 1
fs/nfsd/xdr4.h

@@ -503,7 +503,8 @@ static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
 
 
 static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
 static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
 {
 {
-	return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp);
+	return !(resp->cstate.slot->sl_flags & NFSD4_SLOT_CACHETHIS)
+		|| nfsd4_is_solo_sequence(resp);
 }
 }
 
 
 #define NFS4_SVC_XDRSIZE		sizeof(struct nfsd4_compoundargs)
 #define NFS4_SVC_XDRSIZE		sizeof(struct nfsd4_compoundargs)