fscrypt: export fscrypt_d_revalidate()
Dentries that represent no-key names must have a dentry_operations that includes fscrypt_d_revalidate(). Currently, this is handled by fscrypt_prepare_lookup() installing fscrypt_d_ops. However, ceph support for encryption (https://lore.kernel.org/r/20200914191707.380444-1-jlayton@kernel.org) can't use fscrypt_d_ops, since ceph already has its own dentry_operations. Similarly, ext4 and f2fs support for directories that are both encrypted and casefolded (https://lore.kernel.org/r/20200923010151.69506-1-drosen@google.com) can't use fscrypt_d_ops either, since casefolding requires some dentry operations too. To satisfy both users, we need to move the responsibility of installing the dentry_operations to filesystems. In preparation for this, export fscrypt_d_revalidate() and give it a !CONFIG_FS_ENCRYPTION stub. Reviewed-by: Jeff Layton <jlayton@kernel.org> Link: https://lore.kernel.org/r/20200924054721.187797-1-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
501e43fbea
commit
5b2a828b98
|
@ -530,7 +530,7 @@ EXPORT_SYMBOL_GPL(fscrypt_fname_siphash);
|
||||||
* Validate dentries in encrypted directories to make sure we aren't potentially
|
* Validate dentries in encrypted directories to make sure we aren't potentially
|
||||||
* caching stale dentries after a key has been added.
|
* caching stale dentries after a key has been added.
|
||||||
*/
|
*/
|
||||||
static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
|
int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||||
{
|
{
|
||||||
struct dentry *dir;
|
struct dentry *dir;
|
||||||
int err;
|
int err;
|
||||||
|
@ -569,6 +569,7 @@ static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||||
|
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(fscrypt_d_revalidate);
|
||||||
|
|
||||||
const struct dentry_operations fscrypt_d_ops = {
|
const struct dentry_operations fscrypt_d_ops = {
|
||||||
.d_revalidate = fscrypt_d_revalidate,
|
.d_revalidate = fscrypt_d_revalidate,
|
||||||
|
|
|
@ -197,6 +197,7 @@ int fscrypt_fname_disk_to_usr(const struct inode *inode,
|
||||||
bool fscrypt_match_name(const struct fscrypt_name *fname,
|
bool fscrypt_match_name(const struct fscrypt_name *fname,
|
||||||
const u8 *de_name, u32 de_name_len);
|
const u8 *de_name, u32 de_name_len);
|
||||||
u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name);
|
u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name);
|
||||||
|
int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags);
|
||||||
|
|
||||||
/* bio.c */
|
/* bio.c */
|
||||||
void fscrypt_decrypt_bio(struct bio *bio);
|
void fscrypt_decrypt_bio(struct bio *bio);
|
||||||
|
@ -454,6 +455,12 @@ static inline u64 fscrypt_fname_siphash(const struct inode *dir,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int fscrypt_d_revalidate(struct dentry *dentry,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* bio.c */
|
/* bio.c */
|
||||||
static inline void fscrypt_decrypt_bio(struct bio *bio)
|
static inline void fscrypt_decrypt_bio(struct bio *bio)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue