When these two syscalls have been marked NOLOCK, falloc(), fdinsert() &
friends weren't ready to be executed without KERNEL_LOCK(). This is no
longer true. kqueue(2), for example, do the same dances without this
lock.
ok?
Index: kern/uipc_syscalls.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v
retrieving revision 1.184
diff -u -p -r1.184 uipc_syscalls.c
--- kern/uipc_syscalls.c 15 Jan 2020 13:17:35 -0000 1.184
+++ kern/uipc_syscalls.c 27 May 2020 10:13:37 -0000
@@ -97,7 +97,6 @@ sys_socket(struct proc *p, void *v, regi
if (error)
return (error);
- KERNEL_LOCK();
fdplock(fdp);
error = falloc(p, &fp, &fd);
if (error) {
@@ -114,7 +113,6 @@ sys_socket(struct proc *p, void *v, regi
FRELE(fp, p);
*retval = fd;
}
- KERNEL_UNLOCK();
return (error);
}
@@ -450,7 +448,6 @@ sys_socketpair(struct proc *p, void *v,
if (error != 0)
goto free2;
}
- KERNEL_LOCK();
fdplock(fdp);
if ((error = falloc(p, &fp1, &sv[0])) != 0)
goto free3;
@@ -475,7 +472,6 @@ sys_socketpair(struct proc *p, void *v,
fdpunlock(fdp);
FRELE(fp1, p);
FRELE(fp2, p);
- KERNEL_UNLOCK();
return (0);
}
fdremove(fdp, sv[1]);
@@ -487,7 +483,6 @@ free4:
so1 = NULL;
free3:
fdpunlock(fdp);
- KERNEL_UNLOCK();
free2:
if (so2 != NULL)
(void)soclose(so2, 0);