Commit 70098d93 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Eric Biggers
Browse files

fs,fsverity: clear out fsverity_info from common code



Free the fsverity_info directly in clear_inode instead of requiring file
systems to handle it.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Acked-by: David Sterba <dsterba@suse.com> # btrfs
Link: https://lore.kernel.org/r/20260128152630.627409-3-hch@lst.de


Signed-off-by: default avatarEric Biggers <ebiggers@kernel.org>
parent e9734653
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
#include <linux/sched/mm.h>
#include <linux/iomap.h>
#include <linux/unaligned.h>
#include <linux/fsverity.h>
#include "misc.h"
#include "ctree.h"
#include "disk-io.h"
@@ -5571,11 +5570,8 @@ void btrfs_evict_inode(struct inode *inode)

	trace_btrfs_inode_evict(inode);

	if (!root) {
		fsverity_cleanup_inode(inode);
		clear_inode(inode);
		return;
	}
	if (!root)
		goto clear_inode;

	fs_info = inode_to_fs_info(inode);
	evict_inode_truncate_pages(inode);
@@ -5675,7 +5671,7 @@ void btrfs_evict_inode(struct inode *inode)
	 * to retry these periodically in the future.
	 */
	btrfs_remove_delayed_node(BTRFS_I(inode));
	fsverity_cleanup_inode(inode);
clear_inode:
	clear_inode(inode);
}

+0 −1
Original line number Diff line number Diff line
@@ -1527,7 +1527,6 @@ void ext4_clear_inode(struct inode *inode)
		EXT4_I(inode)->jinode = NULL;
	}
	fscrypt_put_encryption_info(inode);
	fsverity_cleanup_inode(inode);
}

static struct inode *ext4_nfs_get_inode(struct super_block *sb,
+0 −1
Original line number Diff line number Diff line
@@ -1000,7 +1000,6 @@ void f2fs_evict_inode(struct inode *inode)
	}
out_clear:
	fscrypt_put_encryption_info(inode);
	fsverity_cleanup_inode(inode);
	clear_inode(inode);
}

+9 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/cdev.h>
#include <linux/memblock.h>
#include <linux/fsnotify.h>
#include <linux/fsverity.h>
#include <linux/mount.h>
#include <linux/posix_acl.h>
#include <linux/buffer_head.h> /* for inode_has_buffers */
@@ -773,6 +774,14 @@ void dump_mapping(const struct address_space *mapping)

void clear_inode(struct inode *inode)
{
	/*
	 * Only IS_VERITY() inodes can have verity info, so start by checking
	 * for IS_VERITY() (which is faster than retrieving the pointer to the
	 * verity info).  This minimizes overhead for non-verity inodes.
	 */
	if (IS_ENABLED(CONFIG_FS_VERITY) && IS_VERITY(inode))
		fsverity_cleanup_inode(inode);

	/*
	 * We have to cycle the i_pages lock here because reclaim can be in the
	 * process of removing the last page (in __filemap_remove_folio())
+1 −2
Original line number Diff line number Diff line
@@ -384,14 +384,13 @@ int __fsverity_file_open(struct inode *inode, struct file *filp)
}
EXPORT_SYMBOL_GPL(__fsverity_file_open);

void __fsverity_cleanup_inode(struct inode *inode)
void fsverity_cleanup_inode(struct inode *inode)
{
	struct fsverity_info **vi_addr = fsverity_info_addr(inode);

	fsverity_free_info(*vi_addr);
	*vi_addr = NULL;
}
EXPORT_SYMBOL_GPL(__fsverity_cleanup_inode);

void __init fsverity_init_info_cache(void)
{
Loading