From: Martin Pieuchot Subject: Unlock fstat(2) To: tech@openbsd.org Date: Sun, 5 Jan 2025 11:10:05 +0100 sys_fstat() is implemented as a wrapper around `fo_stat'. All implementations are ready to be called without KERNEL_LOCK() except for vn_statfile() below. This was part of my previous VFS unlock diff. ok? Index: kern/syscalls.master =================================================================== RCS file: /cvs/src/sys/kern/syscalls.master,v diff -u -p -r1.265 syscalls.master --- kern/syscalls.master 2 Aug 2024 14:34:45 -0000 1.265 +++ kern/syscalls.master 5 Jan 2025 10:02:35 -0000 @@ -133,7 +133,7 @@ 51 UNIMPL acct #endif 52 STD { int sys_sigpending(void); } -53 STD { int sys_fstat(int fd, struct stat *sb); } +53 STD NOLOCK { int sys_fstat(int fd, struct stat *sb); } 54 STD NOLOCK { int sys_ioctl(int fd, \ u_long com, ... void *data); } 55 STD { int sys_reboot(int opt); } Index: kern/vfs_vnops.c =================================================================== RCS file: /cvs/src/sys/kern/vfs_vnops.c,v diff -u -p -r1.124 vfs_vnops.c --- kern/vfs_vnops.c 30 Dec 2024 02:46:00 -0000 1.124 +++ kern/vfs_vnops.c 5 Jan 2025 10:03:02 -0000 @@ -427,7 +427,13 @@ int vn_statfile(struct file *fp, struct stat *sb, struct proc *p) { struct vnode *vp = fp->f_data; - return vn_stat(vp, sb, p); + int error; + + KERNEL_LOCK(); + error = vn_stat(vp, sb, p); + KERNEL_UNLOCK(); + + return (error); } /*