From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: Daniel Rosenberg <drosen@google.com>
Cc: "Theodore Y . Ts'o" <tytso@mit.edu>,
Jaegeuk Kim <jaegeuk@kernel.org>,
Eric Biggers <ebiggers@kernel.org>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Chao Yu <chao@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Richard Weinberger <richard@nod.at>,
linux-fscrypt@vger.kernel.org, linux-ext4@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-mtd@lists.infradead.org, kernel-team@android.com
Subject: Re: [PATCH 3/5] libfs: Add generic function for setting dentry_ops
Date: Wed, 23 Sep 2020 16:44:28 -0400 [thread overview]
Message-ID: <87ft785ikz.fsf@collabora.com> (raw)
In-Reply-To: <20200923010151.69506-4-drosen@google.com> (Daniel Rosenberg's message of "Wed, 23 Sep 2020 01:01:49 +0000")
Daniel Rosenberg <drosen@google.com> writes:
> This adds a function to set dentry operations at lookup time that will
> work for both encrypted files and casefolded filenames.
>
> A filesystem that supports both features simultaneously can use this
> function during lookup preperations to set up its dentry operations once
> fscrypt no longer does that itself.
>
> Currently the casefolding dentry operation are always set because the
> feature is toggleable on empty directories. Since we don't know what
> set of functions we'll eventually need, and cannot change them later,
> we add just add them.
>
> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> ---
> fs/libfs.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/fs.h | 1 +
> 2 files changed, 50 insertions(+)
>
> diff --git a/fs/libfs.c b/fs/libfs.c
> index fc34361c1489..83303858f1fe 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -1449,4 +1449,53 @@ int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> return 0;
> }
> EXPORT_SYMBOL(generic_ci_d_hash);
> +
> +static const struct dentry_operations generic_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> +};
> +#endif
> +
> +#ifdef CONFIG_FS_ENCRYPTION
> +static const struct dentry_operations generic_encrypted_dentry_ops = {
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +#if IS_ENABLED(CONFIG_UNICODE) && IS_ENABLED(CONFIG_FS_ENCRYPTION)
> +static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +/**
> + * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
> + * @dentry: dentry to set ops on
> + *
> + * This function sets the dentry ops for the given dentry to handle both
> + * casefolding and encryption of the dentry name.
> + */
> +void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
> +{
> +#ifdef CONFIG_FS_ENCRYPTION
> + if (dentry->d_flags & DCACHE_ENCRYPTED_NAME) {
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
> + return;
> + }
> #endif
> + d_set_d_op(dentry, &generic_encrypted_dentry_ops);
> + return;
> + }
> +#endif
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_ci_dentry_ops);
> + return;
> + }
> +#endif
> +}
I think this is harder to read than necessary. What do you think about
just splitting the three cases like the following:
void generic_set_encrypted_ci_d_ops(struct dentry *dentry) {
#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
if (encoding && encryption) {
d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
return;
}
#endif
#if defined (CONFIG_FS_ENCRYPTION)
if (encryption) {
d_set_d_op(dentry, &generic_encrypted_dentry_ops);
return;
}
#endif
#if defined (CONFIG_UNICODE)
if (encoding) {
d_set_d_op(dentry, &generic_ci_dentry_ops);
return;
}
#endif
}
> +EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index bc5417c61e12..6627896db835 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -3277,6 +3277,7 @@ extern int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str);
> extern int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
> const char *str, const struct qstr *name);
> #endif
> +extern void generic_set_encrypted_ci_d_ops(struct dentry *dentry);
>
> #ifdef CONFIG_MIGRATION
> extern int buffer_migrate_page(struct address_space *,
--
Gabriel Krisman Bertazi
WARNING: multiple messages have this Message-ID (diff)
From: Gabriel Krisman Bertazi <krisman@collabora.com>
To: Daniel Rosenberg <drosen@google.com>
Cc: "Theodore Y . Ts'o" <tytso@mit.edu>,
Richard Weinberger <richard@nod.at>,
linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
Eric Biggers <ebiggers@kernel.org>,
linux-fscrypt@vger.kernel.org,
Andreas Dilger <adilger.kernel@dilger.ca>,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org,
Jaegeuk Kim <jaegeuk@kernel.org>,
linux-ext4@vger.kernel.org, kernel-team@android.com
Subject: Re: [f2fs-dev] [PATCH 3/5] libfs: Add generic function for setting dentry_ops
Date: Wed, 23 Sep 2020 16:44:28 -0400 [thread overview]
Message-ID: <87ft785ikz.fsf@collabora.com> (raw)
In-Reply-To: <20200923010151.69506-4-drosen@google.com> (Daniel Rosenberg's message of "Wed, 23 Sep 2020 01:01:49 +0000")
Daniel Rosenberg <drosen@google.com> writes:
> This adds a function to set dentry operations at lookup time that will
> work for both encrypted files and casefolded filenames.
>
> A filesystem that supports both features simultaneously can use this
> function during lookup preperations to set up its dentry operations once
> fscrypt no longer does that itself.
>
> Currently the casefolding dentry operation are always set because the
> feature is toggleable on empty directories. Since we don't know what
> set of functions we'll eventually need, and cannot change them later,
> we add just add them.
>
> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> ---
> fs/libfs.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/fs.h | 1 +
> 2 files changed, 50 insertions(+)
>
> diff --git a/fs/libfs.c b/fs/libfs.c
> index fc34361c1489..83303858f1fe 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -1449,4 +1449,53 @@ int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> return 0;
> }
> EXPORT_SYMBOL(generic_ci_d_hash);
> +
> +static const struct dentry_operations generic_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> +};
> +#endif
> +
> +#ifdef CONFIG_FS_ENCRYPTION
> +static const struct dentry_operations generic_encrypted_dentry_ops = {
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +#if IS_ENABLED(CONFIG_UNICODE) && IS_ENABLED(CONFIG_FS_ENCRYPTION)
> +static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +/**
> + * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
> + * @dentry: dentry to set ops on
> + *
> + * This function sets the dentry ops for the given dentry to handle both
> + * casefolding and encryption of the dentry name.
> + */
> +void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
> +{
> +#ifdef CONFIG_FS_ENCRYPTION
> + if (dentry->d_flags & DCACHE_ENCRYPTED_NAME) {
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
> + return;
> + }
> #endif
> + d_set_d_op(dentry, &generic_encrypted_dentry_ops);
> + return;
> + }
> +#endif
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_ci_dentry_ops);
> + return;
> + }
> +#endif
> +}
I think this is harder to read than necessary. What do you think about
just splitting the three cases like the following:
void generic_set_encrypted_ci_d_ops(struct dentry *dentry) {
#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
if (encoding && encryption) {
d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
return;
}
#endif
#if defined (CONFIG_FS_ENCRYPTION)
if (encryption) {
d_set_d_op(dentry, &generic_encrypted_dentry_ops);
return;
}
#endif
#if defined (CONFIG_UNICODE)
if (encoding) {
d_set_d_op(dentry, &generic_ci_dentry_ops);
return;
}
#endif
}
> +EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index bc5417c61e12..6627896db835 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -3277,6 +3277,7 @@ extern int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str);
> extern int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
> const char *str, const struct qstr *name);
> #endif
> +extern void generic_set_encrypted_ci_d_ops(struct dentry *dentry);
>
> #ifdef CONFIG_MIGRATION
> extern int buffer_migrate_page(struct address_space *,
--
Gabriel Krisman Bertazi
_______________________________________________
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: Gabriel Krisman Bertazi <krisman@collabora.com>
To: Daniel Rosenberg <drosen@google.com>
Cc: "Theodore Y . Ts'o" <tytso@mit.edu>,
Richard Weinberger <richard@nod.at>, Chao Yu <chao@kernel.org>,
linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net,
Eric Biggers <ebiggers@kernel.org>,
linux-fscrypt@vger.kernel.org,
Andreas Dilger <adilger.kernel@dilger.ca>,
Alexander Viro <viro@zeniv.linux.org.uk>,
linux-mtd@lists.infradead.org, linux-fsdevel@vger.kernel.org,
Jaegeuk Kim <jaegeuk@kernel.org>,
linux-ext4@vger.kernel.org, kernel-team@android.com
Subject: Re: [PATCH 3/5] libfs: Add generic function for setting dentry_ops
Date: Wed, 23 Sep 2020 16:44:28 -0400 [thread overview]
Message-ID: <87ft785ikz.fsf@collabora.com> (raw)
In-Reply-To: <20200923010151.69506-4-drosen@google.com> (Daniel Rosenberg's message of "Wed, 23 Sep 2020 01:01:49 +0000")
Daniel Rosenberg <drosen@google.com> writes:
> This adds a function to set dentry operations at lookup time that will
> work for both encrypted files and casefolded filenames.
>
> A filesystem that supports both features simultaneously can use this
> function during lookup preperations to set up its dentry operations once
> fscrypt no longer does that itself.
>
> Currently the casefolding dentry operation are always set because the
> feature is toggleable on empty directories. Since we don't know what
> set of functions we'll eventually need, and cannot change them later,
> we add just add them.
>
> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> ---
> fs/libfs.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
> include/linux/fs.h | 1 +
> 2 files changed, 50 insertions(+)
>
> diff --git a/fs/libfs.c b/fs/libfs.c
> index fc34361c1489..83303858f1fe 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -1449,4 +1449,53 @@ int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
> return 0;
> }
> EXPORT_SYMBOL(generic_ci_d_hash);
> +
> +static const struct dentry_operations generic_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> +};
> +#endif
> +
> +#ifdef CONFIG_FS_ENCRYPTION
> +static const struct dentry_operations generic_encrypted_dentry_ops = {
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +#if IS_ENABLED(CONFIG_UNICODE) && IS_ENABLED(CONFIG_FS_ENCRYPTION)
> +static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
> + .d_hash = generic_ci_d_hash,
> + .d_compare = generic_ci_d_compare,
> + .d_revalidate = fscrypt_d_revalidate,
> +};
> +#endif
> +
> +/**
> + * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
> + * @dentry: dentry to set ops on
> + *
> + * This function sets the dentry ops for the given dentry to handle both
> + * casefolding and encryption of the dentry name.
> + */
> +void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
> +{
> +#ifdef CONFIG_FS_ENCRYPTION
> + if (dentry->d_flags & DCACHE_ENCRYPTED_NAME) {
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
> + return;
> + }
> #endif
> + d_set_d_op(dentry, &generic_encrypted_dentry_ops);
> + return;
> + }
> +#endif
> +#ifdef CONFIG_UNICODE
> + if (dentry->d_sb->s_encoding) {
> + d_set_d_op(dentry, &generic_ci_dentry_ops);
> + return;
> + }
> +#endif
> +}
I think this is harder to read than necessary. What do you think about
just splitting the three cases like the following:
void generic_set_encrypted_ci_d_ops(struct dentry *dentry) {
#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
if (encoding && encryption) {
d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
return;
}
#endif
#if defined (CONFIG_FS_ENCRYPTION)
if (encryption) {
d_set_d_op(dentry, &generic_encrypted_dentry_ops);
return;
}
#endif
#if defined (CONFIG_UNICODE)
if (encoding) {
d_set_d_op(dentry, &generic_ci_dentry_ops);
return;
}
#endif
}
> +EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index bc5417c61e12..6627896db835 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -3277,6 +3277,7 @@ extern int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str);
> extern int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
> const char *str, const struct qstr *name);
> #endif
> +extern void generic_set_encrypted_ci_d_ops(struct dentry *dentry);
>
> #ifdef CONFIG_MIGRATION
> extern int buffer_migrate_page(struct address_space *,
--
Gabriel Krisman Bertazi
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-09-23 20:44 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-23 1:01 [PATCH 0/5] Add support for Encryption and Casefolding in F2FS Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 1:01 ` [PATCH 1/5] ext4: Use generic casefolding support Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 5:47 ` Eric Biggers
2020-09-23 5:47 ` Eric Biggers
2020-09-23 5:47 ` [f2fs-dev] " Eric Biggers
2020-09-23 20:30 ` Gabriel Krisman Bertazi
2020-09-23 20:30 ` Gabriel Krisman Bertazi
2020-09-23 20:30 ` [f2fs-dev] " Gabriel Krisman Bertazi
2020-09-23 1:01 ` [PATCH 2/5] fscrypt: Export fscrypt_d_revalidate Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 5:59 ` Eric Biggers
2020-09-23 5:59 ` Eric Biggers
2020-09-23 5:59 ` [f2fs-dev] " Eric Biggers
2020-09-23 1:01 ` [PATCH 3/5] libfs: Add generic function for setting dentry_ops Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 6:07 ` Eric Biggers
2020-09-23 6:07 ` Eric Biggers
2020-09-23 6:07 ` [f2fs-dev] " Eric Biggers
2020-09-23 20:44 ` Gabriel Krisman Bertazi [this message]
2020-09-23 20:44 ` Gabriel Krisman Bertazi
2020-09-23 20:44 ` [f2fs-dev] " Gabriel Krisman Bertazi
2020-09-23 1:01 ` [PATCH 4/5] fscrypt: Have filesystems handle their d_ops Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 6:09 ` Eric Biggers
2020-09-23 6:09 ` Eric Biggers
2020-09-23 6:09 ` [f2fs-dev] " Eric Biggers
2020-09-23 1:01 ` [PATCH 5/5] f2fs: Handle casefolding with Encryption Daniel Rosenberg
2020-09-23 1:01 ` Daniel Rosenberg
2020-09-23 1:01 ` [f2fs-dev] " Daniel Rosenberg via Linux-f2fs-devel
2020-09-23 6:24 ` Eric Biggers
2020-09-23 6:24 ` Eric Biggers
2020-09-23 6:24 ` [f2fs-dev] " Eric Biggers
2020-11-09 22:50 ` [PATCH 0/5] Add support for Encryption and Casefolding in F2FS Eric Biggers
2020-11-09 22:50 ` Eric Biggers
2020-11-09 22:50 ` [f2fs-dev] " Eric Biggers
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=87ft785ikz.fsf@collabora.com \
--to=krisman@collabora.com \
--cc=adilger.kernel@dilger.ca \
--cc=chao@kernel.org \
--cc=drosen@google.com \
--cc=ebiggers@kernel.org \
--cc=jaegeuk@kernel.org \
--cc=kernel-team@android.com \
--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.