From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cong Wang Subject: [Patch 3.14 stable 03/16] new helper: dentry_free() Date: Thu, 6 Nov 2014 11:37:07 -0800 Message-ID: <1415302640-5876-4-git-send-email-xiyou.wangcong@gmail.com> References: <1415302640-5876-1-git-send-email-xiyou.wangcong@gmail.com> Cc: viro@zeniv.linux.org.uk, gregkh@linuxfoundation.org, linux-fsdevel@vger.kernel.org To: stable@vger.kernel.org Return-path: Received: from mail-pd0-f170.google.com ([209.85.192.170]:42801 "EHLO mail-pd0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751415AbaKFThr (ORCPT ); Thu, 6 Nov 2014 14:37:47 -0500 In-Reply-To: <1415302640-5876-1-git-send-email-xiyou.wangcong@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: Al Viro The part of old d_free() that dealt with actual freeing of dentry. Taken out of dentry_kill() into a separate function. Signed-off-by: Al Viro (cherry picked from commit b4f0354e968f5fabd39bc85b99fedae4a97589fe) --- fs/dcache.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index bea71ca..d96d271 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -245,6 +245,15 @@ static void __d_free(struct rcu_head *head) kmem_cache_free(dentry_cache, dentry); } +static void dentry_free(struct dentry *dentry) +{ + /* if dentry was never visible to RCU, immediate free is OK */ + if (!(dentry->d_flags & DCACHE_RCUACCESS)) + __d_free(&dentry->d_u.d_rcu); + else + call_rcu(&dentry->d_u.d_rcu, __d_free); +} + /** * dentry_rcuwalk_barrier - invalidate in-progress rcu-walk lookups * @dentry: the target dentry @@ -512,11 +521,7 @@ dentry_kill(struct dentry *dentry, int unlock_on_failure) if (dentry->d_op && dentry->d_op->d_release) dentry->d_op->d_release(dentry); - /* if dentry was never visible to RCU, immediate free is OK */ - if (!(dentry->d_flags & DCACHE_RCUACCESS)) - __d_free(&dentry->d_u.d_rcu); - else - call_rcu(&dentry->d_u.d_rcu, __d_free); + dentry_free(dentry); return parent; } -- 1.8.3.1