From: Eric Biggers <ebiggers@kernel.org>
To: Daniel Rosenberg <drosen@google.com>
Cc: Theodore Ts'o <tytso@mit.edu>,
linux-ext4@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
Chao Yu <chao@kernel.org>,
linux-f2fs-devel@lists.sourceforge.net,
linux-fscrypt@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Richard Weinberger <richard@nod.at>,
linux-mtd@lists.infradead.org,
Andreas Dilger <adilger.kernel@dilger.ca>,
Jonathan Corbet <corbet@lwn.net>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org,
Gabriel Krisman Bertazi <krisman@collabora.com>,
kernel-team@android.com
Subject: Re: [PATCH v7 2/8] fs: Add standard casefolding support
Date: Tue, 11 Feb 2020 19:55:43 -0800 [thread overview]
Message-ID: <20200212035543.GD870@sol.localdomain> (raw)
In-Reply-To: <20200208013552.241832-3-drosen@google.com>
On Fri, Feb 07, 2020 at 05:35:46PM -0800, Daniel Rosenberg wrote:
> This adds general supporting functions for filesystems that use
> utf8 casefolding. It provides standard dentry_operations and adds the
> necessary structures in struct super_block to allow this standardization.
>
> Ext4 and F2fs are switch to these implementations.
I think you mean that ext4 and f2fs *will be switched* to these implementations?
It's later in the series, not in this patch.
> +#ifdef CONFIG_UNICODE
> +bool needs_casefold(const struct inode *dir)
> +{
> + return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding &&
> + (!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir));
> +}
> +EXPORT_SYMBOL(needs_casefold);
Can you add kerneldoc comments to all the new functions that are exported to
modules?
> +struct hash_ctx {
> + struct utf8_itr_context ctx;
> + unsigned long hash;
> +};
> +
> +static int do_generic_ci_hash(struct utf8_itr_context *ctx, int byte, int pos)
> +{
> + struct hash_ctx *hctx = container_of(ctx, struct hash_ctx, ctx);
> +
> + hctx->hash = partial_name_hash((unsigned char)byte, hctx->hash);
> + return 0;
> +}
> +
> +int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> +{
> + const struct inode *inode = READ_ONCE(dentry->d_inode);
> + struct super_block *sb = dentry->d_sb;
> + const struct unicode_map *um = sb->s_encoding;
> + int ret = 0;
> + struct hash_ctx hctx;
> +
> + if (!inode || !needs_casefold(inode))
> + return 0;
> +
> + hctx.hash = init_name_hash(dentry);
> + hctx.ctx.actor = do_generic_ci_hash;
> + ret = utf8_casefold_iter(um, str, &hctx.ctx);
> + if (ret < 0)
> + goto err;
> + str->hash = end_name_hash(hctx.hash);
> +
> + return 0;
> +err:
> + if (sb_has_enc_strict_mode(sb))
> + ret = -EINVAL;
> + return ret;
> +}
> +EXPORT_SYMBOL(generic_ci_d_hash);
> +#endif
This breaks the !strict_mode case by starting to fail lookups of names that
aren't valid Unicode, instead of falling back to the standard case-sensitive
behavior.
There is an xfstest for casefolding; is this bug not caught by it (in which case
the test needs to be improved)? Or did you just not run it?
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 6eae91c0668f9..a260afbc06d22 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1382,6 +1382,12 @@ extern int send_sigurg(struct fown_struct *fown);
> #define SB_ACTIVE (1<<30)
> #define SB_NOUSER (1<<31)
>
> +/* These flags relate to encoding and casefolding */
> +#define SB_ENC_STRICT_MODE_FL (1 << 0)
It would be helpful if the comment mentioned that these flags are stored on-disk
(and therefore can't be re-numbered, unlike the other flags defined nearby).
> +#ifdef CONFIG_UNICODE
> + struct unicode_map *s_encoding;
> + __u16 s_encoding_flags;
> #endif
This isn't a UAPI header, so 's_encoding_flags' should use u16, not __u16.
And for that matter, 's_encoding_flags' will be pointer-sized due to padding
anyway, so maybe just make it 'unsigned int'?
> +static inline bool needs_casefold(const struct inode *dir)
> +{
> + return 0;
> +}
> +#endif
Use false instead of 0 for 'bool'.
- Eric
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org>
To: Daniel Rosenberg <drosen@google.com>
Cc: kernel-team@android.com, Theodore Ts'o <tytso@mit.edu>,
Jonathan Corbet <corbet@lwn.net>,
Richard Weinberger <richard@nod.at>,
Andreas Dilger <adilger.kernel@dilger.ca>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-fscrypt@vger.kernel.org, linux-mtd@lists.infradead.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-fsdevel@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
linux-ext4@vger.kernel.org,
Gabriel Krisman Bertazi <krisman@collabora.com>
Subject: Re: [f2fs-dev] [PATCH v7 2/8] fs: Add standard casefolding support
Date: Tue, 11 Feb 2020 19:55:43 -0800 [thread overview]
Message-ID: <20200212035543.GD870@sol.localdomain> (raw)
In-Reply-To: <20200208013552.241832-3-drosen@google.com>
On Fri, Feb 07, 2020 at 05:35:46PM -0800, Daniel Rosenberg wrote:
> This adds general supporting functions for filesystems that use
> utf8 casefolding. It provides standard dentry_operations and adds the
> necessary structures in struct super_block to allow this standardization.
>
> Ext4 and F2fs are switch to these implementations.
I think you mean that ext4 and f2fs *will be switched* to these implementations?
It's later in the series, not in this patch.
> +#ifdef CONFIG_UNICODE
> +bool needs_casefold(const struct inode *dir)
> +{
> + return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding &&
> + (!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir));
> +}
> +EXPORT_SYMBOL(needs_casefold);
Can you add kerneldoc comments to all the new functions that are exported to
modules?
> +struct hash_ctx {
> + struct utf8_itr_context ctx;
> + unsigned long hash;
> +};
> +
> +static int do_generic_ci_hash(struct utf8_itr_context *ctx, int byte, int pos)
> +{
> + struct hash_ctx *hctx = container_of(ctx, struct hash_ctx, ctx);
> +
> + hctx->hash = partial_name_hash((unsigned char)byte, hctx->hash);
> + return 0;
> +}
> +
> +int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> +{
> + const struct inode *inode = READ_ONCE(dentry->d_inode);
> + struct super_block *sb = dentry->d_sb;
> + const struct unicode_map *um = sb->s_encoding;
> + int ret = 0;
> + struct hash_ctx hctx;
> +
> + if (!inode || !needs_casefold(inode))
> + return 0;
> +
> + hctx.hash = init_name_hash(dentry);
> + hctx.ctx.actor = do_generic_ci_hash;
> + ret = utf8_casefold_iter(um, str, &hctx.ctx);
> + if (ret < 0)
> + goto err;
> + str->hash = end_name_hash(hctx.hash);
> +
> + return 0;
> +err:
> + if (sb_has_enc_strict_mode(sb))
> + ret = -EINVAL;
> + return ret;
> +}
> +EXPORT_SYMBOL(generic_ci_d_hash);
> +#endif
This breaks the !strict_mode case by starting to fail lookups of names that
aren't valid Unicode, instead of falling back to the standard case-sensitive
behavior.
There is an xfstest for casefolding; is this bug not caught by it (in which case
the test needs to be improved)? Or did you just not run it?
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 6eae91c0668f9..a260afbc06d22 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1382,6 +1382,12 @@ extern int send_sigurg(struct fown_struct *fown);
> #define SB_ACTIVE (1<<30)
> #define SB_NOUSER (1<<31)
>
> +/* These flags relate to encoding and casefolding */
> +#define SB_ENC_STRICT_MODE_FL (1 << 0)
It would be helpful if the comment mentioned that these flags are stored on-disk
(and therefore can't be re-numbered, unlike the other flags defined nearby).
> +#ifdef CONFIG_UNICODE
> + struct unicode_map *s_encoding;
> + __u16 s_encoding_flags;
> #endif
This isn't a UAPI header, so 's_encoding_flags' should use u16, not __u16.
And for that matter, 's_encoding_flags' will be pointer-sized due to padding
anyway, so maybe just make it 'unsigned int'?
> +static inline bool needs_casefold(const struct inode *dir)
> +{
> + return 0;
> +}
> +#endif
Use false instead of 0 for 'bool'.
- Eric
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org>
To: Daniel Rosenberg <drosen@google.com>
Cc: kernel-team@android.com, Theodore Ts'o <tytso@mit.edu>,
Jonathan Corbet <corbet@lwn.net>,
Richard Weinberger <richard@nod.at>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Chao Yu <chao@kernel.org>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-fscrypt@vger.kernel.org, linux-mtd@lists.infradead.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-fsdevel@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
linux-ext4@vger.kernel.org,
Gabriel Krisman Bertazi <krisman@collabora.com>
Subject: Re: [PATCH v7 2/8] fs: Add standard casefolding support
Date: Tue, 11 Feb 2020 19:55:43 -0800 [thread overview]
Message-ID: <20200212035543.GD870@sol.localdomain> (raw)
In-Reply-To: <20200208013552.241832-3-drosen@google.com>
On Fri, Feb 07, 2020 at 05:35:46PM -0800, Daniel Rosenberg wrote:
> This adds general supporting functions for filesystems that use
> utf8 casefolding. It provides standard dentry_operations and adds the
> necessary structures in struct super_block to allow this standardization.
>
> Ext4 and F2fs are switch to these implementations.
I think you mean that ext4 and f2fs *will be switched* to these implementations?
It's later in the series, not in this patch.
> +#ifdef CONFIG_UNICODE
> +bool needs_casefold(const struct inode *dir)
> +{
> + return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding &&
> + (!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir));
> +}
> +EXPORT_SYMBOL(needs_casefold);
Can you add kerneldoc comments to all the new functions that are exported to
modules?
> +struct hash_ctx {
> + struct utf8_itr_context ctx;
> + unsigned long hash;
> +};
> +
> +static int do_generic_ci_hash(struct utf8_itr_context *ctx, int byte, int pos)
> +{
> + struct hash_ctx *hctx = container_of(ctx, struct hash_ctx, ctx);
> +
> + hctx->hash = partial_name_hash((unsigned char)byte, hctx->hash);
> + return 0;
> +}
> +
> +int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> +{
> + const struct inode *inode = READ_ONCE(dentry->d_inode);
> + struct super_block *sb = dentry->d_sb;
> + const struct unicode_map *um = sb->s_encoding;
> + int ret = 0;
> + struct hash_ctx hctx;
> +
> + if (!inode || !needs_casefold(inode))
> + return 0;
> +
> + hctx.hash = init_name_hash(dentry);
> + hctx.ctx.actor = do_generic_ci_hash;
> + ret = utf8_casefold_iter(um, str, &hctx.ctx);
> + if (ret < 0)
> + goto err;
> + str->hash = end_name_hash(hctx.hash);
> +
> + return 0;
> +err:
> + if (sb_has_enc_strict_mode(sb))
> + ret = -EINVAL;
> + return ret;
> +}
> +EXPORT_SYMBOL(generic_ci_d_hash);
> +#endif
This breaks the !strict_mode case by starting to fail lookups of names that
aren't valid Unicode, instead of falling back to the standard case-sensitive
behavior.
There is an xfstest for casefolding; is this bug not caught by it (in which case
the test needs to be improved)? Or did you just not run it?
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 6eae91c0668f9..a260afbc06d22 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1382,6 +1382,12 @@ extern int send_sigurg(struct fown_struct *fown);
> #define SB_ACTIVE (1<<30)
> #define SB_NOUSER (1<<31)
>
> +/* These flags relate to encoding and casefolding */
> +#define SB_ENC_STRICT_MODE_FL (1 << 0)
It would be helpful if the comment mentioned that these flags are stored on-disk
(and therefore can't be re-numbered, unlike the other flags defined nearby).
> +#ifdef CONFIG_UNICODE
> + struct unicode_map *s_encoding;
> + __u16 s_encoding_flags;
> #endif
This isn't a UAPI header, so 's_encoding_flags' should use u16, not __u16.
And for that matter, 's_encoding_flags' will be pointer-sized due to padding
anyway, so maybe just make it 'unsigned int'?
> +static inline bool needs_casefold(const struct inode *dir)
> +{
> + return 0;
> +}
> +#endif
Use false instead of 0 for 'bool'.
- Eric
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-02-12 3:55 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-08 1:35 [PATCH v7 0/8] Support fof Casefolding and Encryption Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-08 1:35 ` [PATCH v7 1/8] unicode: Add utf8_casefold_iter Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 3:38 ` Eric Biggers
2020-02-12 3:38 ` Eric Biggers
2020-02-12 3:38 ` [f2fs-dev] " Eric Biggers
2020-02-14 21:47 ` Daniel Rosenberg
2020-02-14 21:47 ` Daniel Rosenberg
2020-02-14 21:47 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-17 19:02 ` Gabriel Krisman Bertazi
2020-02-17 19:02 ` Gabriel Krisman Bertazi
2020-02-17 19:02 ` [f2fs-dev] " Gabriel Krisman Bertazi
2020-02-08 1:35 ` [PATCH v7 2/8] fs: Add standard casefolding support Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-08 2:12 ` Al Viro
2020-02-08 2:12 ` Al Viro
2020-02-08 2:12 ` [f2fs-dev] " Al Viro
2020-02-10 23:11 ` Daniel Rosenberg
2020-02-10 23:11 ` Daniel Rosenberg
2020-02-10 23:11 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-10 23:42 ` Al Viro
2020-02-10 23:42 ` Al Viro
2020-02-10 23:42 ` [f2fs-dev] " Al Viro
2020-02-12 6:34 ` Eric Biggers
2020-02-12 6:34 ` Eric Biggers
2020-02-12 6:34 ` [f2fs-dev] " Eric Biggers
2020-02-12 6:57 ` Eric Biggers
2020-02-12 6:57 ` Eric Biggers
2020-02-12 6:57 ` [f2fs-dev] " Eric Biggers
2020-02-20 2:27 ` Daniel Rosenberg
2020-02-20 2:27 ` Daniel Rosenberg
2020-02-20 2:27 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 3:55 ` Eric Biggers [this message]
2020-02-12 3:55 ` Eric Biggers
2020-02-12 3:55 ` [f2fs-dev] " Eric Biggers
2020-02-08 1:35 ` [PATCH v7 3/8] f2fs: Use generic " Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 4:05 ` Eric Biggers
2020-02-12 4:05 ` Eric Biggers
2020-02-12 4:05 ` [f2fs-dev] " Eric Biggers
2020-02-08 1:35 ` [PATCH v7 4/8] ext4: " Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-08 1:35 ` [PATCH v7 5/8] fscrypt: Have filesystems handle their d_ops Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 4:33 ` Eric Biggers
2020-02-12 4:33 ` Eric Biggers
2020-02-12 4:33 ` [f2fs-dev] " Eric Biggers
2020-02-08 1:35 ` [PATCH v7 6/8] f2fs: Handle casefolding with Encryption Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 5:10 ` Eric Biggers
2020-02-12 5:10 ` Eric Biggers
2020-02-12 5:10 ` [f2fs-dev] " Eric Biggers
2020-02-12 5:55 ` Al Viro
2020-02-12 5:55 ` Al Viro
2020-02-12 5:55 ` [f2fs-dev] " Al Viro
2020-02-12 6:06 ` Eric Biggers
2020-02-12 6:06 ` Eric Biggers
2020-02-12 6:06 ` [f2fs-dev] " Eric Biggers
2020-02-12 5:47 ` Eric Biggers
2020-02-12 5:47 ` Eric Biggers
2020-02-12 5:47 ` [f2fs-dev] " Eric Biggers
2020-02-08 1:35 ` [PATCH v7 7/8] ext4: Hande casefolding with encryption Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 5:59 ` Eric Biggers
2020-02-12 5:59 ` Eric Biggers
2020-02-12 5:59 ` [f2fs-dev] " Eric Biggers
2020-02-08 1:35 ` [PATCH v7 8/8] ext4: Optimize match for casefolded encrypted dirs Daniel Rosenberg
2020-02-08 1:35 ` Daniel Rosenberg
2020-02-08 1:35 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-02-12 6:12 ` [PATCH v7 0/8] Support fof Casefolding and Encryption Eric Biggers
2020-02-12 6:12 ` Eric Biggers
2020-02-12 6:12 ` [f2fs-dev] " Eric Biggers
2020-02-13 0:01 ` Daniel Rosenberg
2020-02-13 0:01 ` Daniel Rosenberg
2020-02-13 0:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
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=20200212035543.GD870@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=chao@kernel.org \
--cc=corbet@lwn.net \
--cc=drosen@google.com \
--cc=jaegeuk@kernel.org \
--cc=kernel-team@android.com \
--cc=krisman@collabora.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
/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.