Index | Thread | Search

From:
Vitaliy Makkoveev <otto@bsdbox.dev>
Subject:
Re: connect in parallel
To:
Alexander Bluhm <alexander.bluhm@gmx.net>
Cc:
tech@openbsd.org
Date:
Tue, 2 Jan 2024 15:57:58 +0300

Download raw body.

Thread
  • Alexander Bluhm:

    connect in parallel

    • Vitaliy Makkoveev:

      connect in parallel

> On 2 Jan 2024, at 15:26, Alexander Bluhm <alexander.bluhm@gmx.net> wrote:
> 
> Hi,
> 
> I think it is time to run connect(2) in parallel.  This unlocks
> soconnect() for udp, rip, rip6 and divert.
> 
> ok?
> 

ok mvs

> bluhm
> 
> Index: kern/uipc_syscalls.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_syscalls.c,v
> diff -u -p -r1.215 uipc_syscalls.c
> --- kern/uipc_syscalls.c	18 Dec 2023 13:11:20 -0000	1.215
> +++ kern/uipc_syscalls.c	2 Jan 2024 11:46:55 -0000
> @@ -409,7 +409,7 @@ sys_connect(struct proc *p, void *v, reg
> 	if (KTRPOINT(p, KTR_STRUCT))
> 		ktrsockaddr(p, mtod(nam, caddr_t), SCARG(uap, namelen));
> #endif
> -	solock(so);
> +	solock_shared(so);
> 	if (isdnssocket(so)) {
> 		error = dns_portcheck(p, so, mtod(nam, void *), nam->m_len);
> 		if (error)
> @@ -443,7 +443,7 @@ bad:
> 	if (!interrupted)
> 		so->so_state &= ~SS_ISCONNECTING;
> unlock:
> -	sounlock(so);
> +	sounlock_shared(so);
> 	m_freem(nam);
> out:
> 	FRELE(fp, p);
> Index: netinet/in_pcb.h
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.h,v
> diff -u -p -r1.146 in_pcb.h
> --- netinet/in_pcb.h	1 Jan 2024 22:16:51 -0000	1.146
> +++ netinet/in_pcb.h	2 Jan 2024 11:46:55 -0000
> @@ -83,6 +83,7 @@
>  *	y	inpt_notify		pcb table rwlock for notify
>  *	p	inpcb_mtx		pcb mutex
>  *	L	pf_inp_mtx		link pf to inp mutex
> + *	s	so_lock			socket rwlock
>  */
> 
> /*
> @@ -194,7 +195,7 @@ struct inpcb {
> 	void	*inp_upcall_arg;
> 	u_int	inp_rtableid;		/* [t] */
> 	int	inp_pipex;		/* pipex indication */
> -	uint16_t inp_flowid;
> +	uint16_t inp_flowid;		/* [s] */
> };
> 
> LIST_HEAD(inpcbhead, inpcb);
>