Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp1697594pxa; Thu, 20 Aug 2020 19:01:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyMp4MbydP35K+tOd/cwVUlkDnJoSYxIuaBnPS1JOGZSL9I0w9MQUE/RVaBijo/2floQCKb X-Received: by 2002:a17:906:d935:: with SMTP id rn21mr400535ejb.145.1597975263736; Thu, 20 Aug 2020 19:01:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597975263; cv=none; d=google.com; s=arc-20160816; b=tfJ75XLiQwYSilFKL8nprsAJpUlBMw+Y59eVznHGFHuax3NkQCu6ZXnudg4GdxEydz h+tklpbcRGzccbXjad+81/1neEPlRklSbLH/RKX9axHxkV0RHD2G6R2YS2VignNhyKB6 aGc/mDhbfFK542/yaIzWrHUcnI8fEFAOnYYzfDxsZd73xqwPYzuzaSmJ0+efYyp7zvKX /0lVcUZGukIrI46X5kcj/8tT4gbj9EsKWJzdy3BAzxb9cL4botT/6GJnWfjs6vNxfRpG AckouZhFgCcIYL/D37dPsGNgpOaJFtRj+LWlQ9X3p8FoGk6AG8g5q5Zzuvg+9ZHhPmB/ 6w/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=q7QlGut1tDpIaRNNUJh/io67sSLSjPRWjhjRGJpv0VE=; b=YYX/9fOHHp5+tZ74h9jzoNTlCicshlwfb0tUkDxHB+FnccY0Pj3VlNVouMlCvLqqgd 6RapQW9fZ6ChKoj2y64qe8AJ/vxXZtihUTOAllKakmwOMhea/CeZ9p2udVaEL4M11FgV um5bNizYZfpi7gTf286uBmjGF2Yzscf/kE8M4WJ4L+MS+SeayhDXcZTOilz7QZDRhBhg Ql2woGP7ymO11A/mY6k0SDWzRayRKSkiVSLV4XLOcx821kOsRlYT1zdjNLoTmPQl400q DamAiY5kdF0COpBvQzZ/SleD02eTsoQgz8w9qH7U7+hVqeMdrZ8Fe+M/9W3XfPDTiihz 5NQw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e11si226586ejd.431.2020.08.20.19.00.39; Thu, 20 Aug 2020 19:01:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727123AbgHUCAB (ORCPT + 99 others); Thu, 20 Aug 2020 22:00:01 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:53790 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727070AbgHUCAA (ORCPT ); Thu, 20 Aug 2020 22:00:00 -0400 X-IronPort-AV: E=Sophos;i="5.76,335,1592841600"; d="scan'208";a="98365593" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 21 Aug 2020 09:59:58 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id 0A8DF48990C1; Fri, 21 Aug 2020 09:59:56 +0800 (CST) Received: from G08CNEXCHPEKD06.g08.fujitsu.local (10.167.33.205) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 21 Aug 2020 09:59:55 +0800 Received: from localhost.localdomain (10.167.225.206) by G08CNEXCHPEKD06.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 21 Aug 2020 09:59:55 +0800 From: Hao Li To: CC: , , , Subject: [PATCH] fs: Kill DCACHE_DONTCACHE dentry even if DCACHE_REFERENCED is set Date: Fri, 21 Aug 2020 09:59:53 +0800 Message-ID: <20200821015953.22956-1-lihao2018.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-yoursite-MailScanner-ID: 0A8DF48990C1.A0C10 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: lihao2018.fnst@cn.fujitsu.com X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, DCACHE_REFERENCED prevents the dentry with DCACHE_DONTCACHE set from being killed, so the corresponding inode can't be evicted. If the DAX policy of an inode is changed, we can't make policy changing take effects unless dropping caches manually. This patch fixes this problem and flushes the inode to disk to prepare for evicting it. Signed-off-by: Hao Li --- fs/dcache.c | 3 ++- fs/inode.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index ea0485861d93..486c7409dc82 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -796,7 +796,8 @@ static inline bool fast_dput(struct dentry *dentry) */ smp_rmb(); d_flags = READ_ONCE(dentry->d_flags); - d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST | DCACHE_DISCONNECTED; + d_flags &= DCACHE_REFERENCED | DCACHE_LRU_LIST | DCACHE_DISCONNECTED + | DCACHE_DONTCACHE; /* Nothing to do? Dropping the reference was all we needed? */ if (d_flags == (DCACHE_REFERENCED | DCACHE_LRU_LIST) && !d_unhashed(dentry)) diff --git a/fs/inode.c b/fs/inode.c index 72c4c347afb7..5218a8aebd7f 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1632,7 +1632,7 @@ static void iput_final(struct inode *inode) } state = inode->i_state; - if (!drop) { + if (!drop || (drop && (inode->i_state & I_DONTCACHE))) { WRITE_ONCE(inode->i_state, state | I_WILL_FREE); spin_unlock(&inode->i_lock); -- 2.28.0