Index | Thread | Search

From:
Vitaliy Makkoveev <mvs@openbsd.org>
Subject:
Re: unlock socket splice idle timeout
To:
Alexander Bluhm <bluhm@openbsd.org>
Cc:
tech@openbsd.org
Date:
Thu, 1 Aug 2024 15:39:45 +0300

Download raw body.

Thread
On Thu, Aug 01, 2024 at 02:26:02PM +0200, Alexander Bluhm wrote:
> Hi,
> 
> The socket splice idle timeout does not need kernel lock.
> 
> ok?
> 

ok mvs

> bluhm
> 
> Index: kern/uipc_socket.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_socket.c,v
> diff -u -p -r1.340 uipc_socket.c
> --- kern/uipc_socket.c	29 Jul 2024 10:35:22 -0000	1.340
> +++ kern/uipc_socket.c	31 Jul 2024 17:36:32 -0000
> @@ -361,7 +361,8 @@ sofree(struct socket *so, int keep_lock)
>  #ifdef SOCKET_SPLICE
>  	if (so->so_sp) {
>  		/* Reuse splice idle, sounsplice() has been called before. */
> -		timeout_set_proc(&so->so_sp->ssp_idleto, soreaper, so);
> +		timeout_set_flags(&so->so_sp->ssp_idleto, soreaper, so,
> +		    KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
>  		timeout_add(&so->so_sp->ssp_idleto, 0);
>  	} else
>  #endif /* SOCKET_SPLICE */
> @@ -1487,7 +1488,8 @@ sosplice(struct socket *so, int fd, off_
>  		so->so_idletv = *tv;
>  	else
>  		timerclear(&so->so_idletv);
> -	timeout_set_proc(&so->so_idleto, soidle, so);
> +	timeout_set_flags(&so->so_idleto, soidle, so,
> +	    KCLOCK_NONE, TIMEOUT_PROC | TIMEOUT_MPSAFE);
>  	task_set(&so->so_splicetask, sotask, so);
>  
>  	/*
>