summaryrefslogtreecommitdiff
path: root/sys/nnpfs/nnpfs_vfsops-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nnpfs/nnpfs_vfsops-common.c')
-rw-r--r--sys/nnpfs/nnpfs_vfsops-common.c288
1 files changed, 0 insertions, 288 deletions
diff --git a/sys/nnpfs/nnpfs_vfsops-common.c b/sys/nnpfs/nnpfs_vfsops-common.c
deleted file mode 100644
index 08434ff1f65..00000000000
--- a/sys/nnpfs/nnpfs_vfsops-common.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (c) 1995 - 2002 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <nnpfs/nnpfs_locl.h>
-
-RCSID("$arla: nnpfs_vfsops-common.c,v 1.40 2003/06/02 18:26:40 lha Exp $");
-
-/*
- * NNPFS vfs operations.
- */
-
-#include <nnpfs/nnpfs_common.h>
-#include <nnpfs/nnpfs_message.h>
-#include <nnpfs/nnpfs_fs.h>
-#include <nnpfs/nnpfs_dev.h>
-#include <nnpfs/nnpfs_deb.h>
-#include <nnpfs/nnpfs_syscalls.h>
-#include <nnpfs/nnpfs_vfsops.h>
-
-#ifdef HAVE_KERNEL_UDEV2DEV
-#define VA_RDEV_TO_DEV(x) udev2dev(x, 0) /* XXX what is the 0 */
-#else
-#define VA_RDEV_TO_DEV(x) x
-#endif
-
-
-struct nnpfs nnpfs[NNNPFS];
-
-/*
- * path and data is in system memory
- */
-
-int
-nnpfs_mount_common_sys(struct mount *mp,
- const char *path,
- void *data,
- struct nameidata *ndp,
- d_thread_t *p)
-{
- struct vnode *devvp;
- dev_t dev;
- int error;
- struct vattr vat;
-
- NNPFSDEB(XDEBVFOPS, ("nnpfs_mount: "
- "struct mount mp = %lx path = '%s' data = '%s'\n",
- (unsigned long)mp, path, (char *)data));
-
-#ifdef ARLA_KNFS
- NNPFSDEB(XDEBVFOPS, ("nnpfs_mount: mount flags = %x\n", mp->mnt_flag));
-
- /*
- * mountd(8) flushes all export entries when it starts
- * right now we ignore it (but should not)
- */
-
- if (mp->mnt_flag & MNT_UPDATE ||
- mp->mnt_flag & MNT_DELEXPORT) {
-
- NNPFSDEB(XDEBVFOPS,
- ("nnpfs_mount: ignoring MNT_UPDATE or MNT_DELEXPORT\n"));
- return 0;
- }
-#endif
-
- NDINIT(ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, data, p);
- error = namei(ndp);
- if (error) {
- NNPFSDEB(XDEBVFOPS, ("namei failed, errno = %d\n", error));
- return error;
- }
-
- devvp = ndp->ni_vp;
-
- if (devvp->v_type != VCHR) {
- vput(devvp);
- NNPFSDEB(XDEBVFOPS, ("not VCHR (%d)\n", devvp->v_type));
- return ENXIO;
- }
-#if defined(__osf__)
- VOP_GETATTR(devvp, &vat, ndp->ni_cred, error);
-#elif defined(HAVE_FREEBSD_THREAD)
- error = VOP_GETATTR(devvp, &vat, p->td_proc->p_ucred, p);
-#else
- error = VOP_GETATTR(devvp, &vat, p->p_ucred, p);
-#endif
- vput(devvp);
- if (error) {
- NNPFSDEB(XDEBVFOPS, ("VOP_GETATTR failed, error = %d\n", error));
- return error;
- }
-
- dev = VA_RDEV_TO_DEV(vat.va_rdev);
-
- NNPFSDEB(XDEBVFOPS, ("dev = %d.%d\n", major(dev), minor(dev)));
-
- if (!nnpfs_is_nnpfs_dev (dev)) {
- NNPFSDEB(XDEBVFOPS, ("%s is not a nnpfs device\n", (char *)data));
- return ENXIO;
- }
-
- if (nnpfs[minor(dev)].status & NNPFS_MOUNTED)
- return EBUSY;
-
- nnpfs[minor(dev)].status = NNPFS_MOUNTED;
- nnpfs[minor(dev)].mp = mp;
- nnpfs[minor(dev)].root = 0;
- nnpfs[minor(dev)].nnodes = 0;
- nnpfs[minor(dev)].fd = minor(dev);
-
- nnfs_init_head(&nnpfs[minor(dev)].nodehead);
-
- VFS_ASSIGN(mp, &nnpfs[minor(dev)]);
-#if defined(HAVE_KERNEL_VFS_GETNEWFSID)
-#if defined(HAVE_TWO_ARGUMENT_VFS_GETNEWFSID)
- vfs_getnewfsid(mp, MOUNT_AFS);
-#else
- vfs_getnewfsid(mp);
-#endif /* HAVE_TWO_ARGUMENT_VFS_GETNEWFSID */
-#endif /* HAVE_KERNEL_VFS_GETNEWFSID */
-
- mp->mnt_stat.f_bsize = DEV_BSIZE;
-#ifndef __osf__
- mp->mnt_stat.f_iosize = DEV_BSIZE;
- mp->mnt_stat.f_owner = 0;
-#endif
- mp->mnt_stat.f_blocks = 4711 * 4711;
- mp->mnt_stat.f_bfree = 4711 * 4711;
- mp->mnt_stat.f_bavail = 4711 * 4711;
- mp->mnt_stat.f_files = 4711;
- mp->mnt_stat.f_ffree = 4711;
- mp->mnt_stat.f_flags = mp->mnt_flag;
-
-#ifdef __osf__
- mp->mnt_stat.f_fsid.val[0] = dev;
- mp->mnt_stat.f_fsid.val[1] = MOUNT_NNPFS;
-
- mp->m_stat.f_mntonname = malloc(strlen(path) + 1, M_PATHNAME, M_WAITOK);
- strcpy(mp->m_stat.f_mntonname, path);
-
- mp->m_stat.f_mntfromname = malloc(sizeof("arla"), M_PATHNAME, M_WAITOK);
- strcpy(mp->m_stat.f_mntfromname, "arla");
-#else /* __osf__ */
- strncpy(mp->mnt_stat.f_mntonname,
- path,
- sizeof(mp->mnt_stat.f_mntonname));
-
- strncpy(mp->mnt_stat.f_mntfromname,
- data,
- sizeof(mp->mnt_stat.f_mntfromname));
-
- strncpy(mp->mnt_stat.f_fstypename,
- "nnpfs",
- sizeof(mp->mnt_stat.f_fstypename));
-#endif /* __osf__ */
-
- return 0;
-}
-
-int
-nnpfs_mount_common(struct mount *mp,
- const char *user_path,
- void *user_data,
- struct nameidata *ndp,
- d_thread_t *p)
-{
- char *path = NULL;
- char *data = NULL;
- size_t count;
- int error = 0;
-
- data = malloc(MAXPATHLEN, M_TEMP, M_WAITOK | M_CANFAIL);
- if (data == NULL) {
- error = ENOMEM;
- goto done;
- }
- path = malloc(MAXPATHLEN, M_TEMP, M_WAITOK | M_CANFAIL);
- if (path == NULL) {
- error = ENOMEM;
- goto done;
- }
-
- error = copyinstr(user_path, path, MAXPATHLEN, &count);
- if (error)
- goto done;
-
- error = copyinstr(user_data, data, MAXPATHLEN, &count);
- if (error)
- goto done;
- error = nnpfs_mount_common_sys (mp, path, data, ndp, p);
-done:
- if (data)
- free(data, M_TEMP);
- if (path)
- free(path, M_TEMP);
- return(error);
-}
-
-#ifdef HAVE_KERNEL_DOFORCE
-extern int doforce;
-#endif
-
-int
-nnpfs_unmount_common(struct mount *mp, int mntflags)
-{
- struct nnpfs *nnpfsp = VFS_TO_NNPFS(mp);
- int flags = 0;
- int error;
-
- if (mntflags & MNT_FORCE) {
-#ifdef HAVE_KERNEL_DOFORCE
- if (!doforce)
- return EINVAL;
-#endif
- flags |= FORCECLOSE;
- }
-
- error = free_all_nnpfs_nodes(nnpfsp, flags, 1);
- if (error)
- return error;
-
- nnpfsp->status = 0;
- NNPFS_TO_VFS(nnpfsp) = NULL;
- return 0;
-}
-
-int
-nnpfs_root_common(struct mount *mp, struct vnode **vpp,
- d_thread_t *proc, struct ucred *cred)
-{
- struct nnpfs *nnpfsp = VFS_TO_NNPFS(mp);
- struct nnpfs_message_getroot msg;
- int error;
-
- do {
- if (nnpfsp->root != NULL) {
- *vpp = XNODE_TO_VNODE(nnpfsp->root);
- nnpfs_do_vget(*vpp, LK_EXCLUSIVE, proc);
- return 0;
- }
- msg.header.opcode = NNPFS_MSG_GETROOT;
- msg.cred.uid = cred->cr_uid;
- msg.cred.pag = nnpfs_get_pag(cred);
- error = nnpfs_message_rpc(nnpfsp->fd, &msg.header, sizeof(msg), proc);
- if (error == 0)
- error = ((struct nnpfs_message_wakeup *) & msg)->error;
- } while (error == 0);
- /*
- * Failed to get message through, need to pretend that all went well
- * and return a fake dead vnode to be able to unmount.
- */
-
- if ((error = nnpfs_make_dead_vnode(mp, vpp)))
- return error;
-
- NNPFS_MAKE_VROOT(*vpp);
- return 0;
-}