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

Reply via email to