diff options
author | Eric Biggers <ebiggers@google.com> | 2022-12-14 14:43:02 -0800 |
---|---|---|
committer | Eric Biggers <ebiggers@google.com> | 2023-01-01 15:46:48 -0800 |
commit | 01d90c07a592b532c7a673dfd8baa6d6e496273d (patch) | |
tree | cc7c24c3f7b9ea47812358d6acabd5e60e6115d2 /fs/verity | |
parent | a6528a960b78715d4c3d2c9cda85714b15a0faa4 (diff) | |
download | lwn-01d90c07a592b532c7a673dfd8baa6d6e496273d.tar.gz lwn-01d90c07a592b532c7a673dfd8baa6d6e496273d.zip |
fsverity: optimize fsverity_prepare_setattr() on non-verity files
Make fsverity_prepare_setattr() an inline function that does the
IS_VERITY() check, then (if needed) calls __fsverity_prepare_setattr()
to do the real work. This reduces the overhead on non-verity files.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Acked-by: Dave Chinner <dchinner@redhat.com>
Link: https://lore.kernel.org/r/20221214224304.145712-3-ebiggers@kernel.org
Diffstat (limited to 'fs/verity')
-rw-r--r-- | fs/verity/open.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/fs/verity/open.c b/fs/verity/open.c index 673d6db9abdf..e1e531d5e09a 100644 --- a/fs/verity/open.c +++ b/fs/verity/open.c @@ -337,26 +337,16 @@ int __fsverity_file_open(struct inode *inode, struct file *filp) } EXPORT_SYMBOL_GPL(__fsverity_file_open); -/** - * fsverity_prepare_setattr() - prepare to change a verity inode's attributes - * @dentry: dentry through which the inode is being changed - * @attr: attributes to change - * - * Verity files are immutable, so deny truncates. This isn't covered by the - * open-time check because sys_truncate() takes a path, not a file descriptor. - * - * Return: 0 on success, -errno on failure - */ -int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr) +int __fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr) { - if (IS_VERITY(d_inode(dentry)) && (attr->ia_valid & ATTR_SIZE)) { + if (attr->ia_valid & ATTR_SIZE) { pr_debug("Denying truncate of verity file (ino %lu)\n", d_inode(dentry)->i_ino); return -EPERM; } return 0; } -EXPORT_SYMBOL_GPL(fsverity_prepare_setattr); +EXPORT_SYMBOL_GPL(__fsverity_prepare_setattr); /** * fsverity_cleanup_inode() - free the inode's verity info, if present |