NetBSD/sys/kern
mycroft fbf03babff There is an annoying deadlock that goes like this:
* Process A is closing one file descriptor belonging to a device.  In doing so,
  ffs_update() is called and starts writing a block synchronously.  (Note: This
  leaves the vnode locked.  It also has other instances -- stdin, et al -- of
  the same device open, so v_usecount is definitely non-zero.)
* Process B does a revoke() on the device.  The revoke() has to wait for the
  vnode to be unlocked because ffs_update() is still in progress.
* Process C tries to open() the device.  It wedges in checkalias() repeatedly
  calling vget() because it returns EBUSY immediately.

To fix, this:
* checkalias() now uses LK_SLEEPFAIL rather than LK_NOWAIT.  Therefore it will
  wait for the vnode to become unlocked, but it will recheck that it is on the
  hash list, in case it was in the process of being revoke()d or was revoke()d
  again before we were woken up.
* Since we're relying on the vnode lock to tell us that the vnode hasn't been
  removed from the hash list *anyway*, I have moved the code to remove it into
  the DOCLOSE section of vclean(), inside the vnode lock.

In the example at hand, process A was sh(1), process B was a child of init(8),
and process C was syslogd(8).
2004-08-13 22:48:06 +00:00
..
cnmagic.c
core_elf32.c kill sprintf, use snprintf 2004-04-21 18:40:37 +00:00
core_elf64.c
core_netbsd.c
exec_aout.c Uppercase CPU, plural is CPUs. 2004-02-13 11:36:08 +00:00
exec_conf.c In MacOS X.3, the kernel maps tw opages of memory in every user process. 2004-07-03 00:14:30 +00:00
exec_ecoff.c
exec_elf32.c bump the number of allowed sections to 1024; e.g. SuSE 9.1 packaged 2004-08-01 22:16:19 +00:00
exec_elf64.c
exec_macho.c - Nuke __P(). 2004-03-23 13:22:32 +00:00
exec_script.c kill sprintf, use snprintf 2004-04-21 18:40:37 +00:00
exec_subr.c
genassym.awk
genassym.sh
genlintstub.awk
init_main.c Call inittodr() from main(). Let file system code set the recorded `last 2004-07-05 07:28:45 +00:00
init_sysctl.c The message buffer datum instrumented by KERN_MSGBUFSIZE is actually a 2004-07-27 12:46:18 +00:00
init_sysent.c Regen from syscalls.master rev. 1.142: 2004-05-10 22:30:41 +00:00
kern_acct.c Replace the statfs() family of system calls with statvfs(). 2004-04-21 01:05:31 +00:00
kern_clock.c statclock: don't assume hz==100 when determining frequency to call schedclock. 2004-07-01 12:36:57 +00:00
kern_descrip.c Implement mutexes for file descriptor and current working directory access. 2004-05-31 15:30:55 +00:00
kern_event.c Initialise (most) pools from a link set instead of explicit calls 2004-04-25 16:42:40 +00:00
kern_exec.c add support for hppa to the MI scheduler activations kernel code: 2004-07-18 21:29:26 +00:00
kern_exit.c Use the P_ZOMBIE macro instead of open-coding it. No functional change. 2004-08-07 03:34:37 +00:00
kern_fork.c Linux enforces CLONE_VM if CLONE_SIGHAND in clone(2) is specified, 2004-08-08 11:02:10 +00:00
kern_kcont.c Initialise (most) pools from a link set instead of explicit calls 2004-04-25 16:42:40 +00:00
kern_ksyms.c Move detection of a special symbol into a separate function. Add some more 2004-02-19 03:42:01 +00:00
kern_kthread.c
kern_ktrace.c Explain why the comment is a lie. 2004-06-24 15:06:35 +00:00
kern_lkm.c - Nuke __P(). 2004-03-23 13:22:32 +00:00
kern_lock.c add missing wakeups in the cases of lock failure. 2004-08-04 10:37:08 +00:00
kern_lwp.c In proc_representative_lwp, if there is an outstanding trap signal, return 2004-05-12 21:10:09 +00:00
kern_malloc_debug.c Initialise (most) pools from a link set instead of explicit calls 2004-04-25 16:42:40 +00:00
kern_malloc.c
kern_microtime.c Make it compile again for sparc64/DIAGNOSTIC. 2004-08-12 12:15:21 +00:00
kern_ntptime.c Lots of sysctl descriptions (if someone wants to help out here, that 2004-04-08 06:20:29 +00:00
kern_physio.c - Nuke __P(). 2004-03-23 13:22:32 +00:00
kern_proc.c Provide a mutex for the process limits data structure. 2004-05-06 22:20:30 +00:00
kern_prot.c crcopy: no need to lock if we're only reading the structure's reference count. 2004-05-04 21:27:28 +00:00
kern_ras.c ras_fork: don't do PR_WAITOK holding a spinlock. 2004-04-01 02:37:42 +00:00
kern_resource.c KNF previous. 2004-05-13 17:56:14 +00:00
kern_sa.c Cast register type via intptr_t before cast to pointer. 2004-07-20 14:56:10 +00:00
kern_sig.c PAGE_SIZE is apparently not a constant on the sparc port, so don't 2004-06-08 19:35:30 +00:00
kern_subr.c Add prototype for uiomove_frombuf. Change uiomove_frombuf to use size_t 2004-04-21 20:31:50 +00:00
kern_synch.c use lockstatus() instead of L_BIGLOCK to check if we're holding a biglock. 2004-05-18 11:59:11 +00:00
kern_sysctl.c In sysctl_destroyv, the newly created dnode structure must have its 2004-05-12 12:21:39 +00:00
kern_systrace.c (off_t)(long) is wrong when it comes to kernel addresses [because on a 32 bit 2004-05-26 16:28:05 +00:00
kern_time.c Fix "comments within comments" problem pointed out by Geoff Wing on 2004-04-27 05:25:33 +00:00
kern_timeout.c
kern_uuid.c uuidgen(2) syscall. Originally from FreeBSD, ported by John Franklin in 2004-01-29 02:00:02 +00:00
kern_verifiedexec.c
kern_xxx.c
kgdb_stub.c kill sprintf, use snprintf 2004-04-21 18:40:37 +00:00
Make.tags.inc
Makefile
makesyscalls.sh Rename LIBCOMPAT* -> SYSLIBCOMPAT*, now that <bsd.own.mk> provides LIBCOMPAT. 2004-07-31 00:55:51 +00:00
subr_autoconf.c split off the evcnt code (which is unrelated to autoconfiguration) 2004-02-17 05:03:15 +00:00
subr_devsw.c
subr_disk_mbr.c
subr_disk.c - add a function prototype. 2004-03-09 12:23:07 +00:00
subr_evcnt.c Include "sys/systm.h" to get the prototype for panic() which is required 2004-02-17 08:22:12 +00:00
subr_extent.c - Nuke __P(). 2004-03-23 13:22:32 +00:00
subr_log.c
subr_pool.c Remove PR_IMMEDRELEASE, since setting the high water mark will achieve 2004-06-20 18:19:27 +00:00
subr_prf.c Nuke __P(). 2004-03-23 13:22:03 +00:00
subr_prof.c Lots of sysctl descriptions (if someone wants to help out here, that 2004-04-08 06:20:29 +00:00
subr_prop.c Remove trailing blank line. 2003-12-21 11:54:16 +00:00
subr_userconf.c kill sprintf, use snprintf 2004-04-21 18:40:37 +00:00
subr_xxx.c
sys_generic.c Nuke __P(). 2004-03-23 13:22:03 +00:00
sys_pipe.c PRIBIO -> PSOCK. This emulates the pre-sys_pipe behavior, and avoids including 2004-07-17 20:50:08 +00:00
sys_pmc.c
sys_process.c Don't check for negative offset in the memory case. 64 bit addresses can 2004-06-22 02:06:55 +00:00
sys_socket.c Eliminate several uses of `curproc' from the socket-layer code and from NFS. 2004-05-22 22:52:13 +00:00
syscalls.c Regen from syscalls.master rev. 1.142: 2004-05-10 22:30:41 +00:00
syscalls.conf Replace the statfs() family of system calls with statvfs(). 2004-04-21 01:05:31 +00:00
syscalls.master POSIX-2001: Change readlink(2)'s return type from int to ssize_t. 2004-05-10 22:28:23 +00:00
sysv_ipc.c
sysv_msg.c Nuke __P(). 2004-03-23 13:22:03 +00:00
sysv_sem.c The different loop variable is no longer necessary due to recent change. 2004-08-05 22:06:48 +00:00
sysv_shm.c Initialise (most) pools from a link set instead of explicit calls 2004-04-25 16:42:40 +00:00
tty_conf.c - Nuke __P(). 2004-03-23 13:22:32 +00:00
tty_pty.c ptm is now mandatory, depends on pty, and can be disabled with -DNO_DEV_PTM 2004-06-18 15:02:29 +00:00
tty_subr.c Nuke __P(). 2004-03-23 13:22:03 +00:00
tty_tb.c Nuke __P(). 2004-03-23 13:22:03 +00:00
tty_tty.c
tty.c Remaining sysctl descriptions under kern subtree 2004-05-25 04:30:32 +00:00
uipc_domain.c Sysctl descriptions under net subtree (net.key not done) 2004-05-25 04:33:59 +00:00
uipc_mbuf2.c m_pulldown: fix mbuf leaks and chain truncation 2004-07-21 12:09:43 +00:00
uipc_mbuf.c m_copyback: add an assertion to detect write attempts to a read-only mbuf. 2004-07-21 12:06:46 +00:00
uipc_proto.c Constify protosw arrays. This can reduce the kernel .data section by 2004-04-22 01:01:40 +00:00
uipc_sem.c
uipc_socket2.c Rename MBUFTRACE helper function m_claim() to m_claimm(), 2004-06-24 04:15:50 +00:00
uipc_socket.c bump sb_timeo from short to int to allow longer timeouts. 2004-07-01 12:42:57 +00:00
uipc_syscalls.c Eliminate several uses of `curproc' from the socket-layer code and from NFS. 2004-05-22 22:52:13 +00:00
uipc_usrreq.c Eliminate several uses of `curproc' from the socket-layer code and from NFS. 2004-05-22 22:52:13 +00:00
vfs_bio.c - Add flag L_COWINPROGRESS to struct lwp to avoid recursion when 2004-06-20 18:55:58 +00:00
vfs_cache.c introduce a new function, cache_lookup_raw(), for filesystems which 2004-06-27 08:50:44 +00:00
vfs_getcwd.c Nuke __P(). 2004-03-23 13:22:03 +00:00
vfs_init.c Nuke __P(). 2004-03-23 13:22:03 +00:00
vfs_lockf.c Initialise (most) pools from a link set instead of explicit calls 2004-04-25 16:42:40 +00:00
vfs_lookup.c Fix the last commit(s). On machines with sizeof(long) != sizeof(int) 2003-12-08 14:23:33 +00:00
vfs_subr.c There is an annoying deadlock that goes like this: 2004-08-13 22:48:06 +00:00
vfs_syscalls.c Keep a pointer to the leaf mount. Needed for write gating where a 2004-07-01 10:03:29 +00:00
vfs_vnops.c vn_lock: add an assertion about usecount. 2004-05-31 09:02:51 +00:00
vnode_if.c regen. 2004-05-27 12:50:35 +00:00
vnode_if.sh Make VOP_STRATEGY(bp) a real VOP as discussed on tech-kern. 2004-01-25 18:02:04 +00:00
vnode_if.src update to match with the recent reality: getpages doesn't care about 2004-05-27 12:49:09 +00:00