887dfcedd826364b6159847dbd25800c0eeede4avboxsync/* $Id$ */
887dfcedd826364b6159847dbd25800c0eeede4avboxsync/** @file
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * Description.
887dfcedd826364b6159847dbd25800c0eeede4avboxsync */
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2008-2010 Oracle Corporation
887dfcedd826364b6159847dbd25800c0eeede4avboxsync *
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * available from http://www.virtualbox.org. This file is free software;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * you can redistribute it and/or modify it under the terms of the GNU
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * General Public License (GPL) as published by the Free Software
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
887dfcedd826364b6159847dbd25800c0eeede4avboxsync */
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include "vboxvfs.h"
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/param.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/systm.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/namei.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/kernel.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/proc.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/bio.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/buf.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/fcntl.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/mount.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/unistd.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/vnode.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/limits.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/lockf.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <sys/stat.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <vm/vm.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync#include <vm/vm_extern.h>
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsync/*
887dfcedd826364b6159847dbd25800c0eeede4avboxsync * Prototypes for VBOXVFS vnode operations
887dfcedd826364b6159847dbd25800c0eeede4avboxsync */
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_create_t vboxvfs_create;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_mknod_t vboxvfs_mknod;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_open_t vboxvfs_open;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_close_t vboxvfs_close;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_access_t vboxvfs_access;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_getattr_t vboxvfs_getattr;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_setattr_t vboxvfs_setattr;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_read_t vboxvfs_read;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_write_t vboxvfs_write;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_fsync_t vboxvfs_fsync;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_remove_t vboxvfs_remove;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_link_t vboxvfs_link;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_lookup_t vboxvfs_lookup;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_rename_t vboxvfs_rename;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_mkdir_t vboxvfs_mkdir;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_rmdir_t vboxvfs_rmdir;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_symlink_t vboxvfs_symlink;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_readdir_t vboxvfs_readdir;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_strategy_t vboxvfs_strategy;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_print_t vboxvfs_print;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_pathconf_t vboxvfs_pathconf;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_advlock_t vboxvfs_advlock;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_getextattr_t vboxvfs_getextattr;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_ioctl_t vboxvfs_ioctl;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_getpages_t vboxvfs_getpages;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_inactive_t vboxvfs_inactive;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_putpages_t vboxvfs_putpages;
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic vop_reclaim_t vboxvfs_reclaim;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstruct vop_vector vboxvfs_vnodeops = {
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_default = &default_vnodeops,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_access = vboxvfs_access,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_advlock = vboxvfs_advlock,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_close = vboxvfs_close,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_create = vboxvfs_create,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_fsync = vboxvfs_fsync,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_getattr = vboxvfs_getattr,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_getextattr = vboxvfs_getextattr,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_getpages = vboxvfs_getpages,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_inactive = vboxvfs_inactive,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_ioctl = vboxvfs_ioctl,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_link = vboxvfs_link,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_lookup = vboxvfs_lookup,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_mkdir = vboxvfs_mkdir,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_mknod = vboxvfs_mknod,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_open = vboxvfs_open,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_pathconf = vboxvfs_pathconf,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_print = vboxvfs_print,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_putpages = vboxvfs_putpages,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_read = vboxvfs_read,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_readdir = vboxvfs_readdir,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_reclaim = vboxvfs_reclaim,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_remove = vboxvfs_remove,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_rename = vboxvfs_rename,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_rmdir = vboxvfs_rmdir,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_setattr = vboxvfs_setattr,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_strategy = vboxvfs_strategy,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_symlink = vboxvfs_symlink,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync .vop_write = vboxvfs_write,
887dfcedd826364b6159847dbd25800c0eeede4avboxsync};
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_access(struct vop_access_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_open(struct vop_open_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_close(struct vop_close_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_getattr(struct vop_getattr_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_setattr(struct vop_setattr_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_read(struct vop_read_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_write(struct vop_write_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_create(struct vop_create_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_remove(struct vop_remove_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_rename(struct vop_rename_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_link(struct vop_link_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return EOPNOTSUPP;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_symlink(struct vop_symlink_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return EOPNOTSUPP;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_mknod(struct vop_mknod_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return EOPNOTSUPP;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_mkdir(struct vop_mkdir_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_rmdir(struct vop_rmdir_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_readdir(struct vop_readdir_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_fsync(struct vop_fsync_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_print (struct vop_print_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_pathconf (struct vop_pathconf_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_strategy (struct vop_strategy_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_ioctl(struct vop_ioctl_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return ENOTTY;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_getextattr(struct vop_getextattr_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_advlock(struct vop_advlock_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_lookup(struct vop_lookup_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_inactive(struct vop_inactive_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_reclaim(struct vop_reclaim_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_getpages(struct vop_getpages_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync
887dfcedd826364b6159847dbd25800c0eeede4avboxsyncstatic int vboxvfs_putpages(struct vop_putpages_args *ap)
887dfcedd826364b6159847dbd25800c0eeede4avboxsync{
887dfcedd826364b6159847dbd25800c0eeede4avboxsync return 0;
887dfcedd826364b6159847dbd25800c0eeede4avboxsync}
887dfcedd826364b6159847dbd25800c0eeede4avboxsync