nfsd41: expand solo sequence check
Compounds consisting of only a sequence operation don't need any additional caching beyond the sequence information we store in the slot entry. Fix nfsd4_is_solo_sequence to identify this case correctly. The additional check for a failed sequence in nfsd4_store_cache_entry() is redundant, since the nfsd4_is_solo_sequence call lower down catches this case. The final ce_cachethis set in nfsd4_sequence is also redundant. Signed-off-by: Andy Adamson <andros@netapp.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
committed by
J. Bruce Fields
parent
d8d0b85b11
commit
468de9e54a
@@ -991,16 +991,10 @@ nfsd4_store_cache_entry(struct nfsd4_compoundres *resp)
|
|||||||
{
|
{
|
||||||
struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry;
|
struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry;
|
||||||
struct svc_rqst *rqstp = resp->rqstp;
|
struct svc_rqst *rqstp = resp->rqstp;
|
||||||
struct nfsd4_compoundargs *args = rqstp->rq_argp;
|
|
||||||
struct nfsd4_op *op = &args->ops[resp->opcnt];
|
|
||||||
struct kvec *resv = &rqstp->rq_res.head[0];
|
struct kvec *resv = &rqstp->rq_res.head[0];
|
||||||
|
|
||||||
dprintk("--> %s entry %p\n", __func__, entry);
|
dprintk("--> %s entry %p\n", __func__, entry);
|
||||||
|
|
||||||
/* Don't cache a failed OP_SEQUENCE. */
|
|
||||||
if (resp->opcnt == 1 && op->opnum == OP_SEQUENCE && resp->cstate.status)
|
|
||||||
return;
|
|
||||||
|
|
||||||
nfsd4_release_respages(entry->ce_respages, entry->ce_resused);
|
nfsd4_release_respages(entry->ce_respages, entry->ce_resused);
|
||||||
entry->ce_opcnt = resp->opcnt;
|
entry->ce_opcnt = resp->opcnt;
|
||||||
entry->ce_status = resp->cstate.status;
|
entry->ce_status = resp->cstate.status;
|
||||||
@@ -1490,9 +1484,6 @@ nfsd4_sequence(struct svc_rqst *rqstp,
|
|||||||
slot->sl_inuse = true;
|
slot->sl_inuse = true;
|
||||||
slot->sl_seqid = seq->seqid;
|
slot->sl_seqid = seq->seqid;
|
||||||
slot->sl_cache_entry.ce_cachethis = seq->cachethis;
|
slot->sl_cache_entry.ce_cachethis = seq->cachethis;
|
||||||
/* Always set the cache entry cachethis for solo sequence */
|
|
||||||
if (nfsd4_is_solo_sequence(resp))
|
|
||||||
slot->sl_cache_entry.ce_cachethis = 1;
|
|
||||||
|
|
||||||
cstate->slot = slot;
|
cstate->slot = slot;
|
||||||
cstate->session = session;
|
cstate->session = session;
|
||||||
|
@@ -467,7 +467,7 @@ struct nfsd4_compoundres {
|
|||||||
static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
|
static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
|
||||||
{
|
{
|
||||||
struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
|
struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
|
||||||
return args->opcnt == 1;
|
return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
|
static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
|
||||||
|
Reference in New Issue
Block a user