Start where the mjf-devfs branch left off.
Fix the build. Also, there's no need to include sys/device.h in devfsd
code.
Remove some comments that no longer apply. Also provide
devfs_internal_mknod because we do not allow userland processes
to create nodes in devfs. All node creation is done via devfsd(8).

I also fixed a bug where an EEXIST error caused the vnode references
to be out-of-whack and wouldn't let me unmount a devfs.
- Special case mounting a devfs from init(8) so that a devfs cannot be
  unmounted unless it is forced. This is a (possibly temporary) workaround
  to the problem that the /etc/rc.d/root script umounts all file systems
  before mounting /.

- Clean up devfs_create_node() based on feedback from wrstuden@.

- Add devfs_remove_node() (counterpart to devfs_create_node).

- Add function to create a console and dctl(4) device node for every
  devfs mount.

- Support for VOP_MKNOD() on a devfs file system has been dropped, so
  that devfsd(8) can fully control device nodes that are created in devfs.

- Allow devfs to be mounted -o union.
Change version suffix back to 1.1 at request of christos@ so that
users know whether or not their library has the security
vulnerability.
- Introduce new API for allowing device drivers to register/unregister
  names for device nodes along with a corresponding dev_t.

- Make device drivers that technically never get attached and need device
  nodes (mem, zero, null) provide an initialisation function, which gets
  an entry in a table of init functions that devsw_init() calls when the
  device switch tables are initialised.

- Since we're moving to a new way of notifying devfsd(8) of new devices,
  we no longer need to link together struct devices.
dctl:
- Make dctl see aware of device driver names being added and removed so
  that it can signal devfsd(8), which in turn will request device node
  creation of deletion from a particular devfs mount.

- Each device that registers the need for a device node also passes on
  some info about what sort of device they are. We now package this up
  in the dctl messaging framework to let devfsd(8) know.

- Use a dev_t for the cookie for each device that dctl(4) knows about. This
  was changed from a device_t because some devices (zero(4)) don't have
  corresponding device_t's.

- dctl mount functions have grown a visibility argument which specifies
  the default visibility for that mount.

- Since we want to get information about devices (for matching against
  rules) through ioctl calls to match against rules, but for userland
  to ioctl they need device nodes, dctl provides an "inner" ioctl function
  that calls the ioctl function of the device driver directly.

devfsd:
- Run in the background.

- Convert all output to use syslog(3).

- When devices are removed request the corresponding device node be
  removed from every devfs mount.

- Start using the dctl "innerioctl" facility to get information about
  devices which will be useful for matching. We're only handling disk
  devices, and can only grok information about a partition's file system
  type at the moment.

- Fix code that handles rules that specify filenames.

- Specifying visibility for device nodes now works.

mount_devfs:
- Catch up with devfs changes. Provide an -f option which means that the
  devfs can only be unmounted it if it forced.

- Provide -i option to specify that the default visibility for a mount
  should be invisible. This means device nodes are not visible in the
  devfs mount by default, rather they must have a rule for devfsd that
  specifies that they should be visible.

- Provide -v option that specifies a devfs mount should be visible.
  This is the default.

- Update man page to reflect these changes.

etc/defaults/rc.conf:
- Turn devfsd off by default.


Device nodes can now be dynamically created and removed from a device file
system.
Add -s option which allows devfsd to run in the foreground and not wait
for new events. When there are no more events to be handled, it exits.
DCTL_NEW_MOUNT events are also placed onto a separate "mount event" list.
They are removed from this list when a DCTL_UNMOUNT event for the
corresponding mount gets sent to dctl(4).

This allows devfsd(8) to always know about devfs mounts on a system,
even if one was mounted whilst devfsd was not running.
- etc/devfsd.conf: Add some rules to give nodes like /dev/tty and
  		   /dev/null better default modes, i.e. 0666.

- sbin/init: Run devfsd -s before going to multiuser.

- sys/arch: Provide arm32, i386, sparc with a mem_init() function to request
  	    device nodes for /dev/null, /dev/zero, etc.

- sys/dev: Convert rnd, wd, agp, raid, cd, sd, wsdisplay, wskbd, wsmouse,
	   wsmux, tty, bpf, swap to devfs New World Order.

- sys/fs/devfs: Make the visibility attribute of device nodes configurable.
	        Also provide a function to mount a devfs on boot.

- sys/kern: Add a new boot flag, -n. This disables devfs support. Unless
	    the -n flag is specified the kernel will mount a devfs file
	    system on boot.
Add a mem_init() function for each architecture that requests a device
node for /dev/mem, /dev/null, /dev/zero, etc.

This will disappear when I move this code (and others) to be a
pseudo-device. When we have machine-independent mem code this will all be
unnecessary anyway.
Rename the dctl psuedo-device to devfsctl after discussion on tech-kern.

If you are running a devfs-enabled kernel, please update your config to
use devfsctl instead of dctl.
- Make distrib/sets and sys/fs/devfs catch up with dctl rename to devfsctl.

- The visibility of a node is now properly determined in devfs.

- device_lookup_info() has grown an argument to distinguish whether we're
  looking for a character or block device, since it's possible for the same
  dev_t value to be used for a character device and a different block device.
- Minor KNF.
- tsleep -> kpause.
- Use cdev_ioctl().
- Acquire lock in filt_devfsctlread().
Name thread devfsctl, not devfsctl_thread, so it will fit in top's thread
display.
Sync with HEAD.
Sync with HEAD.
Revert previous botched commit.
Add man page for devfsctl(4).

Hi hubert!
Pull in finiso changes.