Whamcloud - gitweb
LU-15406 sec: fix in-kernel fscrypt support
authorSebastien Buisson <sbuisson@ddn.com>
Thu, 6 Jan 2022 09:18:20 +0000 (10:18 +0100)
committerAndreas Dilger <adilger@whamcloud.com>
Mon, 21 Mar 2022 18:48:26 +0000 (18:48 +0000)
When using in-kernel fscrypt provided by Linux 5.4, the encryption
context can be retrieved by calling the .get_context function defined
in the struct fscrypt_operations of the super_block.
llite needs to retrieve the encryption context explicitly in case of
migration via volatile files.

Lustre-change: https://review.whamcloud.com/45987
Lustre-commit: 2169aed82a32df47be9aef2f249178ede6c7fadd

Fixes: 09c558d16f ("LU-14677 sec: migrate/extend/split on encrypted file")
Fixes: fdbf2ffd41 ("LU-14677 sec: no encryption key migrate/extend/resync/split")
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Change-Id: I76dbd21f0dc95920519ea375c583bc378d7c9f53
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/46172
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/include/lustre_crypto.h
lustre/llite/namei.c

index c100028..b6c1c8a 100644 (file)
@@ -120,6 +120,8 @@ static inline int critical_decode(const u8 *src, int len, char *dst)
 #define llcrypt_symlink_data   fscrypt_symlink_data
 #define llcrypt_dummy_context_enabled(inode) \
        fscrypt_dummy_context_enabled(inode)
+#define llcrypt_require_key(inode)     \
+       fscrypt_require_key(inode)
 #define llcrypt_has_encryption_key(inode) fscrypt_has_encryption_key(inode)
 #define llcrypt_encrypt_pagecache_blocks(page, len, offs, gfp_flags)   \
        fscrypt_encrypt_pagecache_blocks(page, len, offs, gfp_flags)
index 3e77184..aff3086 100644 (file)
@@ -934,6 +934,9 @@ getctx:
 #ifdef CONFIG_LL_ENCRYPTION
                        rc = lsi->lsi_cop->get_context(ref_inode,
                                                       ctx, ctx_size);
+#elif defined(HAVE_LUSTRE_CRYPTO)
+                       rc = ref_inode->i_sb->s_cop->get_context(ref_inode,
+                                                                ctx, ctx_size);
 #else
                        rc = -ENODATA;
 #endif