Index | Thread | Search

From:
Vitaliy Makkoveev <otto@bsdbox.dev>
Subject:
Re: Unlock fstat(2)
To:
Martin Pieuchot <mpi@grenadille.net>
Cc:
tech@openbsd.org
Date:
Sun, 5 Jan 2025 13:19:13 +0300

Download raw body.

Thread
> On 5 Jan 2025, at 13:10, Martin Pieuchot <mpi@grenadille.net> wrote:
> 
> 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 mvs

> 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);
> }
> 
> /*
> 
>