[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190403171920.GS2217@ZenIV.linux.org.uk>
Date: Wed, 3 Apr 2019 18:19:21 +0100
From: Al Viro <viro@...iv.linux.org.uk>
To: "Tobin C. Harding" <tobin@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Roman Gushchin <guro@...com>,
Alexander Viro <viro@....linux.org.uk>,
Christoph Hellwig <hch@...radead.org>,
Pekka Enberg <penberg@...helsinki.fi>,
David Rientjes <rientjes@...gle.com>,
Joonsoo Kim <iamjoonsoo.kim@....com>,
Christopher Lameter <cl@...ux.com>,
Matthew Wilcox <willy@...radead.org>,
Miklos Szeredi <mszeredi@...hat.com>,
Andreas Dilger <adilger@...ger.ca>,
Waiman Long <longman@...hat.com>,
Tycho Andersen <tycho@...ho.ws>, Theodore Ts'o <tytso@....edu>,
Andi Kleen <ak@...ux.intel.com>,
David Chinner <david@...morbit.com>,
Nick Piggin <npiggin@...il.com>,
Rik van Riel <riel@...hat.com>,
Hugh Dickins <hughd@...gle.com>, linux-mm@...ck.org,
linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
Linus Torvalds <torvalds@...ux-foundation.org>
Subject: Re: [RFC PATCH v2 14/14] dcache: Implement object migration
On Wed, Apr 03, 2019 at 06:08:11PM +0100, Al Viro wrote:
> Oh, *brilliant*
>
> Let's do d_invalidate() on random dentries and hope they go away.
> With convoluted and brittle logics for deciding which ones to
> spare, which is actually wrong. This will pick mountpoints
> and tear them out, to start with.
>
> NAKed-by: Al Viro <viro@...iv.linux.org.uk>
>
> And this is a NAK for the entire approach; if it has a positive refcount,
> LEAVE IT ALONE. Period. Don't play this kind of games, they are wrong.
> d_invalidate() is not something that can be done to an arbitrary dentry.
PS: "try to evict what can be evicted out of this set" can be done, but
you want something like
start with empty list
go through your array of references
grab dentry->d_lock
if dentry->d_lockref.count is not zero
unlock and continue
if dentry->d_flags & DCACHE_SHRINK_LIST
ditto, it's not for us to play with
if (dentry->d_flags & DCACHE_LRU_LIST)
d_lru_del(dentry);
d_shrink_add(dentry, &list);
unlock
on the collection phase and
if the list is not empty by the end of that loop
shrink_dentry_list(&list);
on the disposal.
Powered by blists - more mailing lists