Eric Biggers <ebigg...@kernel.org> writes: > On Sat, May 30, 2020 at 02:17:02AM -0400, Gabriel Krisman Bertazi wrote: >> > > > + /* >> > + * If the dentry name is stored in-line, then it may be concurrently >> > + * modified by a rename. If this happens, the VFS will eventually retry >> > + * the lookup, so it doesn't matter what ->d_compare() returns. >> > + * However, it's unsafe to call utf8_strncasecmp() with an unstable >> > + * string. Therefore, we have to copy the name into a temporary buffer. >> > + */ >> > + if (len <= DNAME_INLINE_LEN - 1) { >> > + unsigned int i; >> > + >> > + for (i = 0; i < len; i++) >> > + strbuf[i] = READ_ONCE(str[i]); >> > + strbuf[len] = 0; >> > + qstr.name = strbuf; >> > + } >> > + >> >> Could we avoid this if the casefolded version were cached in the dentry? >> Then we could use utf8_strncasecmp_folded which would be safe. Would >> this be acceptable for vfs? > > The VFS assumes that each dentry has one name, the one in d_name. That's what > it passes to ->d_compare(), and that's what it updates in __d_move(). > > So while ext4 and f2fs could put the casefolded name in ->d_fsdata, > ->d_compare() wouldn't actually have access to it (unless we added d_fsdata > as a > parameter to ->d_compare()). Also, the casefolded name would get outdated > when > __d_move() changes d_name.
Thanks for the explanation. I see. I was thinking this cached name could be invalidated if the name changes and all that jazz, but I didn't understand this code well enough to give it a try. I hate the need to do this copy here, though. Anyway, Reviewed-by: Gabriel Krisman Bertazi <kris...@collabora.com> > > We could instead make d_name always be the casefolded name. I'm not sure that > would be possible, though. For one, I don't think ->lookup() is allowed to > just > change the dentry name. It would also make getcwd(), /proc/*/fd/, etc. always > show casefolded names, which could be problematic. And probably other issues > I > can't think of off the top of my head. > > - Eric -- Gabriel Krisman Bertazi _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel