freebsd-nq/sys/kern
Ian Dowse a90ef2ae0f The kernel did not hold a vnode reference associated with the
`rootvnode' pointer, but vfs_syscalls.c's checkdirs() assumed that
it did. This bug reliably caused a panic at reboot time if any
filesystem had been mounted directly over /.

The checkdirs() function is called at mount time to find any process
fd_cdir or fd_rdir pointers referencing the covered mountpoint
vnode. It transfers these to point at the root of the new filesystem.
However, this process was not reversed at unmount time, so processes
with a cwd/root at a mount point would unexpectedly lose their
cwd/root following a mount-unmount cycle at that mountpoint.

This change should fix both of the above issues. Start_init() now
holds an extra vnode reference corresponding to `rootvnode', and
dounmount() releases this reference when the root filesystem is
unmounted just before reboot. Dounmount() now undoes the actions
taken by checkdirs() at mount time; any process cdir/rdir pointers
that reference the root vnode of the unmounted filesystem are
transferred to the now-uncovered vnode.

Reviewed by:	bde, phk
2001-02-28 20:54:28 +00:00
..
bus_if.m Alter the return value and arguments of the GET_RESOURCE_LIST bus method. 2000-11-28 06:49:15 +00:00
device_if.m
genassym.sh Improve kernel bootstrapping: 2001-01-28 06:39:56 +00:00
gensetdefs.pl Don't hard-code alignment and data declarations valid for 64-bit 2001-01-29 01:55:54 +00:00
imgact_aout.c Back out proc locking to protect p_ucred for obtaining additional 2001-01-27 00:01:31 +00:00
imgact_elf.c MFS: bring the consistent `compat_3_brand' support into -CURRENT 2001-02-24 22:20:11 +00:00
imgact_gzip.c Fix a typo. 2001-01-24 08:42:39 +00:00
imgact_shell.c
inflate.c
init_main.c The kernel did not hold a vnode reference associated with the 2001-02-28 20:54:28 +00:00
init_sysent.c Regen. 2000-12-02 05:45:32 +00:00
kern_acct.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
kern_acl.c Back out proc locking to protect p_ucred for obtaining additional 2001-01-27 00:01:31 +00:00
kern_cap.c Remove unneeded #include <sys/proc.h> lines. 2000-10-29 13:57:19 +00:00
kern_clock.c Changed the aston() family to operate on a specified process instead of 2001-02-19 04:15:59 +00:00
kern_condvar.c Implement a unified run queue and adjust priority levels accordingly. 2001-02-12 00:20:08 +00:00
kern_conf.c KASSERT that the minor number passed to make_dev() is valid. 2001-02-02 03:32:11 +00:00
kern_descrip.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
kern_environment.c Previous commit changing SYSCTL_HANDLER_ARGS violated KNF. 2000-07-04 11:25:35 +00:00
kern_event.c Add an EV_SET() convenience macro for initializing struct kevent prior 2001-02-24 01:44:03 +00:00
kern_exec.c Fix typo: seperate -> separate. 2001-02-06 11:21:58 +00:00
kern_exit.c Streamline updating of switchtime (don't copy code from kern_sync.c). 2001-02-22 20:16:51 +00:00
kern_fork.c Sigh. Try to get priorities sorted out. Don't bother trying to 2001-02-28 02:53:44 +00:00
kern_idle.c Implement a unified run queue and adjust priority levels accordingly. 2001-02-12 00:20:08 +00:00
kern_intr.c Sigh. Try to get priorities sorted out. Don't bother trying to 2001-02-28 02:53:44 +00:00
kern_jail.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
kern_kthread.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
kern_ktr.c - In the KTR_EXTEND case, use a const char * to point to the passed in 2001-02-20 10:39:55 +00:00
kern_ktrace.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
kern_linker.c Another round of the <sys/queue.h> FOREACH transmogriffer. 2001-02-04 16:08:18 +00:00
kern_lock.c Proc locking. 2001-02-09 16:27:41 +00:00
kern_lockf.c
kern_malloc.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
kern_mib.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
kern_module.c Mechanical change to use <sys/queue.h> macro API instead of 2001-02-04 13:13:25 +00:00
kern_mutex.c Shuffle netgraph mutexes a bit and hold a reference on a node 2001-02-28 18:49:09 +00:00
kern_ntptime.c Updates to the ntp pll from John Hay. 2000-09-10 09:13:34 +00:00
kern_physio.c Separate the struct bio related stuff out of <sys/buf.h> into 2000-05-05 09:59:14 +00:00
kern_proc.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
kern_prot.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
kern_random.c This patchset fixes a large number of file descriptor race conditions. 2000-11-18 21:01:04 +00:00
kern_resource.c Backout previous commit. sched_lock is held, thus interrupts are prevented 2001-02-22 20:12:52 +00:00
kern_shutdown.c RIP <machine/lock.h>. 2001-02-11 10:44:09 +00:00
kern_sig.c Fixed a longstanding latency bug in signal delivery. When a signal 2001-02-19 09:40:58 +00:00
kern_subr.c Introduce copyinfrom and copyinstrfrom, which can copy data from either 2001-02-16 14:31:49 +00:00
kern_switch.c - Assert that the proc to return is not NULL in runq_choose the 2001-02-24 14:06:36 +00:00
kern_synch.c Add a mtx_assert() in maybe_resched() just to be sure it's always called 2001-02-22 13:47:01 +00:00
kern_syscalls.c sysvipc loadable. 2000-12-01 08:57:47 +00:00
kern_sysctl.c Mechanical change to use <sys/queue.h> macro API instead of 2001-02-04 13:13:25 +00:00
kern_tc.c Remove a bogus #ifdef KTR stanza. 2001-01-01 23:09:53 +00:00
kern_time.c Use callout_reset instead of timeout(9). Most callouts are statically 2000-11-27 22:52:31 +00:00
kern_timeout.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
kern_xxx.c
ksched.c Lock need_resched with sched_lock. 2001-02-22 13:46:09 +00:00
link_aout.c Manually add an extra _ to _DYNAMIC since it is provided by ld, not gcc. 2001-02-25 07:25:05 +00:00
link_elf_obj.c Make this compile in a.out mode. link.h has extra dependencies for a.out. 2001-02-25 07:26:54 +00:00
link_elf.c Make this compile in a.out mode. link.h has extra dependencies for a.out. 2001-02-25 07:26:54 +00:00
linker_if.m First round implementation of a fine grain enhanced module to module 2000-04-29 13:19:31 +00:00
Make.tags.inc there is no more miscfs/devfs 2000-12-31 23:12:20 +00:00
makedevops.pl Fix a bug in both scripts: HEADER sections were not emitted to the header 2001-01-04 13:41:24 +00:00
Makefile Retire kernfs (kernel part). 2000-12-28 12:17:35 +00:00
makeobjops.pl Fix a bug in both scripts: HEADER sections were not emitted to the header 2001-01-04 13:41:24 +00:00
makesyscalls.sh Add reserved lkmressys keyword. I swear, this script will die the 2000-12-01 08:47:54 +00:00
md5c.c Add ia64 support. 2000-09-29 13:36:47 +00:00
p1003_1b.c Add $FreeBSD$ 2000-05-01 20:32:07 +00:00
posix4_mib.c
subr_acl_posix1e.c Back out proc locking to protect p_ucred for obtaining additional 2001-01-27 00:01:31 +00:00
subr_autoconf.c Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
subr_blist.c Convert more malloc+bzero to malloc+M_ZERO. 2000-12-08 21:51:06 +00:00
subr_bus.c Unset the devclass if the attach fails and the devclass was not set to 2001-01-08 22:16:26 +00:00
subr_clist.c Fix typo: seperate -> separate. 2001-02-06 11:21:58 +00:00
subr_devstat.c Another round of the <sys/queue.h> FOREACH transmogriffer. 2001-02-04 16:08:18 +00:00
subr_disk.c Don't clone impossible unit numbers for disks. 2000-12-15 17:55:24 +00:00
subr_disklabel.c A bit of sanity-checking in bioqdisksort(): panic if we recurse. 2001-01-14 18:48:42 +00:00
subr_diskmbr.c Make diskerr() always log with printf. 2000-11-26 19:29:15 +00:00
subr_diskslice.c Add a new ioctl for doing virgin disklabels. 2000-10-31 07:05:40 +00:00
subr_eventhandler.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
subr_kobj.c Convert more malloc+bzero to malloc+M_ZERO. 2000-12-08 21:51:06 +00:00
subr_log.c Replace logwakeup() with "int msgbuftrigger". There is little 2000-12-20 21:50:37 +00:00
subr_mchain.c Remove superfluous m_pkthdr.rcv_if = NULL assignment following 2001-02-25 06:33:50 +00:00
subr_module.c Preceed/preceeding are not english words. Use precede and preceding. 2001-02-18 10:43:53 +00:00
subr_param.c Remove unneeded <stddef.h> #includes. 2000-10-29 16:57:42 +00:00
subr_prf.c Use PCPU_GET, PCPU_PTR and PCPU_SET to access all per-cpu variables 2001-01-10 04:43:51 +00:00
subr_prof.c Since the PC is a pointer to a code address, change the second parameter of 2001-02-22 18:07:31 +00:00
subr_rman.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
subr_sbuf.c Remove an assertion I forgot to remove in the previous commit: sbuf_len() 2001-01-28 00:33:58 +00:00
subr_scanf.c
subr_smp.c Activate USER_LDT by default. The new thread libraries are going to 2001-02-23 01:25:02 +00:00
subr_taskqueue.c - Catch up to the new swi API changes: 2001-02-09 17:46:35 +00:00
subr_trap.c - Rename the lcall system call handler from Xsyscall to Xlcall_syscall 2001-02-25 02:53:06 +00:00
subr_turnstile.c Shuffle netgraph mutexes a bit and hold a reference on a node 2001-02-28 18:49:09 +00:00
subr_witness.c Shuffle netgraph mutexes a bit and hold a reference on a node 2001-02-28 18:49:09 +00:00
subr_xxx.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
sys_generic.c Correctly declare variables as u_int rather than doing typecasts. 2001-02-27 15:11:31 +00:00
sys_pipe.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
sys_process.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
sys_socket.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
syscalls.c Regen. 2000-12-02 05:45:32 +00:00
syscalls.master Remove thr_sleep and thr_wakeup. Remove fields p_nthread and p_wakeup 2000-12-02 05:41:30 +00:00
sysv_ipc.c sysvipc loadable. 2000-12-01 08:57:47 +00:00
sysv_msg.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
sysv_sem.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
sysv_shm.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
tty_compat.c
tty_conf.c
tty_cons.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
tty_pty.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
tty_snoop.c Remove unused #include "snp.h" 2001-01-29 10:06:22 +00:00
tty_subr.c Fix typo: seperate -> separate. 2001-02-06 11:21:58 +00:00
tty_tty.c Add snapshots to the fast filesystem. Most of the changes support 2000-07-11 22:07:57 +00:00
tty.c Fix tab breakage from last commit. 2001-02-17 19:40:22 +00:00
uipc_accf.c Remove unneeded #include <sys/proc.h> lines. 2000-10-29 13:57:19 +00:00
uipc_domain.c Use callout_reset instead of timeout(9). Most callouts are statically 2000-11-27 22:52:31 +00:00
uipc_mbuf2.c Long awaited style fixup in mbuf code. Get rid of K&R style prototyping 2001-02-11 05:02:06 +00:00
uipc_mbuf.c Fix parameter order in the calls to MGET(). 2001-02-21 09:24:13 +00:00
uipc_proto.c
uipc_sockbuf.c Make sbcompress use the new M_WRITABLE macro. Previously sbcompress 2000-11-19 22:22:47 +00:00
uipc_socket2.c Make sbcompress use the new M_WRITABLE macro. Previously sbcompress 2000-11-19 22:22:47 +00:00
uipc_socket.c In soshutdown(), use SHUT_{RD,WR,RDWR} instead of FREAD and FWRITE. 2001-02-27 13:48:07 +00:00
uipc_syscalls.c Return ECONNABORTED from accept if connection is closed while on the 2001-02-14 02:09:11 +00:00
uipc_usrreq.c o Move per-process jail pointer (p->pr_prison) to inside of the subject 2001-02-21 06:39:57 +00:00
vfs_acl.c Back out proc locking to protect p_ucred for obtaining additional 2001-01-27 00:01:31 +00:00
vfs_aio.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
vfs_bio.c Fix lockup for loopback NFS mounts. The pipelined I/O limitations could be 2001-02-28 04:13:11 +00:00
vfs_cache.c Staticize some malloc M_ instances. 2000-12-08 20:09:00 +00:00
vfs_cluster.c Fix lockup for loopback NFS mounts. The pipelined I/O limitations could be 2001-02-28 04:13:11 +00:00
vfs_conf.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
vfs_default.c Added a dummy lookup vop. Specfs was broken by removing its dummy 2001-02-18 02:22:58 +00:00
vfs_export.c Add a NOTE_REVOKE flag for vnodes, which is triggered from within vclean(). 2001-02-23 20:06:01 +00:00
vfs_extattr.c The kernel did not hold a vnode reference associated with the 2001-02-28 20:54:28 +00:00
vfs_init.c Another round of the <sys/queue.h> FOREACH transmogriffer. 2001-02-04 16:08:18 +00:00
vfs_lookup.c Untangle vfsinit() a bit. Use seperate sysinit functions rather than 2000-12-06 07:09:08 +00:00
vfs_mount.c Change and clean the mutex lock interface. 2001-02-09 06:11:45 +00:00
vfs_subr.c Add a NOTE_REVOKE flag for vnodes, which is triggered from within vclean(). 2001-02-23 20:06:01 +00:00
vfs_syscalls.c The kernel did not hold a vnode reference associated with the 2001-02-28 20:54:28 +00:00
vfs_vnops.c Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00
vnode_if.pl Simplify this a bit so that it doesn't have to generate silly redundant 2000-12-06 06:59:38 +00:00
vnode_if.src Extend kqueue down to the device layer. 2001-02-15 16:34:11 +00:00