From: Sebastien Marie Subject: Re: Unlock fstat(2) To: Martin Pieuchot , tech@openbsd.org Date: Sun, 05 Jan 2025 11:52:48 +0100 Martin Pieuchot writes: > 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? ok semarie@ > 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); > } > > /* > > -- Sebastien Marie