lkml.org 
[lkml]   [2014]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 047/181] nfsd: don't try to reuse an expired DRC entry off the list
    Date
    From: Jeff Layton <jlayton@redhat.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit a0ef5e19684f0447da9ff0654a12019c484f57ca upstream.

    Currently when we are processing a request, we try to scrape an expired
    or over-limit entry off the list in preference to allocating a new one
    from the slab.

    This is unnecessarily complicated. Just use the slab layer.

    Signed-off-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    fs/nfsd/nfscache.c | 36 ++++--------------------------------
    1 file changed, 4 insertions(+), 32 deletions(-)

    diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
    index b6af150c96b8..f8f060ffbf4f 100644
    --- a/fs/nfsd/nfscache.c
    +++ b/fs/nfsd/nfscache.c
    @@ -132,13 +132,6 @@ nfsd_reply_cache_alloc(void)
    }

    static void
    -nfsd_reply_cache_unhash(struct svc_cacherep *rp)
    -{
    - hlist_del_init(&rp->c_hash);
    - list_del_init(&rp->c_lru);
    -}
    -
    -static void
    nfsd_reply_cache_free_locked(struct svc_cacherep *rp)
    {
    if (rp->c_type == RC_REPLBUFF && rp->c_replvec.iov_base) {
    @@ -416,22 +409,8 @@ nfsd_cache_lookup(struct svc_rqst *rqstp)

    /*
    * Since the common case is a cache miss followed by an insert,
    - * preallocate an entry. First, try to reuse the first entry on the LRU
    - * if it works, then go ahead and prune the LRU list.
    + * preallocate an entry.
    */
    - spin_lock(&cache_lock);
    - if (!list_empty(&lru_head)) {
    - rp = list_first_entry(&lru_head, struct svc_cacherep, c_lru);
    - if (nfsd_cache_entry_expired(rp) ||
    - num_drc_entries >= max_drc_entries) {
    - nfsd_reply_cache_unhash(rp);
    - prune_cache_entries();
    - goto search_cache;
    - }
    - }
    -
    - /* No expired ones available, allocate a new one. */
    - spin_unlock(&cache_lock);
    rp = nfsd_reply_cache_alloc();
    spin_lock(&cache_lock);
    if (likely(rp)) {
    @@ -439,7 +418,9 @@ nfsd_cache_lookup(struct svc_rqst *rqstp)
    drc_mem_usage += sizeof(*rp);
    }

    -search_cache:
    + /* go ahead and prune the cache */
    + prune_cache_entries();
    +
    found = nfsd_cache_search(rqstp, csum);
    if (found) {
    if (likely(rp))
    @@ -453,15 +434,6 @@ search_cache:
    goto out;
    }

    - /*
    - * We're keeping the one we just allocated. Are we now over the
    - * limit? Prune one off the tip of the LRU in trade for the one we
    - * just allocated if so.
    - */
    - if (num_drc_entries >= max_drc_entries)
    - nfsd_reply_cache_free_locked(list_first_entry(&lru_head,
    - struct svc_cacherep, c_lru));
    -
    nfsdstats.rcmisses++;
    rqstp->rq_cacherep = rp;
    rp->c_state = RC_INPROG;
    --
    2.0.0


    \
     
     \ /
      Last update: 2014-06-30 15:01    [W:4.060 / U:0.436 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site