Eric Biggers
ec70cfcb17
fs-verity: implement readahead for FS_IOC_ENABLE_VERITY
...
When it builds the first level of the Merkle tree, FS_IOC_ENABLE_VERITY
sequentially reads each page of the file using read_mapping_page().
This works fine if the file's data is already in pagecache, which should
normally be the case, since this ioctl is normally used immediately
after writing out the file.
But in any other case this implementation performs very poorly, since
only one page is read at a time.
Fix this by implementing readahead using the functions from
mm/readahead.c.
This improves performance in the uncached case by about 20x, as seen in
the following benchmarks done on a 250MB file (on x86_64 with SHA-NI):
FS_IOC_ENABLE_VERITY uncached (before) 3.299s
FS_IOC_ENABLE_VERITY uncached (after) 0.160s
FS_IOC_ENABLE_VERITY cached 0.147s
sha256sum uncached 0.191s
sha256sum cached 0.145s
Note: we could instead switch to kernel_read(). But that would mean
we'd no longer be hashing the data directly from the pagecache, which is
a nice optimization of its own. And using kernel_read() would require
allocating another temporary buffer, hashing the data and tree pages
separately, and explicitly zero-padding the last page -- so it wouldn't
really be any simpler than direct pagecache access, at least for now.
Link: https://lore.kernel.org/r/20200106205410.136707-1-ebiggers@kernel.org
Reviewed-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Sorayukii <sorayukii69@gmail.com>
2026-05-15 18:07:19 +07:00
..
9p
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
adfs
fs/adfs: super: fix use-after-free bug
2019-08-06 18:29:35 +02:00
affs
affs: fix basic permission bits to actually work
2020-09-12 11:47:39 +02:00
afs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
autofs4
BACKPORT: pids: Move the pgrp and session pid pointers from task_struct to signal_struct
2026-05-15 17:59:02 +07:00
befs
bfs
btrfs
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
cachefiles
cachefiles: Handle readpage error correctly
2020-11-10 10:24:00 +01:00
ceph
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
cifs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
coda
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
configfs
configfs: fix a race in configfs_{,un}register_subsystem()
2022-03-02 11:32:03 +01:00
cramfs
crypto
Merge branch 'linux-4.9.y' of https://kernel.googlesource.com/pub/scm/linux/kernel/git/jaegeuk/f2fs-stable into lineage-20
2022-11-16 15:35:23 +01:00
debugfs
UPSTREAM: fs: constify tree_descr arrays passed to simple_fill_super()
2026-05-15 17:55:17 +07:00
devpts
dlm
BACKPORT: net: Work around lockdep limitation in sockets that use sockets
2026-05-15 17:56:15 +07:00
ecryptfs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
efivarfs
efivarfs: revert "fix memory leak in efivarfs_create()"
2020-12-02 08:31:28 +01:00
efs
exfat
exfat: Lower kernel version check for exfat_getattr from 4.11 to 4.9
2025-07-10 14:15:46 -04:00
exofs
exportfs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
ext2
ext2: correct max file size computing
2022-04-20 09:06:35 +02:00
ext4
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
f2fs
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
fat
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
freevxfs
fscache
fuse
FROMLIST: fuse: 32-bit user space ioctl compat for fuse device
2026-05-15 18:06:55 +07:00
gfs2
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
hfs
hfs: fix OOB Read in __hfs_brec_find
2023-01-07 12:07:31 +01:00
hfsplus
hfsplus: fix bug causing custom uid and gid being unable to be assigned with mount
2023-01-07 12:07:35 +01:00
hostfs
hpfs
hugetlbfs
hugetlbfs: hugetlb_fault_mutex_hash() cleanup
2021-06-03 08:23:33 +02:00
incfs
incremental-fs: inline newer kernel_read / write
2026-05-15 18:07:17 +07:00
isofs
isofs: Fix out of bound access for corrupted isofs image
2021-11-12 13:18:02 +01:00
jbd2
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
jffs2
jffs2: fix memory leak in jffs2_do_fill_super
2022-06-14 16:52:38 +02:00
jfs
fs: jfs: fix shift-out-of-bounds in dbDiscardAG
2023-01-07 12:07:30 +01:00
kernfs
BACKPORT: kernfs: convert kernfs_node->id from union kernfs_node_id to u64
2026-05-15 18:02:33 +07:00
lockd
This is the 4.9.249 stable release
2020-12-29 14:16:49 +01:00
logfs
minix
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
ncpfs
nfs
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
nfs_common
nfs_common: need lock during iterate through the list
2020-12-29 13:44:59 +01:00
nfsd
UPSTREAM: fs: constify tree_descr arrays passed to simple_fill_super()
2026-05-15 17:55:17 +07:00
nilfs2
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20
2023-01-19 15:42:12 +01:00
nls
notify
UPSTREAM: audit: Record fanotify access control decisions
2026-05-15 17:59:18 +07:00
ntfs
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
ocfs2
BACKPORT: net: Work around lockdep limitation in sockets that use sockets
2026-05-15 17:56:15 +07:00
omfs
openpromfs
orangefs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
overlayfs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
proc
UPSTREAM: mm,fork: introduce MADV_WIPEONFORK
2026-05-15 18:04:15 +07:00
pstore
This is the 4.9.337 stable release
2023-01-07 13:07:00 +01:00
qnx4
qnx4: work around gcc false positive warning bug
2021-10-06 10:23:41 +02:00
qnx6
quota
quota: Check next/prev free block number after reading from quota file
2022-10-26 13:15:37 +02:00
ramfs
reiserfs
reiserfs: Add missing calls to reiserfs_security_free()
2023-01-07 12:07:34 +01:00
romfs
romfs: fix uninitialized memory leak in romfs_dev_read()
2020-08-26 10:29:03 +02:00
sdcardfs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
squashfs
squashfs: fix divide error in calculate_skip()
2021-05-22 10:40:32 +02:00
sysfs
BACKPORT: kernfs: allow creating kernfs objects with arbitrary uid/gid
2026-05-15 17:59:10 +07:00
sysv
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
tracefs
UPSTREAM: fs: constify tree_descr arrays passed to simple_fill_super()
2026-05-15 17:55:17 +07:00
ubifs
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
udf
udf: Avoid double brelse() in udf_rename()
2023-01-07 12:07:30 +01:00
ufs
fs/ufs: avoid potential u32 multiplication overflow
2020-08-21 11:02:11 +02:00
verity
fs-verity: implement readahead for FS_IOC_ENABLE_VERITY
2026-05-15 18:07:19 +07:00
xfs
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
aio.c
anon_inodes.c
attr.c
This is the 4.9.326 stable release
2022-08-25 12:09:51 +02:00
bad_inode.c
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
binfmt_aout.c
binfmt_elf.c
fs/binfmt_elf.c: allocate initialized memory in fill_thread_core_info()
2020-06-03 08:16:42 +02:00
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
fs/binfmt_flat.c: make load_flat_shared_library() work
2019-07-10 09:55:38 +02:00
binfmt_misc.c
UPSTREAM: fs: constify tree_descr arrays passed to simple_fill_super()
2026-05-15 17:55:17 +07:00
binfmt_script.c
exec: load_script: Do not exec truncated interpreter path
2019-11-06 12:18:04 +01:00
block_dev.c
Merge branch 'linux-4.9.y' of https://kernel.googlesource.com/pub/scm/linux/kernel/git/jaegeuk/f2fs-stable into lineage-20
2022-11-16 15:35:23 +01:00
buffer.c
Merge remote-tracking branch 'common/android-4.9-q' into android13-4.9-sdm845
2022-12-20 19:52:09 +02:00
char_dev.c
chardev: fix error handling in cdev_device_add()
2023-01-07 12:07:26 +01:00
compat.c
compat_binfmt_elf.c
compat_ioctl.c
UPSTREAM: lsm: new security_file_ioctl_compat() hook
2026-05-15 17:59:05 +07:00
coredump.c
dax.c
dcache.c
Merge android-4.9.187 ( fabc071) into msm-4.9
2019-10-11 14:38:02 +08:00
dcookies.c
direct-io.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-04-26 01:27:02 +03:00
drop_caches.c
eventfd.c
eventpoll.c
UPSTREAM: epoll: add syscall epoll_pwait2
2026-05-15 18:04:17 +07:00
exec.c
BACKPORT: pid: Implement PIDTYPE_TGID
2026-05-15 17:59:02 +07:00
fcntl.c
fhandle.c
file.c
fs: Rename __close_fd_get_file close_fd_get_file
2026-05-15 18:04:20 +07:00
file_table.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
filesystems.c
fs-writeback.c
UPSTREAM: cgroup, blkcg: Prepare some symbols for module and !CONFIG_CGROUP usages
2026-05-15 18:02:33 +07:00
fs_pin.c
fs_struct.c
inode.c
BACKPORT: new inode method: ->free_inode()
2026-05-15 17:57:41 +07:00
internal.h
ioctl.c
iomap.c
Kconfig
fs-verity: add Kconfig and the helper functions for hashing
2026-05-15 18:07:18 +07:00
Kconfig.binfmt
libfs.c
UPSTREAM: fs: constify tree_descr arrays passed to simple_fill_super()
2026-05-15 17:55:17 +07:00
locks.c
locks: print unsigned ino in /proc/locks
2020-01-12 11:24:13 +01:00
Makefile
fs-verity: add Kconfig and the helper functions for hashing
2026-05-15 18:07:18 +07:00
mbcache.c
mount.h
mpage.c
f2fs: fix build error on android tracepoints
2019-08-16 11:38:27 +00:00
namei.c
new primitive: vfs_mkobj()
2026-05-15 17:55:40 +07:00
namespace.c
VFS: use synchronize_rcu_expedited() in namespace_unlock()
2026-05-15 17:48:25 +07:00
no-block.c
nsfs.c
UPSTREAM: nsfs: unobfuscate
2026-05-15 17:57:09 +07:00
open.c
BACKPORT: close_range: add CLOSE_RANGE_UNSHARE
2026-05-15 18:04:16 +07:00
pipe.c
pipe: increase minimum default pipe size to 2 pages
2021-08-15 13:01:03 +02:00
pnode.c
This is the 4.9.337 stable release
2023-01-07 13:07:00 +01:00
pnode.h
posix_acl.c
proc_namespace.c
read_write.c
This is the 4.9.181 stable release
2019-06-11 14:39:40 +02:00
readdir.c
filldir[64]: remove WARN_ON_ONCE() for bad directory entries
2020-01-04 13:41:06 +01:00
select.c
select: use freezable blocking call
2021-05-26 18:59:42 +03:00
seq_file.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
signalfd.c
signalfd: use wake_up_pollfree()
2021-12-14 10:04:48 +01:00
splice.c
fs: prevent page refcount overflow in pipe_buf_get
2019-06-11 12:22:45 +02:00
stack.c
stat.c
statx: Add a system call to make enhanced file info available
2025-07-10 14:15:39 -04:00
statfs.c
super.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-03-31 22:52:51 +03:00
sync.c
timerfd.c
userfaultfd.c
Merge android-4.9.191 ( 9ca8608) into msm-4.9
2019-10-23 13:25:13 +08:00
utimes.c
xattr.c
This is the 4.9.337 stable release
2023-01-07 13:07:00 +01:00