From patchwork Mon Jan 28 19:41:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 2058151 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 25CAF3FD1A for ; Mon, 28 Jan 2013 19:49:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752123Ab3A1TtX (ORCPT ); Mon, 28 Jan 2013 14:49:23 -0500 Received: from mail-ye0-f169.google.com ([209.85.213.169]:39291 "EHLO mail-ye0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751155Ab3A1TtX (ORCPT ); Mon, 28 Jan 2013 14:49:23 -0500 X-Greylist: delayed 469 seconds by postgrey-1.27 at vger.kernel.org; Mon, 28 Jan 2013 14:49:22 EST Received: by mail-ye0-f169.google.com with SMTP id l13so471207yen.28 for ; Mon, 28 Jan 2013 11:49:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references:x-gm-message-state; bh=30bSJeF9H1mA0Y1sDGT9HjxsdOu0fOtd0Z2qz5DcVXY=; b=CL7UZIkzdEXjd7cffu1C3N0mDlMkrcEoOOR75b6DDIvsWTYgi/2UImJLwAt4hUQSjI oiRusp5nO8zZv3zGRGiCuGSMw0rDc6ZiewX942JOKM+5x1aSH8edc4Y5es5kMfbIBu2d 8Hy2GZkPTkb9MScrWA8OdmNpAZs/N5avCoovK6FJ3Xf84ROrNdQ9qnb7fo95ODaXrMs6 x9RZScf9jin9H1h3EJWrFCXKos5N+Uo+6co8Mmwl1DVkdFs+CnJwyGiVad3Dc0nIQARg uK5CPBraE4mqzC/DknippRu6VjZtmuZpCgVrZ2Qd6TXWWyJoO3fAnSb4KecPiCOK1QkC nC1A== X-Received: by 10.236.141.74 with SMTP id f50mr8133146yhj.73.1359402106608; Mon, 28 Jan 2013 11:41:46 -0800 (PST) Received: from salusa.poochiereds.net (cpe-107-015-113-143.nc.res.rr.com. [107.15.113.143]) by mx.google.com with ESMTPS id i24sm9712873ann.16.2013.01.28.11.41.43 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 28 Jan 2013 11:41:44 -0800 (PST) From: Jeff Layton To: bfields@fieldses.org Cc: linux-nfs@vger.kernel.org Subject: [PATCH v1 05/16] nfsd: add alloc and free functions for DRC entries Date: Mon, 28 Jan 2013 14:41:11 -0500 Message-Id: <1359402082-29195-6-git-send-email-jlayton@redhat.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1359402082-29195-1-git-send-email-jlayton@redhat.com> References: <1359402082-29195-1-git-send-email-jlayton@redhat.com> X-Gm-Message-State: ALoCoQkCTh/1+CD4WRGjSz5J1oBPMKuLHjNOKtCDnEe91Ai0kAcSfO37wcLM0xWCf439fGoooXSw Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org Signed-off-by: Jeff Layton --- fs/nfsd/nfscache.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index 4aad9e4..363bc61 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c @@ -47,10 +47,34 @@ static int nfsd_cache_append(struct svc_rqst *rqstp, struct kvec *vec); */ static DEFINE_SPINLOCK(cache_lock); -int nfsd_reply_cache_init(void) +static struct svc_cacherep * +nfsd_reply_cache_alloc(void) { struct svc_cacherep *rp; + + rp = kmem_cache_alloc(drc_slab, GFP_KERNEL); + if (rp) { + rp->c_state = RC_UNUSED; + rp->c_type = RC_NOCACHE; + INIT_LIST_HEAD(&rp->c_lru); + INIT_HLIST_NODE(&rp->c_hash); + } + return rp; +} + +static void +nfsd_reply_cache_free_locked(struct svc_cacherep *rp) +{ + if (rp->c_state == RC_DONE && rp->c_type == RC_REPLBUFF) + kfree(rp->c_replvec.iov_base); + list_del(&rp->c_lru); + kmem_cache_free(drc_slab, rp); +} + +int nfsd_reply_cache_init(void) +{ int i; + struct svc_cacherep *rp; drc_slab = kmem_cache_create("nfsd_drc", sizeof(struct svc_cacherep), 0, 0, NULL); @@ -60,13 +84,10 @@ int nfsd_reply_cache_init(void) INIT_LIST_HEAD(&lru_head); i = CACHESIZE; while (i) { - rp = kmem_cache_alloc(drc_slab, GFP_KERNEL); + rp = nfsd_reply_cache_alloc(); if (!rp) goto out_nomem; list_add(&rp->c_lru, &lru_head); - rp->c_state = RC_UNUSED; - rp->c_type = RC_NOCACHE; - INIT_HLIST_NODE(&rp->c_hash); i--; } @@ -88,10 +109,7 @@ void nfsd_reply_cache_shutdown(void) while (!list_empty(&lru_head)) { rp = list_entry(lru_head.next, struct svc_cacherep, c_lru); - if (rp->c_state == RC_DONE && rp->c_type == RC_REPLBUFF) - kfree(rp->c_replvec.iov_base); - list_del(&rp->c_lru); - kmem_cache_free(drc_slab, rp); + nfsd_reply_cache_free_locked(rp); } cache_disabled = 1;