From: Al Viro <viro@zeniv.linux.org.uk>
To: "André Almeida" <andrealmeid@collabora.com>
Cc: Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
krisman@collabora.com, smcv@collabora.com, kernel@collabora.com,
linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org,
Daniel Rosenberg <drosen@google.com>
Subject: Re: [RFC PATCH 2/4] mm: shmem: Support case-insensitive file name lookups
Date: Tue, 23 Mar 2021 23:19:00 +0000 [thread overview]
Message-ID: <YFp3ZF+gAnhKMJIA@zeniv-ca.linux.org.uk> (raw)
In-Reply-To: <20210323195941.69720-3-andrealmeid@collabora.com>
On Tue, Mar 23, 2021 at 04:59:39PM -0300, André Almeida wrote:
> * dcache handling:
>
> For a +F directory, tmpfs only stores the first equivalent name dentry
> used in the dcache. This is done to prevent unintentional duplication of
> dentries in the dcache, while also allowing the VFS code to quickly find
> the right entry in the cache despite which equivalent string was used in
> a previous lookup, without having to resort to ->lookup().
>
> d_hash() of casefolded directories is implemented as the hash of the
> casefolded string, such that we always have a well-known bucket for all
> the equivalencies of the same string. d_compare() uses the
> utf8_strncasecmp() infrastructure, which handles the comparison of
> equivalent, same case, names as well.
>
> For now, negative lookups are not inserted in the dcache, since they
> would need to be invalidated anyway, because we can't trust missing file
> dentries. This is bad for performance but requires some leveraging of
> the VFS layer to fix. We can live without that for now, and so does
> everyone else.
"For now"? Not a single practical suggestion has ever materialized.
Pardon me, but by now I'm very sceptical about the odds of that
ever changing. And no, I don't have any suggestions either.
> The lookup() path at tmpfs creates negatives dentries, that are later
> instantiated if the file is created. In that way, all files in tmpfs
> have a dentry given that the filesystem exists exclusively in memory.
> As explained above, we don't have negative dentries for casefold files,
> so dentries are created at lookup() iff files aren't casefolded. Else,
> the dentry is created just before being instantiated at create path.
> At the remove path, dentries are invalidated for casefolded files.
Umm... What happens to those assertions if previously sane directory
gets case-buggered? You've got an ioctl for doing just that...
Incidentally, that ioctl is obviously racy - result of that simple_empty()
might have nothing to do with reality before it is returned to caller.
And while we are at it, simple_empty() doesn't check a damn thing about
negative dentries in there...
next prev parent reply other threads:[~2021-03-23 23:24 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-23 19:59 [RFC PATCH 0/4] mm: shmem: Add case-insensitive support for tmpfs André Almeida
2021-03-23 19:59 ` [RFC PATCH 1/4] Revert "libfs: unexport generic_ci_d_compare() and generic_ci_d_hash()" André Almeida
2021-03-23 20:15 ` Matthew Wilcox
2021-03-24 20:09 ` André Almeida
2021-03-23 19:59 ` [RFC PATCH 2/4] mm: shmem: Support case-insensitive file name lookups André Almeida
2021-03-23 20:18 ` Gabriel Krisman Bertazi
2021-03-23 20:18 ` Gabriel Krisman Bertazi
2021-03-24 20:17 ` André Almeida
2021-03-23 23:19 ` Al Viro [this message]
2021-03-24 20:44 ` André Almeida
2021-03-23 19:59 ` [RFC PATCH 3/4] mm: shmem: Add IOCTL support for tmpfs André Almeida
2021-03-23 22:15 ` Gabriel Krisman Bertazi
2021-03-23 22:15 ` Gabriel Krisman Bertazi
2021-03-23 19:59 ` [RFC PATCH 4/4] docs: tmpfs: Add casefold options André Almeida
2021-03-23 21:58 ` Randy Dunlap
2021-03-25 14:27 ` André Almeida
2021-03-23 22:19 ` Gabriel Krisman Bertazi
2021-03-23 22:19 ` Gabriel Krisman Bertazi
2021-03-24 20:47 ` André Almeida
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YFp3ZF+gAnhKMJIA@zeniv-ca.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=akpm@linux-foundation.org \
--cc=andrealmeid@collabora.com \
--cc=drosen@google.com \
--cc=hughd@google.com \
--cc=kernel@collabora.com \
--cc=krisman@collabora.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=smcv@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.