From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-fscrypt@vger.kernel.org
Subject: Re: [PATCH] ext4: Optimize case-insensitive lookups
Date: Fri, 31 May 2019 14:29:04 -0400 [thread overview]
Message-ID: <851s0eiikv.fsf@collabora.com> (raw)
In-Reply-To: <20190530210156.GI2998@mit.edu> (Theodore Ts'o's message of "Thu, 30 May 2019 17:01:56 -0400")
"Theodore Ts'o" <tytso@mit.edu> writes:
> On Wed, May 29, 2019 at 02:54:46PM -0400, Gabriel Krisman Bertazi wrote:
>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>> index c18ab748d20d..e3809cfda9f4 100644
>> --- a/fs/ext4/ext4.h
>> +++ b/fs/ext4/ext4.h
>> @@ -2078,6 +2078,10 @@ struct ext4_filename {
>> #ifdef CONFIG_FS_ENCRYPTION
>> struct fscrypt_str crypto_buf;
>> #endif
>> +#ifdef CONFIG_UNICODE
>> + int cf_len;
>> + unsigned char cf_name[EXT4_NAME_LEN];
>> +#endif
>> };
>>
>> #define fname_name(p) ((p)->disk_name.name)
>
> EXT4_NAME_LEN is 256, and struct ext4_filename is allocated on the
> stack. So this is going to increase the stack usage by 258 bytes.
> Perhaps should we just kmalloc the temporary buffer when it's needed?
I wanted to avoid adding an allocation to this path, but maybe that was
misguided, since this is out of the dcache critical path. I also wanted
to remove the allocation from d_hash, but we'd require a similar size
allocation in the stack. Is that a good idea?
> The other thing that this patch reminds me is that there is great
> interest in supporting case folded directories and fscrypt at the same
> time. Today fscrypt works by encrypting the filename, and stashes it
> in fname->crypto_buf, and this allows for a byte-for-byte comparison
> of the encrypted name. To support fscrypt && casefold, what we would
> need to do is to change the htree hash so that the hash is caluclated
> on the normalized form, and then we'll have to decrypt each filename
> in the directory block and then compare it against the normalized form
> that stashed in cf_name. So that means we'll never need to allocate
> memory for cf_name and crypto_buf at the same time.
fscrypt and case-insensitive is getting to the top of my to-do list,
i'll something there early next week. Thanks for the explanation on
it.
>
> We can also use struct fscrypt_str for cf_name; it's defined as a
> combined unsighed char *name and u32 len. We already use fscrypt_str
> even the !CONFIG_FS_ENCRYPTION case, since it's a convenient way of
> handling a non-NULL terminated filename blob. And this will hopefully
> make it simpler to deal with integrating casefolding and fscrypt in
> the future.
I will send a v2 with this change already, to simplify
fscrypt+casefolding support.
>
> Cheers,
>
> - Ted
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2019-05-31 18:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-29 18:54 [PATCH] ext4: Optimize case-insensitive lookups Gabriel Krisman Bertazi
2019-05-30 21:01 ` Theodore Ts'o
2019-05-31 18:29 ` Gabriel Krisman Bertazi [this message]
-- strict thread matches above, loose matches on Subject: below --
2019-06-17 19:02 Gabriel Krisman Bertazi
2019-06-20 4:01 ` Theodore Ts'o
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=851s0eiikv.fsf@collabora.com \
--to=krisman@collabora.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=tytso@mit.edu \
/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.