Commit 94840e3c authored by Eric Biggers's avatar Eric Biggers Committed by Theodore Ts'o

fscrypt: eliminate ->prepare_context() operation

The only use of the ->prepare_context() fscrypt operation was to allow
ext4 to evict inline data from the inode before ->set_context().
However, there is no reason why this cannot be done as simply the first
step in ->set_context(), and in fact it makes more sense to do it that
way because then the policy modes and flags get validated before any
real work is done.  Therefore, merge ext4_prepare_context() into
ext4_set_context(), and remove ->prepare_context().
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 1b53cf98
...@@ -33,17 +33,10 @@ static int create_encryption_context_from_policy(struct inode *inode, ...@@ -33,17 +33,10 @@ static int create_encryption_context_from_policy(struct inode *inode,
const struct fscrypt_policy *policy) const struct fscrypt_policy *policy)
{ {
struct fscrypt_context ctx; struct fscrypt_context ctx;
int res;
if (!inode->i_sb->s_cop->set_context) if (!inode->i_sb->s_cop->set_context)
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (inode->i_sb->s_cop->prepare_context) {
res = inode->i_sb->s_cop->prepare_context(inode);
if (res)
return res;
}
ctx.format = FS_ENCRYPTION_CONTEXT_FORMAT_V1; ctx.format = FS_ENCRYPTION_CONTEXT_FORMAT_V1;
memcpy(ctx.master_key_descriptor, policy->master_key_descriptor, memcpy(ctx.master_key_descriptor, policy->master_key_descriptor,
FS_KEY_DESCRIPTOR_SIZE); FS_KEY_DESCRIPTOR_SIZE);
......
...@@ -1120,17 +1120,16 @@ static int ext4_get_context(struct inode *inode, void *ctx, size_t len) ...@@ -1120,17 +1120,16 @@ static int ext4_get_context(struct inode *inode, void *ctx, size_t len)
EXT4_XATTR_NAME_ENCRYPTION_CONTEXT, ctx, len); EXT4_XATTR_NAME_ENCRYPTION_CONTEXT, ctx, len);
} }
static int ext4_prepare_context(struct inode *inode)
{
return ext4_convert_inline_data(inode);
}
static int ext4_set_context(struct inode *inode, const void *ctx, size_t len, static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
void *fs_data) void *fs_data)
{ {
handle_t *handle = fs_data; handle_t *handle = fs_data;
int res, res2, retries = 0; int res, res2, retries = 0;
res = ext4_convert_inline_data(inode);
if (res)
return res;
/* /*
* If a journal handle was specified, then the encryption context is * If a journal handle was specified, then the encryption context is
* being set on a new inode via inheritance and is part of a larger * being set on a new inode via inheritance and is part of a larger
...@@ -1196,7 +1195,6 @@ static unsigned ext4_max_namelen(struct inode *inode) ...@@ -1196,7 +1195,6 @@ static unsigned ext4_max_namelen(struct inode *inode)
static const struct fscrypt_operations ext4_cryptops = { static const struct fscrypt_operations ext4_cryptops = {
.key_prefix = "ext4:", .key_prefix = "ext4:",
.get_context = ext4_get_context, .get_context = ext4_get_context,
.prepare_context = ext4_prepare_context,
.set_context = ext4_set_context, .set_context = ext4_set_context,
.dummy_context = ext4_dummy_context, .dummy_context = ext4_dummy_context,
.is_encrypted = ext4_encrypted_inode, .is_encrypted = ext4_encrypted_inode,
......
...@@ -87,7 +87,6 @@ struct fscrypt_operations { ...@@ -87,7 +87,6 @@ struct fscrypt_operations {
unsigned int flags; unsigned int flags;
const char *key_prefix; const char *key_prefix;
int (*get_context)(struct inode *, void *, size_t); int (*get_context)(struct inode *, void *, size_t);
int (*prepare_context)(struct inode *);
int (*set_context)(struct inode *, const void *, size_t, void *); int (*set_context)(struct inode *, const void *, size_t, void *);
int (*dummy_context)(struct inode *); int (*dummy_context)(struct inode *);
bool (*is_encrypted)(struct inode *); bool (*is_encrypted)(struct inode *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment