vfs: allow mount() device parameter not to be a valid device

zfs interprets the device parameter as a pool name, so don't insist on opening
it as a device.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: implement nmount()

nmount() is a mount variant that works with key/value pairs to provide
options.  Implement it for osv.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: const correctness for dentry_alloc()

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: convert vfs_mount.c to C++

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: convert vfs_mount.cc to osv indents

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: add a function for getting all current mounts

Similar to /etc/mnttab, but without going through the file system.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: save the mount resource to the mount entry

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: store directory entry pointer to vnode

In order to unmount, we need to drop all vnodes on a mount point, so we
need to find all directory entries pointing to them.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: export dref()

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
vfs: implement vflush()

Iterate over all inodes, droping directory entries and vnodes belonging
to the mount point.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
Merge branch 'vfs.mount'

vfs mount/unmount related functionality.

Signed-off-by: Avi Kivity <avi@cloudius-systems.com>