Remove the coda fs. It hasn't worked in a long time.
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 17 Aug 2006 22:07:52 +0000 (22:07 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 17 Aug 2006 22:07:52 +0000 (22:07 +0000)
27 files changed:
sys/conf/files
sys/config/LINT
sys/i386/conf/LINT
sys/vfs/Makefile
sys/vfs/coda/00READ [deleted file]
sys/vfs/coda/Makefile [deleted file]
sys/vfs/coda/README [deleted file]
sys/vfs/coda/TODO [deleted file]
sys/vfs/coda/cnode.h [deleted file]
sys/vfs/coda/coda.h [deleted file]
sys/vfs/coda/coda_fbsd.c [deleted file]
sys/vfs/coda/coda_io.h [deleted file]
sys/vfs/coda/coda_kernel.h [deleted file]
sys/vfs/coda/coda_namecache.c [deleted file]
sys/vfs/coda/coda_namecache.h [deleted file]
sys/vfs/coda/coda_opstats.h [deleted file]
sys/vfs/coda/coda_pioctl.h [deleted file]
sys/vfs/coda/coda_psdev.c [deleted file]
sys/vfs/coda/coda_psdev.h [deleted file]
sys/vfs/coda/coda_subr.c [deleted file]
sys/vfs/coda/coda_subr.h [deleted file]
sys/vfs/coda/coda_venus.c [deleted file]
sys/vfs/coda/coda_venus.h [deleted file]
sys/vfs/coda/coda_vfsops.c [deleted file]
sys/vfs/coda/coda_vfsops.h [deleted file]
sys/vfs/coda/coda_vnops.c [deleted file]
sys/vfs/coda/coda_vnops.h [deleted file]

index 48aed70..68d8544 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.134 2006/08/06 18:56:42 dillon Exp $
+# $DragonFly: src/sys/conf/files,v 1.135 2006/08/17 22:07:33 dillon Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -33,13 +33,6 @@ aic79xx_reg_print.o          optional ahd pci ahd_reg_pretty_print   \
        no-implicit-rule local
 kern/device_if.m                       standard
 kern/bus_if.m                          standard
-vfs/coda/coda_namecache.c              optional vcoda
-vfs/coda/coda_fbsd.c                   optional vcoda
-vfs/coda/coda_psdev.c                  optional vcoda
-vfs/coda/coda_subr.c                   optional vcoda
-vfs/coda/coda_venus.c                  optional vcoda
-vfs/coda/coda_vfsops.c                 optional vcoda
-vfs/coda/coda_vnops.c                  optional vcoda
 bus/cam/cam.c                          optional scbus
 bus/cam/cam_xpt.c                      optional scbus
 bus/cam/cam_extend.c                   optional scbus
index ff3d76b..6b584b2 100644 (file)
@@ -3,7 +3,7 @@
 #      as much of the source tree as it can.
 #
 # $FreeBSD: src/sys/i386/conf/LINT,v 1.749.2.144 2003/06/04 17:56:59 sam Exp $
-# $DragonFly: src/sys/config/LINT,v 1.86 2006/07/04 17:35:30 swildner Exp $
+# $DragonFly: src/sys/config/LINT,v 1.87 2006/08/17 22:07:51 dillon Exp $
 #
 # NB: You probably don't want to try running a kernel built from this
 # file.  Instead, you should start from GENERIC, and add options from
@@ -811,11 +811,6 @@ options    NFS_WDELAYHASHSIZ=16    # and with this
 options        NFS_MUIDHASHSIZ=63      # Tune the size of nfsmount with this
 options        NFS_DEBUG               # Enable NFS Debugging
 
-# Coda stuff:
-# YYY-DR Till we rework the VOP methods for this filesystem
-#options       CODA                    #CODA filesystem.
-#pseudo-device vcoda   4               #coda minicache <-> venus comm.
-
 #
 # Add support for the EXT2FS filesystem of Linux fame.  Be a bit
 # careful with this - the ext2fs code has a tendency to lag behind
index c865944..626ffdb 100644 (file)
@@ -3,7 +3,7 @@
 #      as much of the source tree as it can.
 #
 # $FreeBSD: src/sys/i386/conf/LINT,v 1.749.2.144 2003/06/04 17:56:59 sam Exp $
-# $DragonFly: src/sys/i386/conf/Attic/LINT,v 1.86 2006/07/04 17:35:30 swildner Exp $
+# $DragonFly: src/sys/i386/conf/Attic/LINT,v 1.87 2006/08/17 22:07:51 dillon Exp $
 #
 # NB: You probably don't want to try running a kernel built from this
 # file.  Instead, you should start from GENERIC, and add options from
@@ -811,11 +811,6 @@ options    NFS_WDELAYHASHSIZ=16    # and with this
 options        NFS_MUIDHASHSIZ=63      # Tune the size of nfsmount with this
 options        NFS_DEBUG               # Enable NFS Debugging
 
-# Coda stuff:
-# YYY-DR Till we rework the VOP methods for this filesystem
-#options       CODA                    #CODA filesystem.
-#pseudo-device vcoda   4               #coda minicache <-> venus comm.
-
 #
 # Add support for the EXT2FS filesystem of Linux fame.  Be a bit
 # careful with this - the ext2fs code has a tendency to lag behind
index d0216e6..c8d061f 100644 (file)
@@ -1,9 +1,9 @@
 # Makefile for vfs modules
 #
-# $DragonFly: src/sys/vfs/Makefile,v 1.6 2006/04/04 17:34:32 dillon Exp $
+# $DragonFly: src/sys/vfs/Makefile,v 1.7 2006/08/17 22:07:49 dillon Exp $
 
 SUBDIR=fifofs msdosfs portal gnu nfs procfs \
-       coda hpfs ntfs smbfs isofs fdesc mfs nwfs udf \
+       hpfs ntfs smbfs isofs fdesc mfs nwfs udf \
        nullfs
 
 .include <bsd.subdir.mk>
diff --git a/sys/vfs/coda/00READ b/sys/vfs/coda/00READ
deleted file mode 100644 (file)
index ef55417..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-WARNING:
-       A version of this code has run on stable for a while now.
-       The code has been recently ported to current.  It is mostly
-       working, but hasn't been run long enough to be sure all the
-       bugs are sorted out.  Let me know if there are any problems.
-       In particular, killing venus (or rebooting) when/if venus
-       is hung, may not work correctly.
-
-       This code is not SMP ready.  Most locks are on vnodes
-       and cnodes and go thru the lock manager.  There are a
-       few hashes and queues that need to be locked -- I think that's
-       all that is needed.
-
-
-                                               rvb@cmu.edu
diff --git a/sys/vfs/coda/Makefile b/sys/vfs/coda/Makefile
deleted file mode 100644 (file)
index a9abed6..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# $FreeBSD: src/sys/modules/coda/Makefile,v 1.7.2.1 2001/07/24 09:49:42 dd Exp $
-# $DragonFly: src/sys/vfs/coda/Attic/Makefile,v 1.4 2004/08/13 17:51:10 dillon Exp $
-
-KMOD=  coda
-SRCS=  coda_fbsd.c coda_namecache.c coda_psdev.c coda_subr.c \
-       coda_venus.c coda_vfsops.c coda_vnops.c use_vcoda.h
-NOMAN=
-
-CLEANFILES=    use_vcoda.h
-
-use_vcoda.h:
-       echo "#define NVCODA 4" > use_vcoda.h
-
-.include <bsd.kmod.mk>
diff --git a/sys/vfs/coda/README b/sys/vfs/coda/README
deleted file mode 100644 (file)
index f9bf3c3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-                Announcing the Availability of the
-                        Coda Distributed
-                           Filesystem
-                              for
-                         BSD Unix Systems
-
-        Coda is a distributed file system like NFS and AFS.  It is
-freely available, like NFS.  But it functions much like AFS in being a
-"stateful" file system.  Coda and AFS cache files on your local
-machine to improve performance.  But Coda goes a step further than AFS
-by letting you access the cached files when there is no available
-network, viz. disconnected laptops and network outages.  In Coda, both
-the client and server are outside the kernel which makes them easier
-to experiment with.
-
-To get more information on Coda, I would like to refer people to
-        http://www.coda.cs.cmu.edu
-There is a wealth of documents, papers, and theses there.  There is
-also a good introduction to the Coda File System in
-        http://www.coda.cs.cmu.edu/ljpaper/lj.html
-
-Coda was originally developed as an academic prototype/testbed.  It is
-being polished and rewritten where necessary.  Coda is a work in
-progress and does have bugs.  It is, though, very usable.  Our
-interest is in making Coda available to as many people as possible and
-to have Coda evolve and flourish.
-
-The bulk of the Coda file system code supports the Coda client
-program, the Coda server program and the utilities needed by both.
-All these programs are unix programs and can run equally well on any
-Unix platform.  Our main development thrust is improving these
-programs.  There is a small part of Coda that deals with the kernel to
-file system interface.  This code is OS specific (but should not be
-platform specific).
-
-Coda is currently available for several OS's and platforms:
-        Freebsd-2.2.5: i386
-        Freebsd-2.2.6: i386
-       Freebsd -current: i386
-        linux 2.0: i386 & sparc
-        linux 2.1: i386 & sparc
-        NetBSD 1.3: i386
-       NetBSD -current: i386
-The relevant sources, binaries, and docs can be found in
-        ftp://ftp.coda.cs.cmu.edu/pub/coda/
-
-We intend to come out with new Coda releases often, not daily.  We
-don't want to slight any OS/platform not mentioned above.  We are just
-limited in our resources as to what we can support internally.  We
-will be happy to integrate OpenBSD support as well as other OS
-support.  Also, adding platform support should be relatively easy and
-we can discuss this.  The only difficulty is that Coda has a light weight
-process package.  It does some manipulations in assembler which would
-have to be redone for a different platform.
-
-There are several mailing lists @coda.cs.cmu.edu that discuss coda:
-coda-announce and linux-coda.  We are going to revise linux-coda to be
-OS neutral, since it is mainly Coda we want to discuss.  We appreciate
-comments, feedback, bug reports, bug fixes, enhancements, etc.
-
diff --git a/sys/vfs/coda/TODO b/sys/vfs/coda/TODO
deleted file mode 100644 (file)
index eac5143..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-OOPS:
-       FreeBSD does not fsync!!!
-
-Near term:
-       Fix bug in executing/mapping new files.
-       cfs_mount bug: interaction with cfs_inactive no cfs_unsave.
-       vref/vn_lock == vget except no VXWANT which may be on.
-       Review locks: vn_lock/VOP_UNLOCK/lockmgr ...
-
-Medium term:
-       Add missing VFS methods.
-       Do performance profile.
-       Tune hash algorithm used in cfs_namecache.
-       Tune hash algorithm used in cfs_subr.
-
-Eventually:
-       Use standard queue macros.
diff --git a/sys/vfs/coda/cnode.h b/sys/vfs/coda/cnode.h
deleted file mode 100644 (file)
index a8401b7..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/cnode.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/cnode.h,v 1.7 1999/08/28 00:40:52 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/cnode.h,v 1.4 2004/08/28 19:02:08 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon University.
- * Contributers include David Steere, James Kistler, and M. Satyanarayanan.
- */
-
-#ifndef        _CNODE_H_
-#define        _CNODE_H_
-
-#include <sys/vnode.h>
-#include <sys/lock.h>
-#include <machine/clock.h>
-
-MALLOC_DECLARE(M_CODA);
-
-/*
- * tmp below since we need struct queue
- */
-#include "coda_kernel.h"
-
-/*
- * Cnode lookup stuff.
- * NOTE: CODA_CACHESIZE must be a power of 2 for cfshash to work!
- */
-#define CODA_CACHESIZE 512
-
-#define CODA_ALLOC(ptr, cast, size)                                        \
-do {                                                                      \
-    ptr = (cast)malloc((unsigned long) size, M_CODA, M_WAITOK);            \
-    if (ptr == 0) {                                                       \
-       panic("kernel malloc returns 0 at %s:%d\n", __FILE__, __LINE__);  \
-    }                                                                     \
-} while (0)
-
-#define CODA_FREE(ptr, size)  free((ptr), M_CODA)
-
-/*
- * global cache state control
- */
-extern int coda_nc_use;
-
-/*
- * Used to select debugging statements throughout the cfs code.
- */
-extern int codadebug;
-extern int coda_nc_debug;
-extern int coda_printf_delay;
-extern int coda_vnop_print_entry;
-extern int coda_psdev_print_entry;
-extern int coda_vfsop_print_entry;
-
-#define CODADBGMSK(N)            (1 << N)
-#define CODADEBUG(N, STMT)       { if (codadebug & CODADBGMSK(N)) { STMT } }
-#define myprintf(args)          \
-do {                            \
-    if (coda_printf_delay)       \
-       DELAY(coda_printf_delay);\
-    printf args ;               \
-} while (0)
-
-struct cnode {
-    struct vnode       *c_vnode;
-    u_short             c_flags;       /* flags (see below) */
-    ViceFid             c_fid;         /* file handle */
-    struct vnode       *c_ovp;         /* open vnode pointer */
-    u_short             c_ocount;      /* count of openers */
-    u_short             c_owrite;      /* count of open for write */
-    struct vattr        c_vattr;       /* attributes */
-    char               *c_symlink;     /* pointer to symbolic link */
-    u_short             c_symlen;      /* length of symbolic link */
-    dev_t               c_device;      /* associated vnode device */
-    ino_t               c_inode;       /* associated vnode inode */
-    struct cnode       *c_next;        /* links if on NetBSD machine */
-};
-#define        VTOC(vp)        ((struct cnode *)(vp)->v_data)
-#define        CTOV(cp)        ((struct vnode *)((cp)->c_vnode))
-
-/* flags */
-#define C_VATTR                0x01    /* Validity of vattr in the cnode */
-#define C_SYMLINK      0x02    /* Validity of symlink pointer in the Code */
-#define C_WANTED       0x08    /* Set if lock wanted */
-#define C_LOCKED       0x10    /* Set if lock held */
-#define C_UNMOUNTING   0X20    /* Set if unmounting */
-#define C_PURGING      0x40    /* Set if purging a fid */
-
-#define VALID_VATTR(cp)                ((cp->c_flags) & C_VATTR)
-#define VALID_SYMLINK(cp)      ((cp->c_flags) & C_SYMLINK)
-#define IS_UNMOUNTING(cp)      ((cp)->c_flags & C_UNMOUNTING)
-
-struct vcomm {
-       u_long          vc_seq;
-       struct selinfo  vc_selproc;
-       struct queue    vc_requests;
-       struct queue    vc_replys;
-};
-
-#define        VC_OPEN(vcp)        ((vcp)->vc_requests.forw != NULL)
-#define MARK_VC_CLOSED(vcp) (vcp)->vc_requests.forw = NULL;
-#define MARK_VC_OPEN(vcp)    /* MT */
-
-struct coda_clstat {
-       int     ncalls;                 /* client requests */
-       int     nbadcalls;              /* upcall failures */
-       int     reqs[CODA_NCALLS];      /* count of each request */
-};
-extern struct coda_clstat coda_clstat;
-
-/*
- * CODA structure to hold mount/file system information
- */
-struct coda_mntinfo {
-    struct vnode       *mi_rootvp;
-    struct mount       *mi_vfsp;
-    struct vcomm        mi_vcomm;
-};
-extern struct coda_mntinfo coda_mnttbl[]; /* indexed by minor device number */
-
-/*
- * vfs pointer to mount info
- */
-#define vftomi(vfsp)    ((struct coda_mntinfo *)(vfsp->mnt_data))
-#define        CODA_MOUNTED(vfsp)   (vftomi((vfsp)) != (struct coda_mntinfo *)0)
-
-/*
- * vnode pointer to mount info
- */
-#define vtomi(vp)       ((struct coda_mntinfo *)(vp->v_mount->mnt_data))
-
-/*
- * Used for identifying usage of "Control" object
- */
-extern struct vnode *coda_ctlvp;
-#define        IS_CTL_VP(vp)           ((vp) == coda_ctlvp)
-#define        IS_CTL_NAME(vp, name, l)((l == CODA_CONTROLLEN) \
-                                && ((vp) == vtomi((vp))->mi_rootvp)    \
-                                && strncmp(name, CODA_CONTROL, l) == 0)
-
-/* 
- * An enum to tell us whether something that will remove a reference
- * to a cnode was a downcall or not
- */
-enum dc_status {
-    IS_DOWNCALL = 6,
-    NOT_DOWNCALL = 7
-};
-
-/* cfs_psdev.h */
-extern int coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize, caddr_t buffer);
-extern int coda_kernel_version;
-
-/* cfs_subr.h */
-extern int  handleDownCall(int opcode, union outputArgs *out);
-extern void coda_unmounting(struct mount *whoIam);
-extern int  coda_vmflush(struct cnode *cp);
-
-/* cfs_vnodeops.h */
-extern struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type);
-extern int coda_vnodeopstats_init(void);
-
-/* coda_vfsops.h */
-extern struct mount *devtomp(dev_t dev);
-
-/* sigh */
-#define CODA_RDWR ((u_long) 31)
-
-#endif /* _CNODE_H_ */
-
diff --git a/sys/vfs/coda/coda.h b/sys/vfs/coda/coda.h
deleted file mode 100644 (file)
index d1edc93..0000000
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda.h,v 1.9 1999/12/29 04:54:30 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda.h,v 1.4 2006/01/13 21:09:26 swildner Exp $
- * 
- */
-
-
-/*
- *
- * Based on cfs.h from Mach, but revamped for increased simplicity.
- * Linux modifications by Peter Braam, Aug 1996
- */
-
-#ifndef _CODA_HEADER_
-#define _CODA_HEADER_
-
-
-
-/* Catch new _KERNEL defn for NetBSD */
-#ifdef __NetBSD__
-#include <sys/types.h>
-#endif 
-
-#ifndef CODA_MAXSYMLINKS
-#define CODA_MAXSYMLINKS 10
-#endif
-
-#if defined(DJGPP) || defined(__CYGWIN32__)
-#ifdef _KERNEL
-typedef unsigned long u_long;
-typedef unsigned int u_int;
-typedef unsigned short u_short;
-typedef u_long ino_t;
-typedef u_long dev_t;
-typedef void * caddr_t;
-#ifdef DOS
-typedef unsigned __int64 u_quad_t;
-#else 
-typedef unsigned long long u_quad_t;
-#endif
-
-#define inline
-
-struct timespec {
-        long       ts_sec;
-        long       ts_nsec;
-};
-#else  /* DJGPP but not _KERNEL */
-#include <sys/types.h>
-#include <sys/time.h>
-typedef unsigned long long u_quad_t;
-#endif /* !_KERNEL */
-#endif /* !DJGPP */
-
-
-#if defined(__linux__)
-#define cdev_t u_quad_t
-#if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
-#define _UQUAD_T_ 1
-typedef unsigned long long u_quad_t;
-#endif
-#else
-#define cdev_t udev_t
-#endif
-
-#ifdef __CYGWIN32__
-typedef unsigned char u_int8_t;
-struct timespec {
-        time_t  tv_sec;         /* seconds */
-        long    tv_nsec;        /* nanoseconds */
-};
-#endif
-
-
-/*
- * Cfs constants
- */
-#define CODA_MAXNAMLEN   255
-#define CODA_MAXPATHLEN  1024
-#define CODA_MAXSYMLINK  10
-
-/* these are Coda's version of O_RDONLY etc combinations
- * to deal with VFS open modes
- */
-#define        C_O_READ        0x001
-#define        C_O_WRITE       0x002
-#define C_O_TRUNC       0x010
-#define C_O_EXCL       0x100
-#define C_O_CREAT      0x200
-
-/* these are to find mode bits in Venus */ 
-#define C_M_READ  00400
-#define C_M_WRITE 00200
-
-/* for access Venus will use */
-#define C_A_C_OK    8               /* Test for writing upon create.  */
-#define C_A_R_OK    4               /* Test for read permission.  */
-#define C_A_W_OK    2               /* Test for write permission.  */
-#define C_A_X_OK    1               /* Test for execute permission.  */
-#define C_A_F_OK    0               /* Test for existence.  */
-
-
-
-#ifndef _VENUS_DIRENT_T_
-#define _VENUS_DIRENT_T_ 1
-struct venus_dirent {
-        unsigned long  d_fileno;               /* file number of entry */
-        unsigned short d_reclen;               /* length of this record */
-        char           d_type;                 /* file type, see below */
-        char           d_namlen;               /* length of string in d_name */
-        char           d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */
-};
-#undef DIRSIZ
-#define DIRSIZ(dp)      ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
-                         (((dp)->d_namlen+1 + 3) &~ 3))
-
-/*
- * File types
- */
-#define        CDT_UNKNOWN      0
-#define        CDT_FIFO         1
-#define        CDT_CHR          2
-#define        CDT_DIR          4
-#define        CDT_BLK          6
-#define        CDT_REG          8
-#define        CDT_LNK         10
-#define        CDT_SOCK        12
-#define        CDT_WHT         14
-
-/*
- * Convert between stat structure types and directory types.
- */
-#define        IFTOCDT(mode)   (((mode) & 0170000) >> 12)
-#define        CDTTOIF(dirtype)        ((dirtype) << 12)
-
-#endif
-
-#ifndef        _FID_T_
-#define _FID_T_        1
-typedef u_long VolumeId;
-typedef u_long VnodeId;
-typedef u_long Unique_t;
-typedef u_long FileVersion;
-#endif 
-
-#ifndef        _VICEFID_T_
-#define _VICEFID_T_    1
-typedef struct ViceFid {
-    VolumeId Volume;
-    VnodeId Vnode;
-    Unique_t Unique;
-} ViceFid;
-#endif /* VICEFID */
-
-
-#ifdef __linux__
-static __inline__ ino_t
-coda_f2i(struct ViceFid *fid)
-{
-       if ( ! fid ) 
-               return 0; 
-       if (fid->Vnode == 0xfffffffe || fid->Vnode == 0xffffffff)
-               return ((fid->Volume << 20) | (fid->Unique & 0xfffff));
-       else
-               return (fid->Unique + (fid->Vnode<<10) + (fid->Volume<<20));
-}
-       
-#else
-#define coda_f2i(fid)\
-       ((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0)
-#endif
-
-
-#ifndef __BIT_TYPES_DEFINED__
-#define u_int32_t unsigned int
-#endif
-
-
-#ifndef _VUID_T_
-#define _VUID_T_
-typedef u_int32_t vuid_t;
-typedef u_int32_t vgid_t;
-#endif /*_VUID_T_ */
-
-#ifndef _CODACRED_T_
-#define _CODACRED_T_
-struct coda_cred {
-    vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/
-    vgid_t cr_groupid,     cr_egid, cr_sgid, cr_fsgid; /* same for groups */
-};
-#endif 
-
-#ifndef _VENUS_VATTR_T_
-#define _VENUS_VATTR_T_
-/*
- * Vnode types.  VNON means no type.
- */
-enum coda_vtype        { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
-
-struct coda_vattr {
-       int             va_type;        /* vnode type (for create) */
-       nlink_t         va_nlink;       /* number of references to file */
-       u_short         va_mode;        /* files access mode and type */
-       vuid_t          va_uid;         /* owner user id */
-       vgid_t          va_gid;         /* owner group id */
-       long            va_fileid;      /* file id */
-       u_quad_t        va_size;        /* file size in bytes */
-       long            va_blocksize;   /* blocksize preferred for i/o */
-       struct timespec va_atime;       /* time of last access */
-       struct timespec va_mtime;       /* time of last modification */
-       struct timespec va_ctime;       /* time file changed */
-       u_long          va_gen;         /* generation number of file */
-       u_long          va_flags;       /* flags defined for file */
-       cdev_t          va_rdev;        /* device special file represents */
-       u_quad_t        va_bytes;       /* bytes of disk space held by file */
-       u_quad_t        va_filerev;     /* file modification number */
-};
-
-#endif 
-
-/*
- * Kernel <--> Venus communications.
- */
-
-#define CODA_ROOT      2
-#define CODA_SYNC      3
-#define CODA_OPEN      4
-#define CODA_CLOSE     5
-#define CODA_IOCTL     6
-#define CODA_GETATTR   7
-#define CODA_SETATTR   8
-#define CODA_ACCESS    9
-#define CODA_LOOKUP    10
-#define CODA_CREATE    11
-#define CODA_REMOVE    12
-#define CODA_LINK      13
-#define CODA_RENAME    14
-#define CODA_MKDIR     15
-#define CODA_RMDIR     16
-#define CODA_READDIR   17
-#define CODA_SYMLINK   18
-#define CODA_READLINK  19
-#define CODA_FSYNC     20
-#define CODA_INACTIVE  21
-#define CODA_VGET      22
-#define CODA_SIGNAL    23
-#define CODA_REPLACE   24
-#define CODA_FLUSH       25
-#define CODA_PURGEUSER   26
-#define CODA_ZAPFILE     27
-#define CODA_ZAPDIR      28
-#define CODA_PURGEFID    30
-#define CODA_OPEN_BY_PATH 31
-#define CODA_RESOLVE     32
-#define CODA_REINTEGRATE 33
-#define CODA_NCALLS 34
-
-#define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
-
-#define VC_MAXDATASIZE     8192
-#define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\
-                            VC_MAXDATASIZE  
-
-#define CIOC_KERNEL_VERSION _IOWR('c', 10, sizeof (int))
-#if    0
-       /* don't care about kernel version number */
-#define CODA_KERNEL_VERSION 0
-       /* The old venus 4.6 compatible interface */
-#define CODA_KERNEL_VERSION 1
-#endif
-       /* venus_lookup gets an extra parameter to aid windows.*/
-#define CODA_KERNEL_VERSION 2
-
-/*
- *        Venus <-> Coda  RPC arguments
- */
-struct coda_in_hdr {
-    unsigned long opcode;
-    unsigned long unique;          /* Keep multiple outstanding msgs distinct */
-    u_short pid;                   /* Common to all */
-    u_short pgid;                  /* Common to all */
-    u_short sid;                    /* Common to all */
-    struct coda_cred cred;         /* Common to all */
-};
-
-/* Really important that opcode and unique are 1st two fields! */
-struct coda_out_hdr {
-    unsigned long opcode;
-    unsigned long unique;      
-    unsigned long result;
-};
-
-/* coda_root: NO_IN */
-struct coda_root_out {
-    struct coda_out_hdr oh;
-    ViceFid VFid;
-};
-
-struct coda_root_in {
-    struct coda_in_hdr in;
-};
-
-/* coda_sync: */
-/* Nothing needed for coda_sync */
-
-/* coda_open: */
-struct coda_open_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        flags;
-};
-
-struct coda_open_out {
-    struct coda_out_hdr oh;
-    cdev_t     dev;
-    ino_t      inode;
-};
-
-
-/* coda_close: */
-struct coda_close_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        flags;
-};
-
-struct coda_close_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_ioctl: */
-struct coda_ioctl_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-    int        cmd;
-    int        len;
-    int        rwflag;
-    char *data;                        /* Place holder for data. */
-};
-
-struct coda_ioctl_out {
-    struct coda_out_hdr oh;
-    int        len;
-    caddr_t    data;           /* Place holder for data. */
-};
-
-
-/* coda_getattr: */
-struct coda_getattr_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-};
-
-struct coda_getattr_out {
-    struct coda_out_hdr oh;
-    struct coda_vattr attr;
-};
-
-
-/* coda_setattr: NO_OUT */
-struct coda_setattr_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-    struct coda_vattr attr;
-};
-
-struct coda_setattr_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_access: NO_OUT */
-struct coda_access_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        flags;
-};
-
-struct coda_access_out {
-    struct coda_out_hdr out;
-};
-
-
-/* lookup flags */
-#define CLU_CASE_SENSITIVE     0x01
-#define CLU_CASE_INSENSITIVE   0x02
-
-/* coda_lookup: */
-struct  coda_lookup_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int         name;          /* Place holder for data. */
-    int         flags; 
-};
-
-struct coda_lookup_out {
-    struct coda_out_hdr oh;
-    ViceFid VFid;
-    int        vtype;
-};
-
-
-/* coda_create: */
-struct coda_create_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-    struct coda_vattr attr;
-    int excl;
-    int mode;
-    int        name;           /* Place holder for data. */
-};
-
-struct coda_create_out {
-    struct coda_out_hdr oh;
-    ViceFid VFid;
-    struct coda_vattr attr;
-};
-
-
-/* coda_remove: NO_OUT */
-struct coda_remove_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int name;          /* Place holder for data. */
-};
-
-struct coda_remove_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_link: NO_OUT */
-struct coda_link_in {
-    struct coda_in_hdr ih;
-    ViceFid sourceFid;          /* cnode to link *to* */
-    ViceFid destFid;            /* Directory in which to place link */
-    int tname;         /* Place holder for data. */
-};
-
-struct coda_link_out {
-    struct coda_out_hdr out;
-};
-
-
-/* coda_rename: NO_OUT */
-struct coda_rename_in {
-    struct coda_in_hdr ih;
-    ViceFid    sourceFid;
-    int        srcname;
-    ViceFid destFid;
-    int        destname;
-};
-
-struct coda_rename_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_mkdir: */
-struct coda_mkdir_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    struct coda_vattr attr;
-    int           name;                /* Place holder for data. */
-};
-
-struct coda_mkdir_out {
-    struct coda_out_hdr oh;
-    ViceFid VFid;
-    struct coda_vattr attr;
-};
-
-
-/* coda_rmdir: NO_OUT */
-struct coda_rmdir_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int name;          /* Place holder for data. */
-};
-
-struct coda_rmdir_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_readdir: */
-struct coda_readdir_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        count;
-    int        offset;
-};
-
-struct coda_readdir_out {
-    struct coda_out_hdr oh;
-    int        size;
-    caddr_t    data;           /* Place holder for data. */
-};
-
-/* coda_symlink: NO_OUT */
-struct coda_symlink_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;          /* Directory to put symlink in */
-    int srcname;
-    struct coda_vattr attr;
-    int tname;
-};
-
-struct coda_symlink_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_readlink: */
-struct coda_readlink_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-};
-
-struct coda_readlink_out {
-    struct coda_out_hdr oh;
-    int        count;
-    caddr_t    data;           /* Place holder for data. */
-};
-
-
-/* coda_fsync: NO_OUT */
-struct coda_fsync_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-};
-
-struct coda_fsync_out {
-    struct coda_out_hdr out;
-};
-
-/* coda_inactive: NO_OUT */
-struct coda_inactive_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-};
-
-/* coda_vget: */
-struct coda_vget_in {
-    struct coda_in_hdr ih;
-    ViceFid VFid;
-};
-
-struct coda_vget_out {
-    struct coda_out_hdr oh;
-    ViceFid VFid;
-    int        vtype;
-};
-
-
-/* CODA_SIGNAL is out-of-band, doesn't need data. */
-/* CODA_INVALIDATE is a venus->kernel call */
-/* CODA_FLUSH is a venus->kernel call */
-
-/* coda_purgeuser: */
-/* CODA_PURGEUSER is a venus->kernel call */
-struct coda_purgeuser_out {
-    struct coda_out_hdr oh;
-    struct coda_cred cred;
-};
-
-/* coda_zapfile: */
-/* CODA_ZAPFILE is a venus->kernel call */
-struct coda_zapfile_out {  
-    struct coda_out_hdr oh;
-    ViceFid CodaFid;
-};
-
-/* coda_zapdir: */
-/* CODA_ZAPDIR is a venus->kernel call */      
-struct coda_zapdir_out {         
-    struct coda_out_hdr oh;
-    ViceFid CodaFid;
-};
-
-/* coda_zapnode: */
-/* CODA_ZAPVNODE is a venus->kernel call */    
-struct coda_zapvnode_out { 
-    struct coda_out_hdr oh;
-    struct coda_cred cred;
-    ViceFid VFid;
-};
-
-/* coda_purgefid: */
-/* CODA_PURGEFID is a venus->kernel call */    
-struct coda_purgefid_out { 
-    struct coda_out_hdr oh;
-    ViceFid CodaFid;
-};
-
-/* coda_rdwr: */
-struct coda_rdwr_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        rwflag;
-    int        count;
-    int        offset;
-    int        ioflag;
-    caddr_t    data;           /* Place holder for data. */    
-};
-
-struct coda_rdwr_out {
-    struct coda_out_hdr oh;
-    int        rwflag;
-    int        count;
-    caddr_t    data;   /* Place holder for data. */
-};
-
-
-/* coda_replace: */
-/* CODA_REPLACE is a venus->kernel call */     
-struct coda_replace_out { /* coda_replace is a venus->kernel call */
-    struct coda_out_hdr oh;
-    ViceFid NewFid;
-    ViceFid OldFid;
-};
-
-/* coda_open_by_path: */
-struct coda_open_by_path_in {
-    struct coda_in_hdr ih;
-    ViceFid    VFid;
-    int        flags;
-};
-
-struct coda_open_by_path_out {
-    struct coda_out_hdr oh;
-       int path;
-};
-
-/* 
- * Occasionally, we don't cache the fid returned by CODA_LOOKUP. 
- * For instance, if the fid is inconsistent. 
- * This case is handled by setting the top bit of the type result parameter.
- */
-#define CODA_NOCACHE          0x80000000
-
-union inputArgs {
-    struct coda_in_hdr ih;             /* NB: every struct below begins with an ih */
-    struct coda_open_in coda_open;
-    struct coda_close_in coda_close;
-    struct coda_ioctl_in coda_ioctl;
-    struct coda_getattr_in coda_getattr;
-    struct coda_setattr_in coda_setattr;
-    struct coda_access_in coda_access;
-    struct coda_lookup_in coda_lookup;
-    struct coda_create_in coda_create;
-    struct coda_remove_in coda_remove;
-    struct coda_link_in coda_link;
-    struct coda_rename_in coda_rename;
-    struct coda_mkdir_in coda_mkdir;
-    struct coda_rmdir_in coda_rmdir;
-    struct coda_readdir_in coda_readdir;
-    struct coda_symlink_in coda_symlink;
-    struct coda_readlink_in coda_readlink;
-    struct coda_fsync_in coda_fsync;
-    struct coda_inactive_in coda_inactive;
-    struct coda_vget_in coda_vget;
-    struct coda_rdwr_in coda_rdwr;
-       struct coda_open_by_path_in coda_open_by_path;
-};
-
-union outputArgs {
-    struct coda_out_hdr oh;            /* NB: every struct below begins with an oh */
-    struct coda_root_out coda_root;
-    struct coda_open_out coda_open;
-    struct coda_ioctl_out coda_ioctl;
-    struct coda_getattr_out coda_getattr;
-    struct coda_lookup_out coda_lookup;
-    struct coda_create_out coda_create;
-    struct coda_mkdir_out coda_mkdir;
-    struct coda_readdir_out coda_readdir;
-    struct coda_readlink_out coda_readlink;
-    struct coda_vget_out coda_vget;
-    struct coda_purgeuser_out coda_purgeuser;
-    struct coda_zapfile_out coda_zapfile;
-    struct coda_zapdir_out coda_zapdir;
-    struct coda_zapvnode_out coda_zapvnode;
-    struct coda_purgefid_out coda_purgefid;
-    struct coda_rdwr_out coda_rdwr;
-    struct coda_replace_out coda_replace;
-       struct coda_open_by_path_out coda_open_by_path;
-};    
-
-union coda_downcalls {
-    /* CODA_INVALIDATE is a venus->kernel call */
-    /* CODA_FLUSH is a venus->kernel call */
-    struct coda_purgeuser_out purgeuser;
-    struct coda_zapfile_out zapfile;
-    struct coda_zapdir_out zapdir;
-    struct coda_zapvnode_out zapvnode;
-    struct coda_purgefid_out purgefid;
-    struct coda_replace_out replace;
-};
-
-
-/*
- * Used for identifying usage of "Control" and pioctls
- */
-
-#define PIOCPARM_MASK 0x0000ffff
-struct ViceIoctl {
-        caddr_t in, out;        /* Data to be transferred in, or out */
-        short in_size;          /* Size of input buffer <= 2K */
-        short out_size;         /* Maximum size of output buffer, <= 2K */
-};
-
-#if defined(__CYGWIN32__) || defined(DJGPP)
-struct PioctlData {
-       unsigned long cmd;
-        const char *path;
-        int follow;
-        struct ViceIoctl vi;
-};
-#else
-struct PioctlData {
-        const char *path;
-        int follow;
-        struct ViceIoctl vi;
-};
-#endif
-
-#define        CODA_CONTROL            ".CONTROL"
-#define CODA_CONTROLLEN           8
-#define        CTL_VOL                 -1
-#define        CTL_VNO                 -1
-#define        CTL_UNI                 -1
-#define CTL_INO                 -1
-#define        CTL_FILE                "/coda/.CONTROL"
-
-
-#define        IS_CTL_FID(fidp)        ((fidp)->Volume == CTL_VOL &&\
-                                (fidp)->Vnode == CTL_VNO &&\
-                                (fidp)->Unique == CTL_UNI)
-#endif 
-
diff --git a/sys/vfs/coda/coda_fbsd.c b/sys/vfs/coda/coda_fbsd.c
deleted file mode 100644 (file)
index 4465c9a..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_fbsd.cr,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_fbsd.c,v 1.18 1999/09/25 18:23:43 phk Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_fbsd.c,v 1.13 2006/07/28 02:17:41 dillon Exp $
- * 
- */
-
-#include "use_vcoda.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/conf.h>
-#include <sys/device.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/fcntl.h>
-#include <sys/ucred.h>
-#include <sys/vnode.h>
-
-#include <vm/vm.h>
-#include <vm/vnode_pager.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_vnops.h"
-#include "coda_psdev.h"
-
-/* 
-   From: "Jordan K. Hubbard" <jkh@time.cdrom.com>
-   Subject: Re: New 3.0 SNAPshot CDROM about ready for production.. 
-   To: "Robert.V.Baron" <rvb@GLUCK.CODA.CS.CMU.EDU>
-   Date: Fri, 20 Feb 1998 15:57:01 -0800
-
-   > Also I need a character device major number. (and might want to reserve
-   > a block of 10 syscalls.)
-
-   Just one char device number?  No block devices?  Very well, cdev 93 is yours!
-*/
-
-#define VC_DEV_NO      93
-
-static struct dev_ops coda_dev_ops = {
-       { "Coda", VC_DEV_NO, 0 },
-       .d_open =       vc_nb_open,
-       .d_close =      vc_nb_close,
-       .d_read =       vc_nb_read,
-       .d_write =      vc_nb_write,
-       .d_ioctl =      vc_nb_ioctl,
-       .d_poll =       vc_nb_poll,
-};
-
-int     vcdebug = 1;
-#define VCDEBUG if (vcdebug) printf
-
-static int
-codadev_modevent(module_t mod, int type, void *data)
-{
-       switch (type) {
-       case MOD_LOAD:
-               dev_ops_add(&coda_dev_ops, 0, 0);
-               break;
-       case MOD_UNLOAD:
-               dev_ops_remove(&coda_dev_ops, 0, 0);
-               break;
-       default:
-               break;
-       }
-       return 0;
-}
-static moduledata_t codadev_mod = {
-       "codadev",
-       codadev_modevent,
-       NULL
-};
-DECLARE_MODULE(codadev, codadev_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+VC_DEV_NO);
-
-int
-coda_fbsd_getpages(struct vop_getpages_args *ap)
-{
-    int ret = 0;
-
-    /* ??? a_offset */
-    ret = vnode_pager_generic_getpages(ap->a_vp, ap->a_m, ap->a_count,
-                                      ap->a_reqpage);
-    return ret;
-}
-
-int
-coda_fbsd_putpages(struct vop_putpages_args *ap)
-{
-       /*??? a_offset */
-       return vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count,
-               ap->a_sync, ap->a_rtvals);
-}
-
diff --git a/sys/vfs/coda/coda_io.h b/sys/vfs/coda/coda_io.h
deleted file mode 100644 (file)
index 4f61017..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_io.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_io.h,v 1.6 1999/08/28 00:40:53 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_io.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon University.
- * Contributers include David Steere, James Kistler, and M. Satyanarayanan.
- */
-
-#ifndef _CODAIO_H_
-#define _CODAIO_H_
-
-/* Define ioctl commands for vcioctl, /dev/cfs */
-
-#define CODARESIZE    _IOW('c', 1, struct coda_resize ) /* Resize CODA NameCache */
-#define CODASTATS      _IO('c', 2)                      /* Collect stats */
-#define CODAPRINT      _IO('c', 3)                      /* Print Cache */
-#define CODATEST       _IO('c', 4)                      /* Print Cache */
-
-struct coda_resize { int hashsize, heapsize; };
-
-#endif
diff --git a/sys/vfs/coda/coda_kernel.h b/sys/vfs/coda/coda_kernel.h
deleted file mode 100644 (file)
index 91c59d2..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_kernel.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_kernel.h,v 1.4 1999/08/28 00:40:53 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_kernel.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-/* Macros to manipulate the queue */
-#ifndef INIT_QUEUE
-struct queue {
-    struct queue *forw, *back;
-};
-
-#define INIT_QUEUE(head)                     \
-do {                                         \
-    (head).forw = (struct queue *)&(head);   \
-    (head).back = (struct queue *)&(head);   \
-} while (0)
-
-#define GETNEXT(head) (head).forw
-
-#define EMPTY(head) ((head).forw == &(head))
-
-#define EOQ(el, head) ((struct queue *)(el) == (struct queue *)&(head))
-                  
-#define INSQUE(el, head)                             \
-do {                                                 \
-       (el).forw = ((head).back)->forw;             \
-       (el).back = (head).back;                     \
-       ((head).back)->forw = (struct queue *)&(el); \
-       (head).back = (struct queue *)&(el);         \
-} while (0)
-
-#define REMQUE(el)                         \
-do {                                       \
-       ((el).forw)->back = (el).back;     \
-       (el).back->forw = (el).forw;       \
-}  while (0)
-
-#endif
diff --git a/sys/vfs/coda/coda_namecache.c b/sys/vfs/coda/coda_namecache.c
deleted file mode 100644 (file)
index 2f5252d..0000000
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_namecache.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_namecache.c,v 1.10 1999/08/28 00:40:53 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_namecache.c,v 1.6 2004/03/31 02:34:37 cpressey Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon University.
- * Contributers include David Steere, James Kistler, and M. Satyanarayanan.
- */
-
-/*
- * This module contains the routines to implement the CODA name cache. The
- * purpose of this cache is to reduce the cost of translating pathnames 
- * into Vice FIDs. Each entry in the cache contains the name of the file,
- * the vnode (FID) of the parent directory, and the cred structure of the
- * user accessing the file.
- *
- * The first time a file is accessed, it is looked up by the local Venus
- * which first insures that the user has access to the file. In addition
- * we are guaranteed that Venus will invalidate any name cache entries in
- * case the user no longer should be able to access the file. For these
- * reasons we do not need to keep access list information as well as a
- * cred structure for each entry.
- *
- * The table can be accessed through the routines cnc_init(), cnc_enter(),
- * cnc_lookup(), cnc_rmfidcred(), cnc_rmfid(), cnc_rmcred(), and cnc_purge().
- * There are several other routines which aid in the implementation of the
- * hash table.
- */
-
-/*
- * NOTES: rvb@cs
- * 1.  The name cache holds a reference to every vnode in it.  Hence files can not be
- *      closed or made inactive until they are released.
- * 2.  coda_nc_name(cp) was added to get a name for a cnode pointer for debugging.
- * 3.  coda_nc_find() has debug code to detect when entries are stored with different
- *      credentials.  We don't understand yet, if/how entries are NOT EQ but still
- *      EQUAL
- * 4.  I wonder if this name cache could be replace by the vnode name cache.
- *     The latter has no zapping functions, so probably not.
- */
-
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/malloc.h>
-#include <sys/ucred.h>
-#include <sys/select.h>
-
-#ifndef insque
-#include <sys/systm.h>
-#endif /* insque */
-
-#include <vm/vm.h>
-#include <vm/vm_object.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_namecache.h"
-
-#ifdef DEBUG
-#include "coda_vnops.h"
-#endif
-
-/* 
- * Declaration of the name cache data structure.
- */
-
-int    coda_nc_use = 1;                         /* Indicate use of CODA Name Cache */
-int    coda_nc_size = CODA_NC_CACHESIZE;        /* size of the cache */
-int    coda_nc_hashsize = CODA_NC_HASHSIZE; /* size of the primary hash */
-
-struct         coda_cache *coda_nc_heap;       /* pointer to the cache entries */
-struct coda_hash  *coda_nc_hash;       /* hash table of coda_cache pointers */
-struct coda_lru   coda_nc_lru;         /* head of lru chain */
-
-struct coda_nc_statistics coda_nc_stat;        /* Keep various stats */
-
-/* 
- * for testing purposes
- */
-int coda_nc_debug = 0;
-
-/*
- * Entry points for the CODA Name Cache
- */
-static struct coda_cache *coda_nc_find(struct cnode *dcp, const char *name, int namelen,
-       struct ucred *cred, int hash);
-static void coda_nc_remove(struct coda_cache *cncp, enum dc_status dcstat);
-
-/*  
- * Initialize the cache, the LRU structure and the Hash structure(s)
- */
-
-#define TOTAL_CACHE_SIZE       (sizeof(struct coda_cache) * coda_nc_size)
-#define TOTAL_HASH_SIZE        (sizeof(struct coda_hash)  * coda_nc_hashsize)
-
-int coda_nc_initialized = 0;      /* Initially the cache has not been initialized */
-
-void
-coda_nc_init(void)
-{
-    int i;
-
-    /* zero the statistics structure */
-    
-    bzero(&coda_nc_stat, (sizeof(struct coda_nc_statistics)));
-
-#ifdef CODA_VERBOSE
-    printf("CODA NAME CACHE: CACHE %d, HASH TBL %d\n", CODA_NC_CACHESIZE, CODA_NC_HASHSIZE);
-#endif
-    CODA_ALLOC(coda_nc_heap, struct coda_cache *, TOTAL_CACHE_SIZE);
-    CODA_ALLOC(coda_nc_hash, struct coda_hash *, TOTAL_HASH_SIZE);
-    
-    coda_nc_lru.lru_next = 
-       coda_nc_lru.lru_prev = (struct coda_cache *)LRU_PART(&coda_nc_lru);
-    
-    
-    for (i=0; i < coda_nc_size; i++) { /* initialize the heap */
-       CODA_NC_LRUINS(&coda_nc_heap[i], &coda_nc_lru);
-       CODA_NC_HSHNUL(&coda_nc_heap[i]);
-       coda_nc_heap[i].cp = coda_nc_heap[i].dcp = (struct cnode *)0;
-    }
-    
-    for (i=0; i < coda_nc_hashsize; i++) {     /* initialize the hashtable */
-       CODA_NC_HSHNUL((struct coda_cache *)&coda_nc_hash[i]);
-    }
-    
-    coda_nc_initialized++;
-}
-
-/*
- * Auxillary routines -- shouldn't be entry points
- */
-
-static struct coda_cache *
-coda_nc_find(struct cnode *dcp, const char *name, int namelen,
-            struct ucred *cred, int hash)
-{
-       /* 
-        * hash to find the appropriate bucket, look through the chain
-        * for the right entry (especially right cred, unless cred == 0) 
-        */
-       struct coda_cache *cncp;
-       int count = 1;
-
-       CODA_NC_DEBUG(CODA_NC_FIND, 
-                   myprintf(("coda_nc_find(dcp %p, name %s, len %d, cred %p, hash %d\n",
-                          dcp, name, namelen, cred, hash));)
-
-       for (cncp = coda_nc_hash[hash].hash_next; 
-            cncp != (struct coda_cache *)&coda_nc_hash[hash];
-            cncp = cncp->hash_next, count++) 
-       {
-
-           if ((CODA_NAMEMATCH(cncp, name, namelen, dcp)) &&
-               ((cred == 0) || (cncp->cred == cred))) 
-           { 
-               /* compare cr_uid instead */
-               coda_nc_stat.Search_len += count;
-               return(cncp);
-           }
-#ifdef DEBUG
-           else if (CODA_NAMEMATCH(cncp, name, namelen, dcp)) {
-               printf("coda_nc_find: name %s, new cred = %p, cred = %p\n",
-                       name, cred, cncp->cred);
-               printf("nref %d, nuid %d, ngid %d // oref %d, ocred %d, ogid %d\n",
-                       cred->cr_ref, cred->cr_uid, cred->cr_gid,
-                       cncp->cred->cr_ref, cncp->cred->cr_uid, cncp->cred->cr_gid);
-               print_cred(cred);
-               print_cred(cncp->cred);
-           }
-#endif
-       }
-
-       return((struct coda_cache *)0);
-}
-
-/*
- * Enter a new (dir cnode, name) pair into the cache, updating the
- * LRU and Hash as needed.
- */
-void
-coda_nc_enter(struct cnode *dcp, const char *name, int namelen,
-             struct ucred *cred, struct cnode *cp)
-{
-    struct coda_cache *cncp;
-    int hash;
-    
-    if (coda_nc_use == 0)                      /* Cache is off */
-       return;
-    
-    CODA_NC_DEBUG(CODA_NC_ENTER, 
-               myprintf(("Enter: dcp %p cp %p name %s cred %p \n",
-                      dcp, cp, name, cred)); )
-       
-    if (namelen > CODA_NC_NAMELEN) {
-       CODA_NC_DEBUG(CODA_NC_ENTER, 
-                   myprintf(("long name enter %s\n",name));)
-           coda_nc_stat.long_name_enters++;    /* record stats */
-       return;
-    }
-    
-    hash = CODA_NC_HASH(name, namelen, dcp);
-    cncp = coda_nc_find(dcp, name, namelen, cred, hash);
-    if (cncp != (struct coda_cache *) 0) {     
-       coda_nc_stat.dbl_enters++;              /* duplicate entry */
-       return;
-    }
-    
-    coda_nc_stat.enters++;             /* record the enters statistic */
-    
-    /* Grab the next element in the lru chain */
-    cncp = CODA_NC_LRUGET(coda_nc_lru);
-    
-    CODA_NC_LRUREM(cncp);      /* remove it from the lists */
-    
-    if (CODA_NC_VALID(cncp)) {
-       /* Seems really ugly, but we have to decrement the appropriate
-          hash bucket length here, so we have to find the hash bucket
-          */
-       coda_nc_hash[CODA_NC_HASH(cncp->name, cncp->namelen, cncp->dcp)].length--;
-       
-       coda_nc_stat.lru_rm++;  /* zapped a valid entry */
-       CODA_NC_HSHREM(cncp);
-       vrele(CTOV(cncp->dcp)); 
-       vrele(CTOV(cncp->cp));
-       crfree(cncp->cred);
-    }
-    
-    /*
-     * Put a hold on the current vnodes and fill in the cache entry.
-     */
-    vref(CTOV(cp));
-    vref(CTOV(dcp));
-    cncp->dcp = dcp;
-    cncp->cp = cp;
-    cncp->namelen = namelen;
-    cncp->cred = crhold(cred);
-    
-    bcopy(name, cncp->name, (unsigned)namelen);
-    
-    /* Insert into the lru and hash chains. */
-    
-    CODA_NC_LRUINS(cncp, &coda_nc_lru);
-    CODA_NC_HSHINS(cncp, &coda_nc_hash[hash]);
-    coda_nc_hash[hash].length++;                      /* Used for tuning */
-    
-    CODA_NC_DEBUG(CODA_NC_PRINTCODA_NC, print_coda_nc(); )
-}
-
-/*
- * Find the (dir cnode, name) pair in the cache, if it's cred
- * matches the input, return it, otherwise return 0
- */
-struct cnode *
-coda_nc_lookup(struct cnode *dcp, const char *name, int namelen,
-              struct ucred *cred)
-{
-       int hash;
-       struct coda_cache *cncp;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return((struct cnode *) 0);
-
-       if (namelen > CODA_NC_NAMELEN) {
-               CODA_NC_DEBUG(CODA_NC_LOOKUP, 
-                           myprintf(("long name lookup %s\n",name));)
-               coda_nc_stat.long_name_lookups++;               /* record stats */
-               return((struct cnode *) 0);
-       }
-
-       /* Use the hash function to locate the starting point,
-          then the search routine to go down the list looking for
-          the correct cred.
-        */
-
-       hash = CODA_NC_HASH(name, namelen, dcp);
-       cncp = coda_nc_find(dcp, name, namelen, cred, hash);
-       if (cncp == (struct coda_cache *) 0) {
-               coda_nc_stat.misses++;                  /* record miss */
-               return((struct cnode *) 0);
-       }
-
-       coda_nc_stat.hits++;
-
-       /* put this entry at the end of the LRU */
-       CODA_NC_LRUREM(cncp);
-       CODA_NC_LRUINS(cncp, &coda_nc_lru);
-
-       /* move it to the front of the hash chain */
-       /* don't need to change the hash bucket length */
-       CODA_NC_HSHREM(cncp);
-       CODA_NC_HSHINS(cncp, &coda_nc_hash[hash]);
-
-       CODA_NC_DEBUG(CODA_NC_LOOKUP, 
-               printf("lookup: dcp %p, name %s, cred %p = cp %p\n",
-                       dcp, name, cred, cncp->cp); )
-
-       return(cncp->cp);
-}
-
-static void
-coda_nc_remove(struct coda_cache *cncp, enum dc_status dcstat)
-{
-       /* 
-        * remove an entry -- vrele(cncp->dcp, cp), crfree(cred),
-        * remove it from it's hash chain, and
-        * place it at the head of the lru list.
-        */
-        CODA_NC_DEBUG(CODA_NC_REMOVE,
-                   myprintf(("coda_nc_remove %s from parent %lx.%lx.%lx\n",
-                          cncp->name, (cncp->dcp)->c_fid.Volume,
-                          (cncp->dcp)->c_fid.Vnode, (cncp->dcp)->c_fid.Unique));)
-
-       CODA_NC_HSHREM(cncp);
-
-       CODA_NC_HSHNUL(cncp);           /* have it be a null chain */
-       if ((dcstat == IS_DOWNCALL) && (CTOV(cncp->dcp)->v_usecount == 1)) {
-               cncp->dcp->c_flags |= C_PURGING;
-       }
-       vrele(CTOV(cncp->dcp)); 
-
-       if ((dcstat == IS_DOWNCALL) && (CTOV(cncp->cp)->v_usecount == 1)) {
-               cncp->cp->c_flags |= C_PURGING;
-       }
-       vrele(CTOV(cncp->cp)); 
-
-       crfree(cncp->cred); 
-       bzero(DATA_PART(cncp),DATA_SIZE);
-
-       /* Put the null entry just after the least-recently-used entry */
-       /* LRU_TOP adjusts the pointer to point to the top of the structure. */
-       CODA_NC_LRUREM(cncp);
-       CODA_NC_LRUINS(cncp, LRU_TOP(coda_nc_lru.lru_prev));
-}
-
-/*
- * Remove all entries with a parent which has the input fid.
- */
-void
-coda_nc_zapParentfid(ViceFid *fid, enum dc_status dcstat)
-{
-       /* To get to a specific fid, we might either have another hashing
-          function or do a sequential search through the cache for the
-          appropriate entries. The later may be acceptable since I don't
-          think callbacks or whatever Case 1 covers are frequent occurences.
-        */
-       struct coda_cache *cncp, *ncncp;
-       int i;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       CODA_NC_DEBUG(CODA_NC_ZAPPFID, 
-               myprintf(("ZapParent: fid 0x%lx, 0x%lx, 0x%lx \n",
-                       fid->Volume, fid->Vnode, fid->Unique)); )
-
-       coda_nc_stat.zapPfids++;
-
-       for (i = 0; i < coda_nc_hashsize; i++) {
-
-               /*
-                * Need to save the hash_next pointer in case we remove the
-                * entry. remove causes hash_next to point to itself.
-                */
-
-               for (cncp = coda_nc_hash[i].hash_next; 
-                    cncp != (struct coda_cache *)&coda_nc_hash[i];
-                    cncp = ncncp) {
-                       ncncp = cncp->hash_next;
-                       if ((cncp->dcp->c_fid.Volume == fid->Volume) &&
-                           (cncp->dcp->c_fid.Vnode == fid->Vnode)   &&
-                           (cncp->dcp->c_fid.Unique == fid->Unique)) {
-                               coda_nc_hash[i].length--;      /* Used for tuning */
-                               coda_nc_remove(cncp, dcstat); 
-                       }
-               }
-       }
-}
-
-
-/*
- * Remove all entries which have the same fid as the input
- */
-void
-coda_nc_zapfid(ViceFid *fid, enum dc_status dcstat)
-{
-       /* See comment for zapParentfid. This routine will be used
-          if attributes are being cached. 
-        */
-       struct coda_cache *cncp, *ncncp;
-       int i;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       CODA_NC_DEBUG(CODA_NC_ZAPFID, 
-               myprintf(("Zapfid: fid 0x%lx, 0x%lx, 0x%lx \n",
-                       fid->Volume, fid->Vnode, fid->Unique)); )
-
-       coda_nc_stat.zapFids++;
-
-       for (i = 0; i < coda_nc_hashsize; i++) {
-               for (cncp = coda_nc_hash[i].hash_next; 
-                    cncp != (struct coda_cache *)&coda_nc_hash[i];
-                    cncp = ncncp) {
-                       ncncp = cncp->hash_next;
-                       if ((cncp->cp->c_fid.Volume == fid->Volume) &&
-                           (cncp->cp->c_fid.Vnode == fid->Vnode)   &&
-                           (cncp->cp->c_fid.Unique == fid->Unique)) {
-                               coda_nc_hash[i].length--;     /* Used for tuning */
-                               coda_nc_remove(cncp, dcstat); 
-                       }
-               }
-       }
-}
-
-/* 
- * Remove all entries which match the fid and the cred
- */
-void
-coda_nc_zapvnode(ViceFid *fid, struct ucred *cred, enum dc_status dcstat)      
-{
-       /* See comment for zapfid. I don't think that one would ever
-          want to zap a file with a specific cred from the kernel.
-          We'll leave this one unimplemented.
-        */
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       CODA_NC_DEBUG(CODA_NC_ZAPVNODE, 
-               myprintf(("Zapvnode: fid 0x%lx, 0x%lx, 0x%lx cred %p\n",
-                         fid->Volume, fid->Vnode, fid->Unique, cred)); )
-
-}
-
-/*
- * Remove all entries which have the (dir vnode, name) pair
- */
-void
-coda_nc_zapfile(struct cnode *dcp, const char *name, int namelen)
-{
-       /* use the hash function to locate the file, then zap all
-          entries of it regardless of the cred.
-        */
-       struct coda_cache *cncp;
-       int hash;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       CODA_NC_DEBUG(CODA_NC_ZAPFILE, 
-               myprintf(("Zapfile: dcp %p name %s \n",
-                         dcp, name)); )
-
-       if (namelen > CODA_NC_NAMELEN) {
-               coda_nc_stat.long_remove++;             /* record stats */
-               return;
-       }
-
-       coda_nc_stat.zapFile++;
-
-       hash = CODA_NC_HASH(name, namelen, dcp);
-       cncp = coda_nc_find(dcp, name, namelen, 0, hash);
-
-       while (cncp) {
-         coda_nc_hash[hash].length--;                 /* Used for tuning */
-
-         coda_nc_remove(cncp, NOT_DOWNCALL);
-         cncp = coda_nc_find(dcp, name, namelen, 0, hash);
-       }
-}
-
-/* 
- * Remove all the entries for a particular user. Used when tokens expire.
- * A user is determined by his/her effective user id (id_uid).
- */
-void
-coda_nc_purge_user(vuid_t uid, enum dc_status dcstat)
-{
-       /* 
-        * I think the best approach is to go through the entire cache
-        * via HASH or whatever and zap all entries which match the
-        * input cred. Or just flush the whole cache.  It might be
-        * best to go through on basis of LRU since cache will almost
-        * always be full and LRU is more straightforward.  
-        */
-
-       struct coda_cache *cncp, *ncncp;
-       int hash;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       CODA_NC_DEBUG(CODA_NC_PURGEUSER, 
-               myprintf(("ZapDude: uid %x\n", uid)); )
-       coda_nc_stat.zapUsers++;
-
-       for (cncp = CODA_NC_LRUGET(coda_nc_lru);
-            cncp != (struct coda_cache *)(&coda_nc_lru);
-            cncp = ncncp) {
-               ncncp = CODA_NC_LRUGET(*cncp);
-
-               if ((CODA_NC_VALID(cncp)) &&
-                  ((cncp->cred)->cr_uid == uid)) {
-                       /* Seems really ugly, but we have to decrement the appropriate
-                          hash bucket length here, so we have to find the hash bucket
-                          */
-                       hash = CODA_NC_HASH(cncp->name, cncp->namelen, cncp->dcp);
-                       coda_nc_hash[hash].length--;     /* For performance tuning */
-
-                       coda_nc_remove(cncp, dcstat); 
-               }
-       }
-}
-
-/*
- * Flush the entire name cache. In response to a flush of the Venus cache.
- */
-void
-coda_nc_flush(enum dc_status dcstat)
-{
-       /* One option is to deallocate the current name cache and
-          call init to start again. Or just deallocate, then rebuild.
-          Or again, we could just go through the array and zero the 
-          appropriate fields. 
-        */
-       
-       /* 
-        * Go through the whole lru chain and kill everything as we go.
-        * I don't use remove since that would rebuild the lru chain
-        * as it went and that seemed unneccesary.
-        */
-       struct coda_cache *cncp;
-       int i;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       coda_nc_stat.Flushes++;
-
-       for (cncp = CODA_NC_LRUGET(coda_nc_lru);
-            cncp != (struct coda_cache *)&coda_nc_lru;
-            cncp = CODA_NC_LRUGET(*cncp)) {
-               if (CODA_NC_VALID(cncp)) {
-
-                       CODA_NC_HSHREM(cncp);   /* only zero valid nodes */
-                       CODA_NC_HSHNUL(cncp);
-                       if ((dcstat == IS_DOWNCALL) 
-                           && (CTOV(cncp->dcp)->v_usecount == 1))
-                       {
-                               cncp->dcp->c_flags |= C_PURGING;
-                       }
-                       vrele(CTOV(cncp->dcp)); 
-
-                       if (CTOV(cncp->cp)->v_flag & VTEXT) {
-                           if (coda_vmflush(cncp->cp))
-                               CODADEBUG(CODA_FLUSH, 
-                                        myprintf(("coda_nc_flush: (%lx.%lx.%lx) busy\n", cncp->cp->c_fid.Volume, cncp->cp->c_fid.Vnode, cncp->cp->c_fid.Unique)); )
-                       }
-
-                       if ((dcstat == IS_DOWNCALL) 
-                           && (CTOV(cncp->cp)->v_usecount == 1))
-                       {
-                               cncp->cp->c_flags |= C_PURGING;
-                       }
-                       vrele(CTOV(cncp->cp));  
-
-                       crfree(cncp->cred); 
-                       bzero(DATA_PART(cncp),DATA_SIZE);
-               }
-       }
-
-       for (i = 0; i < coda_nc_hashsize; i++)
-         coda_nc_hash[i].length = 0;
-}
-
-/*
- * Debugging routines
- */
-
-/* 
- * This routine should print out all the hash chains to the console.
- */
-void
-print_coda_nc(void)
-{
-       int hash;
-       struct coda_cache *cncp;
-
-       for (hash = 0; hash < coda_nc_hashsize; hash++) {
-               myprintf(("\nhash %d\n",hash));
-
-               for (cncp = coda_nc_hash[hash].hash_next; 
-                    cncp != (struct coda_cache *)&coda_nc_hash[hash];
-                    cncp = cncp->hash_next) {
-                       myprintf(("cp %p dcp %p cred %p name %s\n",
-                                 cncp->cp, cncp->dcp,
-                                 cncp->cred, cncp->name));
-                    }
-       }
-}
-
-void
-coda_nc_gather_stats(void)
-{
-    int i, max = 0, sum = 0, temp, zeros = 0, ave, n;
-
-       for (i = 0; i < coda_nc_hashsize; i++) {
-         if (coda_nc_hash[i].length) {
-           sum += coda_nc_hash[i].length;
-         } else {
-           zeros++;
-         }
-
-         if (coda_nc_hash[i].length > max)
-           max = coda_nc_hash[i].length;
-       }
-
-       /*
-        * When computing the Arithmetic mean, only count slots which 
-        * are not empty in the distribution.
-        */
-        coda_nc_stat.Sum_bucket_len = sum;
-        coda_nc_stat.Num_zero_len = zeros;
-        coda_nc_stat.Max_bucket_len = max;
-
-       if ((n = coda_nc_hashsize - zeros) > 0) 
-         ave = sum / n;
-       else
-         ave = 0;
-
-       sum = 0;
-       for (i = 0; i < coda_nc_hashsize; i++) {
-         if (coda_nc_hash[i].length) {
-           temp = coda_nc_hash[i].length - ave;
-           sum += temp * temp;
-         }
-       }
-        coda_nc_stat.Sum2_bucket_len = sum;
-}
-
-/*
- * The purpose of this routine is to allow the hash and cache sizes to be
- * changed dynamically. This should only be used in controlled environments,
- * it makes no effort to lock other users from accessing the cache while it
- * is in an improper state (except by turning the cache off).
- */
-int
-coda_nc_resize(int hashsize, int heapsize, enum dc_status dcstat)
-{
-    if ((hashsize % 2) || (heapsize % 2)) { /* Illegal hash or cache sizes */
-       return(EINVAL);
-    }                 
-    
-    coda_nc_use = 0;                       /* Turn the cache off */
-    
-    coda_nc_flush(dcstat);                 /* free any cnodes in the cache */
-    
-    /* WARNING: free must happen *before* size is reset */
-    CODA_FREE(coda_nc_heap,TOTAL_CACHE_SIZE);
-    CODA_FREE(coda_nc_hash,TOTAL_HASH_SIZE);
-    
-    coda_nc_hashsize = hashsize;
-    coda_nc_size = heapsize;
-    
-    coda_nc_init();                        /* Set up a cache with the new size */
-    
-    coda_nc_use = 1;                       /* Turn the cache back on */
-    return(0);
-}
-
-#ifdef DEBUG
-char coda_nc_name_buf[CODA_MAXNAMLEN+1];
-
-void
-coda_nc_name(struct cnode *cp)
-{
-       struct coda_cache *cncp, *ncncp;
-       int i;
-
-       if (coda_nc_use == 0)                   /* Cache is off */
-               return;
-
-       for (i = 0; i < coda_nc_hashsize; i++) {
-               for (cncp = coda_nc_hash[i].hash_next; 
-                    cncp != (struct coda_cache *)&coda_nc_hash[i];
-                    cncp = ncncp) {
-                       ncncp = cncp->hash_next;
-                       if (cncp->cp == cp) {
-                               bcopy(cncp->name, coda_nc_name_buf, cncp->namelen);
-                               coda_nc_name_buf[cncp->namelen] = 0;
-                               printf(" is %s (%p,%p)@%p",
-                                       coda_nc_name_buf, cncp->cp, cncp->dcp, cncp);
-                       }
-
-               }
-       }
-}
-#endif
diff --git a/sys/vfs/coda/coda_namecache.h b/sys/vfs/coda/coda_namecache.h
deleted file mode 100644 (file)
index 5005eec..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_namecache.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_namecache.h,v 1.6 1999/08/28 00:40:53 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_namecache.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon University.
- * Contributers include David Steere, James Kistler, and M. Satyanarayanan.
- */
-
-#ifndef _CODA_NC_HEADER_
-#define _CODA_NC_HEADER_
-
-/*
- * Coda constants
- */
-#define CODA_NC_NAMELEN        15              /* longest name stored in cache */
-#define CODA_NC_CACHESIZE 256          /* Default cache size */
-#define CODA_NC_HASHSIZE       64              /* Must be multiple of 2 */
-
-/*
- * Hash function for the primary hash.
- */
-
-/* 
- * First try -- (first + last letters + length + (int)cp) mod size
- * 2nd try -- same, except dir fid.vnode instead of cp
- */
-
-#ifdef oldhash
-#define CODA_NC_HASH(name, namelen, cp) \
-       ((name[0] + name[namelen-1] + namelen + (int)(cp)) & (coda_nc_hashsize-1))
-#else
-#define CODA_NC_HASH(name, namelen, cp) \
-       ((name[0] + (name[namelen-1]<<4) + namelen + (((int)cp)>>8)) & (coda_nc_hashsize-1))
-#endif
-
-#define CODA_NAMEMATCH(cp, name, namelen, dcp) \
-       ((namelen == cp->namelen) && (dcp == cp->dcp) && \
-                (bcmp(cp->name,name,namelen) == 0))
-
-/*
- * Functions to modify the hash and lru chains.
- * insque and remque assume that the pointers are the first thing
- * in the list node, thus the trickery for lru.
- */
-
-#define CODA_NC_HSHINS(elem, pred)     insque(elem,pred)
-#define CODA_NC_HSHREM(elem)           remque(elem)
-#define CODA_NC_HSHNUL(elem)           (elem)->hash_next = \
-                                       (elem)->hash_prev = (elem)
-
-#define CODA_NC_LRUINS(elem, pred)     insque(LRU_PART(elem), LRU_PART(pred))
-#define CODA_NC_LRUREM(elem)           remque(LRU_PART(elem));
-#define CODA_NC_LRUGET(lruhead)                LRU_TOP((lruhead).lru_prev)
-
-#define CODA_NC_VALID(cncp)    (cncp->dcp != (struct cnode *)0)
-#define LRU_PART(cncp)                 (struct coda_cache *) \
-                               ((char *)cncp + (2*sizeof(struct coda_cache *)))
-#define LRU_TOP(cncp)                          (struct coda_cache *) \
-                       ((char *)cncp - (2*sizeof(struct coda_cache *)))
-#define DATA_PART(cncp)                                (struct coda_cache *) \
-                       ((char *)cncp + (4*sizeof(struct coda_cache *)))
-#define DATA_SIZE      (sizeof(struct coda_cache)-(4*sizeof(struct coda_cache *)))
-
-/*
- * Structure for an element in the CODA Name Cache.
- * NOTE: I use the position of arguments and their size in the
- * implementation of the functions CODA_NC_LRUINS, CODA_NC_LRUREM, and
- * DATA_PART.
- */
-
-struct coda_cache {    
-       struct coda_cache       *hash_next,*hash_prev;  /* Hash list */
-       struct coda_cache       *lru_next, *lru_prev;   /* LRU list */
-       struct cnode    *cp;                    /* vnode of the file */
-       struct cnode    *dcp;                   /* parent's cnode */
-       struct ucred    *cred;                  /* user credentials */
-       char            name[CODA_NC_NAMELEN];  /* segment name */
-       int             namelen;                /* length of name */
-};
-
-struct coda_lru {              /* Start of LRU chain */
-       char *dummy1, *dummy2;                  /* place holders */
-       struct coda_cache *lru_next, *lru_prev;   /* position of pointers is important */
-};
-
-
-struct coda_hash {             /* Start of Hash chain */
-       struct coda_cache *hash_next, *hash_prev; /* NOTE: chain pointers must be first */
-        int length;                             /* used for tuning purposes */
-};
-
-
-/* 
- * Symbols to aid in debugging the namecache code. Assumes the existence
- * of the variable coda_nc_debug, which is defined in cfs_namecache.c
- */
-#define CODA_NC_DEBUG(N, STMT)     { if (coda_nc_debug & (1 <<N)) { STMT } }
-
-/* Prototypes of functions exported within cfs */
-extern void coda_nc_init(void);
-extern void coda_nc_enter(struct cnode *, const char *, int, struct ucred *, struct cnode *);
-extern struct cnode *coda_nc_lookup(struct cnode *, const char *, int, struct ucred *);
-
-extern void coda_nc_zapParentfid(ViceFid *, enum dc_status);
-extern void coda_nc_zapfid(ViceFid *, enum dc_status);
-extern void coda_nc_zapvnode(ViceFid *, struct ucred *, enum dc_status);
-extern void coda_nc_zapfile(struct cnode *, const char *, int);
-extern void coda_nc_purge_user(vuid_t, enum dc_status);
-extern void coda_nc_flush(enum dc_status);
-
-extern void print_coda_nc(void);
-extern void coda_nc_gather_stats(void);
-extern int  coda_nc_resize(int, int, enum dc_status);
-extern void coda_nc_name(struct cnode *cp);
-
-/*
- * Structure to contain statistics on the cache usage
- */
-
-struct coda_nc_statistics {
-       unsigned        hits;
-       unsigned        misses;
-       unsigned        enters;
-       unsigned        dbl_enters;
-       unsigned        long_name_enters;
-       unsigned        long_name_lookups;
-       unsigned        long_remove;
-       unsigned        lru_rm;
-       unsigned        zapPfids;
-       unsigned        zapFids;
-       unsigned        zapFile;
-       unsigned        zapUsers;
-       unsigned        Flushes;
-       unsigned        Sum_bucket_len;
-       unsigned        Sum2_bucket_len;
-       unsigned        Max_bucket_len;
-       unsigned        Num_zero_len;
-       unsigned        Search_len;
-};
-
-#define CODA_NC_FIND           ((u_long) 1)
-#define CODA_NC_REMOVE         ((u_long) 2)
-#define CODA_NC_INIT           ((u_long) 3)
-#define CODA_NC_ENTER          ((u_long) 4)
-#define CODA_NC_LOOKUP         ((u_long) 5)
-#define CODA_NC_ZAPPFID                ((u_long) 6)
-#define CODA_NC_ZAPFID         ((u_long) 7)
-#define CODA_NC_ZAPVNODE               ((u_long) 8)
-#define CODA_NC_ZAPFILE                ((u_long) 9)
-#define CODA_NC_PURGEUSER              ((u_long) 10)
-#define CODA_NC_FLUSH          ((u_long) 11)
-#define CODA_NC_PRINTCODA_NC   ((u_long) 12)
-#define CODA_NC_PRINTSTATS     ((u_long) 13)
-
-#endif
diff --git a/sys/vfs/coda/coda_opstats.h b/sys/vfs/coda/coda_opstats.h
deleted file mode 100644 (file)
index 11698e4..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_opstats.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_opstats.h,v 1.5 1999/08/28 00:40:54 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_opstats.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-/*
- * operation stats: what the minicache can intercept that
- * *isn't* seen by venus.  These stats are kept to augment
- * the stats maintained by the Volume-Session mechanism.
- */
-
-/* vfsops:
- *          mount: not currently bounced to Venus
- *          umount: nope
- *          root: only first call, rest is cached.
- *          statfs: none (bogus)
- *          sync: none (bogus)
- *          vget: all
- */
-
-#define CODA_MOUNT_STATS  0
-#define CODA_UMOUNT_STATS 1
-#define CODA_ROOT_STATS   2
-#define CODA_STATFS_STATS 3
-#define CODA_SYNC_STATS   4
-#define CODA_VGET_STATS   5
-#define CODA_VFSOPS_SIZE  6
-
-/* vnodeops:
- *            open: all to venus
- *            close: all to venus
- *            rdrw: bogus.  Maybe redirected to UFS.
- *                          May call open/close for internal opens/closes
- *                          (Does exec not call open?)
- *            ioctl: causes a lookupname
- *                   passes through
- *            select: can't get there from here.
- *            getattr: can be satsified by cache
- *            setattr: all go through
- *            access: can be satisfied by cache
- *            readlink: can be satisfied by cache
- *            fsync: passes through
- *            inactive: passes through
- *            lookup: can be satisfied by cache
- *            create: passes through
- *            remove: passes through
- *            link: passes through
- *            rename: passes through
- *            mkdir: passes through
- *            rmdir: passes through
- *            symlink: passes through
- *            readdir: may be redirected to UFS
- *                     may cause an "internal" open/close
- */
-
-#define CODA_OPEN_STATS     0
-#define CODA_CLOSE_STATS    1
-#define CODA_RDWR_STATS     2
-#define CODA_IOCTL_STATS    3
-#define CODA_SELECT_STATS   4
-#define CODA_GETATTR_STATS  5
-#define CODA_SETATTR_STATS  6
-#define CODA_ACCESS_STATS   7
-#define CODA_READLINK_STATS 8
-#define CODA_FSYNC_STATS    9
-#define CODA_INACTIVE_STATS 10
-#define CODA_LOOKUP_STATS   11
-#define CODA_CREATE_STATS   12
-#define CODA_REMOVE_STATS   13
-#define CODA_LINK_STATS     14
-#define CODA_RENAME_STATS   15
-#define CODA_MKDIR_STATS    16
-#define CODA_RMDIR_STATS    17
-#define CODA_SYMLINK_STATS  18
-#define CODA_READDIR_STATS  19
-#define CODA_VNODEOPS_SIZE  20
-
-/*
- * I propose the following structres:
- */
-
-struct coda_op_stats {
-    int opcode;       /* vfs opcode */
-    long entries;     /* number of times call attempted */
-    long sat_intrn;   /* number of times call satisfied by cache */
-    long unsat_intrn; /* number of times call failed in cache, but
-                         was not bounced to venus proper. */
-    long gen_intrn;   /* number of times call generated internally */
-                      /* (do we need that?) */
-};
-
-/*
- * With each call to the minicache, we'll bump the counters whenver
- * a call is satisfied internally (through the cache or through a
- * redirect), and whenever an operation is caused internally.
- * Then, we can add the total operations caught by the minicache
- * to the world-wide totals, and leave a caveat for the specific
- * graphs later.
- */
diff --git a/sys/vfs/coda/coda_pioctl.h b/sys/vfs/coda/coda_pioctl.h
deleted file mode 100644 (file)
index d302d01..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_pioctl.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_pioctl.h,v 1.6 1999/08/28 00:40:55 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_pioctl.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1989 Carnegie-Mellon University
- * Copyright (c) 1988 Carnegie-Mellon University
- * Copyright (c) 1987 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * ITC Remote file system - vice ioctl interface module
- */
-
-/*
- *  TODO:  Find /usr/local/include/viceioctl.h.
- */
-
-#ifndef        _SYS_PIOCTL_H_
-#define _SYS_PIOCTL_H_
-
-/* The 2K limits above are a consequence of the size of the kernel buffer
-   used to buffer requests from the user to venus--2*MAXPATHLEN.
-   The buffer pointers may be null, or the counts may be 0 if there
-   are no input or output parameters
- */
-
-#define _VICEIOCTL(id)  ((unsigned int ) _IOW('V', id, struct ViceIoctl))
-
-/* Use this macro to define up to 256 vice ioctl's.  These ioctl's
-   all potentially have in/out parameters--this depends upon the
-   values in the ViceIoctl structure.  This structure is itself passed
-   into the kernel by the normal ioctl parameter passing mechanism.
- */
-
-#define _VALIDVICEIOCTL(com) (com >= _VICEIOCTL(0) && com <= _VICEIOCTL(255))
-
-#endif
diff --git a/sys/vfs/coda/coda_psdev.c b/sys/vfs/coda/coda_psdev.c
deleted file mode 100644 (file)
index f01d856..0000000
+++ /dev/null
@@ -1,659 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_psdev.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_psdev.c,v 1.13 1999/09/29 15:03:46 marcel Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_psdev.c,v 1.12 2006/07/28 02:17:41 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon
- * University.  Contributers include David Steere, James Kistler, and
- * M. Satyanarayanan.  */
-
-/* 
- * These routines define the psuedo device for communication between
- * Coda's Venus and Minicache in Mach 2.6. They used to be in cfs_subr.c, 
- * but I moved them to make it easier to port the Minicache without 
- * porting coda. -- DCS 10/12/94
- */
-
-/* These routines are the device entry points for Venus. */
-
-extern int coda_nc_initialized;    /* Set if cache has been initialized */
-
-#include "use_vcoda.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/device.h>
-#include <sys/conf.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/mount.h>
-#include <sys/file.h>
-#include <sys/ioccom.h>
-#include <sys/poll.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_namecache.h"
-#include "coda_io.h"
-#include "coda_psdev.h"
-
-#define CTL_C
-
-#ifdef CTL_C
-#include <sys/signalvar.h>
-#endif
-
-int coda_psdev_print_entry = 0;
-static
-int outstanding_upcalls = 0;
-#ifdef CTL_C
-int coda_pcatch = PCATCH;
-#else
-#endif
-
-#define ENTRY if(coda_psdev_print_entry) myprintf(("Entered %s\n",__func__))
-
-void vcodaattach(int n);
-
-struct vmsg {
-    struct queue vm_chain;
-    caddr_t     vm_data;
-    u_short     vm_flags;
-    u_short      vm_inSize;    /* Size is at most 5000 bytes */
-    u_short     vm_outSize;
-    u_short     vm_opcode;     /* copied from data to save ptr lookup */
-    int                 vm_unique;
-    caddr_t     vm_sleep;      /* Not used by Mach. */
-};
-
-#define        VM_READ     1
-#define        VM_WRITE    2
-#define        VM_INTR     4
-
-/* vcodaattach: do nothing */
-void
-vcodaattach(int n)
-{
-}
-
-int 
-vc_nb_open(struct dev_open_args *ap)
-{
-    dev_t dev = ap->a_head.a_dev;
-
-    struct vcomm *vcp;
-    
-    ENTRY;
-
-    if (minor(dev) >= NVCODA || minor(dev) < 0)
-       return(ENXIO);
-    
-    if (!coda_nc_initialized)
-       coda_nc_init();
-    
-    vcp = &coda_mnttbl[minor(dev)].mi_vcomm;
-    if (VC_OPEN(vcp))
-       return(EBUSY);
-    
-    bzero(&(vcp->vc_selproc), sizeof (struct selinfo));
-    INIT_QUEUE(vcp->vc_requests);
-    INIT_QUEUE(vcp->vc_replys);
-    MARK_VC_OPEN(vcp);
-    
-    coda_mnttbl[minor(dev)].mi_vfsp = NULL;
-    coda_mnttbl[minor(dev)].mi_rootvp = NULL;
-
-    return(0);
-}
-
-int 
-vc_nb_close (struct dev_close_args *ap)
-{
-    dev_t dev = ap->a_head.a_dev;
-    struct vcomm *vcp;
-    struct vmsg *vmp, *nvmp = NULL;
-    struct coda_mntinfo *mi;
-    int                 err;
-       
-    ENTRY;
-
-    if (minor(dev) >= NVCODA || minor(dev) < 0)
-       return(ENXIO);
-
-    mi = &coda_mnttbl[minor(dev)];
-    vcp = &(mi->mi_vcomm);
-    
-    if (!VC_OPEN(vcp))
-       panic("vcclose: not open");
-    
-    /* prevent future operations on this vfs from succeeding by auto-
-     * unmounting any vfs mounted via this device. This frees user or
-     * sysadm from having to remember where all mount points are located.
-     * Put this before WAKEUPs to avoid queuing new messages between
-     * the WAKEUP and the unmount (which can happen if we're unlucky)
-     */
-    if (!mi->mi_rootvp) {
-       /* just a simple open/close w no mount */
-       MARK_VC_CLOSED(vcp);
-       return 0;
-    }
-
-    /* Let unmount know this is for real */
-    VTOC(mi->mi_rootvp)->c_flags |= C_UNMOUNTING;
-    coda_unmounting(mi->mi_vfsp);
-
-    outstanding_upcalls = 0;
-    /* Wakeup clients so they can return. */
-    for (vmp = (struct vmsg *)GETNEXT(vcp->vc_requests);
-        !EOQ(vmp, vcp->vc_requests);
-        vmp = nvmp)
-    {
-       nvmp = (struct vmsg *)GETNEXT(vmp->vm_chain);
-       /* Free signal request messages and don't wakeup cause
-          no one is waiting. */
-       if (vmp->vm_opcode == CODA_SIGNAL) {
-           CODA_FREE((caddr_t)vmp->vm_data, (u_int)VC_IN_NO_DATA);
-           CODA_FREE((caddr_t)vmp, (u_int)sizeof(struct vmsg));
-           continue;
-       }
-       outstanding_upcalls++;  
-       wakeup(&vmp->vm_sleep);
-    }
-
-    for (vmp = (struct vmsg *)GETNEXT(vcp->vc_replys);
-        !EOQ(vmp, vcp->vc_replys);
-        vmp = (struct vmsg *)GETNEXT(vmp->vm_chain))
-    {
-       outstanding_upcalls++;  
-       wakeup(&vmp->vm_sleep);
-    }
-
-    MARK_VC_CLOSED(vcp);
-
-    if (outstanding_upcalls) {
-#ifdef CODA_VERBOSE
-       printf("presleep: outstanding_upcalls = %d\n", outstanding_upcalls);
-       tsleep(&outstanding_upcalls, 0, "coda_umount", 0);
-       printf("postsleep: outstanding_upcalls = %d\n", outstanding_upcalls);
-#else
-       tsleep(&outstanding_upcalls, 0, "coda_umount", 0);
-#endif
-    }
-
-    err = dounmount(mi->mi_vfsp, ap->a_fflag);
-    if (err)
-       myprintf(("Error %d unmounting vfs in vcclose(%d)\n", 
-                  err, minor(dev)));
-    return 0;
-}
-
-int 
-vc_nb_read(struct dev_read_args *ap)
-{
-    dev_t dev = ap->a_head.a_dev;
-    struct vcomm *vcp;
-    struct vmsg *vmp;
-    int error = 0;
-    
-    ENTRY;
-
-    if (minor(dev) >= NVCODA || minor(dev) < 0)
-       return(ENXIO);
-    
-    vcp = &coda_mnttbl[minor(dev)].mi_vcomm;
-    /* Get message at head of request queue. */
-    if (EMPTY(vcp->vc_requests))
-       return(0);      /* Nothing to read */
-    
-    vmp = (struct vmsg *)GETNEXT(vcp->vc_requests);
-    
-    /* Move the input args into userspace */
-    error = uiomove(vmp->vm_data, vmp->vm_inSize, ap->a_uio);
-    if (error) {
-       myprintf(("vcread: error (%d) on uiomove\n", error));
-       error = EINVAL;
-    }
-
-#ifdef OLD_DIAGNOSTIC    
-    if (vmp->vm_chain.forw == 0 || vmp->vm_chain.back == 0)
-       panic("vc_nb_read: bad chain");
-#endif
-
-    REMQUE(vmp->vm_chain);
-    
-    /* If request was a signal, free up the message and don't
-       enqueue it in the reply queue. */
-    if (vmp->vm_opcode == CODA_SIGNAL) {
-       if (codadebug)
-           myprintf(("vcread: signal msg (%d, %d)\n", 
-                     vmp->vm_opcode, vmp->vm_unique));
-       CODA_FREE((caddr_t)vmp->vm_data, (u_int)VC_IN_NO_DATA);
-       CODA_FREE((caddr_t)vmp, (u_int)sizeof(struct vmsg));
-       return(error);
-    }
-    
-    vmp->vm_flags |= VM_READ;
-    INSQUE(vmp->vm_chain, vcp->vc_replys);
-    
-    return(error);
-}
-
-int
-vc_nb_write(struct dev_write_args *ap)
-{
-    dev_t dev = ap->a_head.a_dev;
-    struct uio *uiop = ap->a_uio;
-
-    struct vcomm *vcp;
-    struct vmsg *vmp;
-    struct coda_out_hdr *out;
-    u_long seq;
-    u_long opcode;
-    int buf[2];
-    int error = 0;
-
-    ENTRY;
-
-    if (minor(dev) >= NVCODA || minor(dev) < 0)
-       return(ENXIO);
-    
-    vcp = &coda_mnttbl[minor(dev)].mi_vcomm;
-    
-    /* Peek at the opcode, unique without transfering the data. */
-    error = uiomove((caddr_t)buf, sizeof(int) * 2, uiop);
-    if (error) {
-       myprintf(("vcwrite: error (%d) on uiomove\n", error));
-       return(EINVAL);
-    }
-    
-    opcode = buf[0];
-    seq = buf[1];
-       
-    if (codadebug)
-       myprintf(("vcwrite got a call for %ld.%ld\n", opcode, seq));
-    
-    if (DOWNCALL(opcode)) {
-       union outputArgs pbuf;
-       
-       /* get the rest of the data. */
-       error = uiomove((caddr_t)&pbuf.coda_purgeuser.oh.result, sizeof(pbuf) - (sizeof(int)*2), uiop);
-       if (error) {
-           myprintf(("vcwrite: error (%d) on uiomove (Op %ld seq %ld)\n", 
-                     error, opcode, seq));
-           return(EINVAL);
-           }
-       
-       return handleDownCall(opcode, &pbuf);
-    }
-    
-    /* Look for the message on the (waiting for) reply queue. */
-    for (vmp = (struct vmsg *)GETNEXT(vcp->vc_replys);
-        !EOQ(vmp, vcp->vc_replys);
-        vmp = (struct vmsg *)GETNEXT(vmp->vm_chain))
-    {
-       if (vmp->vm_unique == seq) break;
-    }
-    
-    if (EOQ(vmp, vcp->vc_replys)) {
-       if (codadebug)
-           myprintf(("vcwrite: msg (%ld, %ld) not found\n", opcode, seq));
-       
-       return(ESRCH);
-       }
-    
-    /* Remove the message from the reply queue */
-    REMQUE(vmp->vm_chain);
-    
-    /* move data into response buffer. */
-    out = (struct coda_out_hdr *)vmp->vm_data;
-    /* Don't need to copy opcode and uniquifier. */
-    
-    /* get the rest of the data. */
-    if (vmp->vm_outSize < uiop->uio_resid) {
-       myprintf(("vcwrite: more data than asked for (%d < %d)\n",
-                 vmp->vm_outSize, uiop->uio_resid));
-       wakeup(&vmp->vm_sleep);         /* Notify caller of the error. */
-       return(EINVAL);
-    } 
-    
-    buf[0] = uiop->uio_resid;  /* Save this value. */
-    error = uiomove((caddr_t) &out->result, vmp->vm_outSize - (sizeof(int) * 2), uiop);
-    if (error) {
-       myprintf(("vcwrite: error (%d) on uiomove (op %ld seq %ld)\n", 
-                 error, opcode, seq));
-       return(EINVAL);
-    }
-    
-    /* I don't think these are used, but just in case. */
-    /* XXX - aren't these two already correct? -bnoble */
-    out->opcode = opcode;
-    out->unique = seq;
-    vmp->vm_outSize    = buf[0];       /* Amount of data transferred? */
-    vmp->vm_flags |= VM_WRITE;
-    wakeup(&vmp->vm_sleep);
-    
-    return(0);
-}
-
-int
-vc_nb_ioctl(struct dev_ioctl_args *ap)
-{
-    ENTRY;
-
-    switch(ap->a_cmd) {
-    case CODARESIZE: {
-       struct coda_resize *data = (struct coda_resize *)ap->a_data;
-       return(coda_nc_resize(data->hashsize, data->heapsize, IS_DOWNCALL));
-       break;
-    }
-    case CODASTATS:
-       if (coda_nc_use) {
-           coda_nc_gather_stats();
-           return(0);
-       } else {
-           return(ENODEV);
-       }
-       break;
-    case CODAPRINT:
-       if (coda_nc_use) {
-           print_coda_nc();
-           return(0);
-       } else {
-           return(ENODEV);
-       }
-       break;
-    case CIOC_KERNEL_VERSION:
-       switch (*(u_int *)ap->a_data) {
-       case 0:
-               *(u_int *)ap->a_data = coda_kernel_version;
-               return 0;
-               break;
-       case 1:
-       case 2:
-               if (coda_kernel_version != *(u_int *)ap->a_data)
-                   return ENOENT;
-               else
-                   return 0;
-       default:
-               return ENOENT;
-       }
-       break;
-    default :
-       return(EINVAL);
-       break;
-    }
-}
-
-int
-vc_nb_poll(struct dev_poll_args *ap)
-{
-    dev_t dev = ap->a_head.a_dev;
-    struct vcomm *vcp;
-    int event_msk = 0;
-
-    ENTRY;
-    
-    if (minor(dev) >= NVCODA || minor(dev) < 0)
-       return(ENXIO);
-    
-    vcp = &coda_mnttbl[minor(dev)].mi_vcomm;
-    
-    event_msk = ap->a_events & (POLLIN|POLLRDNORM);
-    if (event_msk) {
-       if (!EMPTY(vcp->vc_requests)) {
-           ap->a_events &= (POLLIN|POLLRDNORM);
-           return(0);
-       }
-       selrecord(curthread, &(vcp->vc_selproc));
-    }
-    ap->a_events = 0;
-    return(0);
-}
-
-/*
- * Statistics
- */
-struct coda_clstat coda_clstat;
-
-/* 
- * Key question: whether to sleep interuptably or uninteruptably when
- * waiting for Venus.  The former seems better (cause you can ^C a
- * job), but then GNU-EMACS completion breaks. Use tsleep with no
- * timeout, and no longjmp happens. But, when sleeping
- * "uninterruptibly", we don't get told if it returns abnormally
- * (e.g. kill -9).  
- */
-
-int
-coda_call(struct coda_mntinfo *mntinfo, int inSize, int *outSize,
-         caddr_t buffer) 
-{
-       struct vcomm *vcp;
-       struct vmsg *vmp;
-       int error;
-#ifdef CTL_C
-       struct proc *p = curproc;
-       sigset_t psig_omask = p->p_sigmask;
-       sigset_t tempset;
-       int i;
-#endif
-       if (mntinfo == NULL) {
-           /* Unlikely, but could be a race condition with a dying warden */
-           return ENODEV;
-       }
-
-       vcp = &(mntinfo->mi_vcomm);
-       
-       coda_clstat.ncalls++;
-       coda_clstat.reqs[((struct coda_in_hdr *)buffer)->opcode]++;
-
-       if (!VC_OPEN(vcp))
-           return(ENODEV);
-
-       CODA_ALLOC(vmp,struct vmsg *,sizeof(struct vmsg));
-       /* Format the request message. */
-       vmp->vm_data = buffer;
-       vmp->vm_flags = 0;
-       vmp->vm_inSize = inSize;
-       vmp->vm_outSize 
-           = *outSize ? *outSize : inSize; /* |buffer| >= inSize */
-       vmp->vm_opcode = ((struct coda_in_hdr *)buffer)->opcode;
-       vmp->vm_unique = ++vcp->vc_seq;
-       if (codadebug)
-           myprintf(("Doing a call for %d.%d\n", 
-                     vmp->vm_opcode, vmp->vm_unique));
-       
-       /* Fill in the common input args. */
-       ((struct coda_in_hdr *)buffer)->unique = vmp->vm_unique;
-
-       /* Append msg to request queue and poke Venus. */
-       INSQUE(vmp->vm_chain, vcp->vc_requests);
-       selwakeup(&(vcp->vc_selproc));
-
-       /* We can be interrupted while we wait for Venus to process
-        * our request.  If the interrupt occurs before Venus has read
-        * the request, we dequeue and return. If it occurs after the
-        * read but before the reply, we dequeue, send a signal
-        * message, and return. If it occurs after the reply we ignore
-        * it. In no case do we want to restart the syscall.  If it
-        * was interrupted by a venus shutdown (vcclose), return
-        * ENODEV.  */
-
-       /* Ignore return, We have to check anyway */
-#ifdef CTL_C
-       /* This is work in progress.  Setting coda_pcatch lets tsleep reawaken
-          on a ^c or ^z.  The problem is that emacs sets certain interrupts
-          as SA_RESTART.  This means that we should exit sleep handle the
-          "signal" and then go to sleep again.  Mostly this is done by letting
-          the syscall complete and be restarted.  We are not idempotent and 
-          can not do this.  A better solution is necessary.
-        */
-       i = 0;
-       do {
-               error = tsleep(&vmp->vm_sleep, coda_pcatch, "coda_call", hz*2);
-               if (error == 0)
-                       break;
-               else if (error == EWOULDBLOCK) {
-#ifdef CODA_VERBOSE
-                       printf("coda_call: tsleep TIMEOUT %d sec\n", 2+2*i);
-#endif
-               }
-               else {
-                       SIGEMPTYSET(tempset);
-                       SIGADDSET(tempset, SIGIO);
-                       if (SIGSETEQ(p->p_siglist, tempset)) {
-                               SIGADDSET(p->p_sigmask, SIGIO);
-#ifdef CODA_VERBOSE
-                               printf("coda_call: tsleep returns %d SIGIO, cnt %d\n",
-                                      error, i);
-#endif
-                       } else {
-                               SIGDELSET(tempset, SIGIO);
-                               SIGADDSET(tempset, SIGALRM);
-                               if (SIGSETEQ(p->p_siglist, tempset)) {
-                                       SIGADDSET(p->p_sigmask, SIGALRM);
-#ifdef CODA_VERBOSE
-                                       printf("coda_call: tsleep returns %d SIGALRM, cnt %d\n",
-                                              error, i);
-#endif
-                               }
-                               else {
-                                       printf("coda_call: tsleep returns %d, cnt %d\n",
-                                              error, i);
-
-#if notyet
-                                       tempset = p->p_siglist;
-                                       SIGSETNAND(tempset, p->p_sigmask);
-                                       printf("coda_call: siglist = %p, sigmask = %p, mask %p\n",
-                                              p->p_siglist, p->p_sigmask,
-                                              tempset);
-                                       break;
-                                       SIGSETOR(p->p_sigmask, p->p_siglist);
-                                       tempset = p->p_siglist;
-                                       SIGSETNAND(tempset, p->p_sigmask);
-                                       printf("coda_call: new mask, siglist = %p, sigmask = %p, mask %p\n",
-                                              p->p_siglist, p->p_sigmask,
-                                              tempset);
-#endif
-                               }
-                       }
-               }
-       } while (error && i++ < 128 && VC_OPEN(vcp));
-       p->p_sigmask = psig_omask;
-#else
-       tsleep(&vmp->vm_sleep, 0, "coda_call", 0);
-#endif
-       if (VC_OPEN(vcp)) {     /* Venus is still alive */
-       /* Op went through, interrupt or not... */
-           if (vmp->vm_flags & VM_WRITE) {
-               error = 0;
-               *outSize = vmp->vm_outSize;
-           }
-
-           else if (!(vmp->vm_flags & VM_READ)) { 
-               /* Interrupted before venus read it. */
-#ifdef CODA_VERBOSE
-               if (1)
-#else
-               if (codadebug)
-#endif
-                   myprintf(("interrupted before read: op = %d.%d, flags = %x\n",
-                          vmp->vm_opcode, vmp->vm_unique, vmp->vm_flags));
-               REMQUE(vmp->vm_chain);
-               error = EINTR;
-           }
-           
-           else {      
-               /* (!(vmp->vm_flags & VM_WRITE)) means interrupted after
-                   upcall started */
-               /* Interrupted after start of upcall, send venus a signal */
-               struct coda_in_hdr *dog;
-               struct vmsg *svmp;
-               
-#ifdef CODA_VERBOSE
-               if (1)
-#else
-               if (codadebug)
-#endif
-                   myprintf(("Sending Venus a signal: op = %d.%d, flags = %x\n",
-                          vmp->vm_opcode, vmp->vm_unique, vmp->vm_flags));
-               
-               REMQUE(vmp->vm_chain);
-               error = EINTR;
-               
-               CODA_ALLOC(svmp, struct vmsg *, sizeof (struct vmsg));
-
-               CODA_ALLOC((svmp->vm_data), char *, sizeof (struct coda_in_hdr));
-               dog = (struct coda_in_hdr *)svmp->vm_data;
-               
-               svmp->vm_flags = 0;
-               dog->opcode = svmp->vm_opcode = CODA_SIGNAL;
-               dog->unique = svmp->vm_unique = vmp->vm_unique;
-               svmp->vm_inSize = sizeof (struct coda_in_hdr);
-/*??? rvb */   svmp->vm_outSize = sizeof (struct coda_in_hdr);
-               
-               if (codadebug)
-                   myprintf(("coda_call: enqueing signal msg (%d, %d)\n",
-                          svmp->vm_opcode, svmp->vm_unique));
-               
-               /* insert at head of queue! */
-               INSQUE(svmp->vm_chain, vcp->vc_requests);
-               selwakeup(&(vcp->vc_selproc));
-           }
-       }
-
-       else {  /* If venus died (!VC_OPEN(vcp)) */
-           if (codadebug)
-               myprintf(("vcclose woke op %d.%d flags %d\n",
-                      vmp->vm_opcode, vmp->vm_unique, vmp->vm_flags));
-           
-               error = ENODEV;
-       }
-
-       CODA_FREE(vmp, sizeof(struct vmsg));
-
-       if (outstanding_upcalls > 0 && (--outstanding_upcalls == 0))
-               wakeup(&outstanding_upcalls);
-
-       if (!error)
-               error = ((struct coda_out_hdr *)buffer)->result;
-       return(error);
-}
diff --git a/sys/vfs/coda/coda_psdev.h b/sys/vfs/coda/coda_psdev.h
deleted file mode 100644 (file)
index 2a9cbe6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_psdev.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_psdev.h,v 1.2 1999/08/28 00:40:55 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_psdev.h,v 1.4 2006/07/28 02:17:41 dillon Exp $
- * 
- */
-
-d_open_t vc_nb_open;
-d_close_t vc_nb_close;
-d_read_t vc_nb_read;
-d_write_t vc_nb_write;
-d_ioctl_t vc_nb_ioctl;
-d_poll_t vc_nb_poll;
diff --git a/sys/vfs/coda/coda_subr.c b/sys/vfs/coda/coda_subr.c
deleted file mode 100644 (file)
index f5a199b..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_subr.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_subr.c,v 1.11.2.1 2001/10/25 19:18:51 dillon Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_subr.c,v 1.10 2006/01/13 21:09:27 swildner Exp $
- * 
-  */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon
- * University.  Contributers include David Steere, James Kistler, and
- * M. Satyanarayanan.
- */
-
-/* NOTES: rvb
- * 1.  Added coda_unmounting to mark all cnodes as being UNMOUNTING.  This has to
- *      be done before dounmount is called.  Because some of the routines that
- *      dounmount calls before coda_unmounted might try to force flushes to venus.
- *      The vnode pager does this.
- * 2.  coda_unmounting marks all cnodes scanning coda_cache.
- * 3.  cfs_checkunmounting (under DEBUG) checks all cnodes by chasing the vnodes
- *      under the /coda mount point.
- * 4.  coda_cacheprint (under DEBUG) prints names with vnode/cnode address
- */
-
-#include "use_vcoda.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/select.h>
-#include <sys/mount.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_subr.h"
-#include "coda_namecache.h"
-
-int coda_active = 0;
-int coda_reuse = 0;
-int coda_new = 0;
-
-struct cnode *coda_freelist = NULL;
-struct cnode *coda_cache[CODA_CACHESIZE];
-
-#define coda_hash(fid) (((fid)->Volume + (fid)->Vnode) & (CODA_CACHESIZE-1))
-#define        CNODE_NEXT(cp)  ((cp)->c_next)
-#define ODD(vnode)        ((vnode) & 0x1)
-
-/*
- * Allocate a cnode.
- */
-struct cnode *
-coda_alloc(void)
-{
-    struct cnode *cp;
-
-    if (coda_freelist) {
-       cp = coda_freelist;
-       coda_freelist = CNODE_NEXT(cp);
-       coda_reuse++;
-    }
-    else {
-       CODA_ALLOC(cp, struct cnode *, sizeof(struct cnode));
-       /* NetBSD vnodes don't have any Pager info in them ('cause there are
-          no external pagers, duh!) */
-#define VNODE_VM_INFO_INIT(vp)         /* MT */
-       VNODE_VM_INFO_INIT(CTOV(cp));
-       coda_new++;
-    }
-    bzero(cp, sizeof (struct cnode));
-
-    return(cp);
-}
-
-/*
- * Deallocate a cnode.
- */
-void
-coda_free(struct cnode *cp)
-{
-
-    CNODE_NEXT(cp) = coda_freelist;
-    coda_freelist = cp;
-}
-
-/*
- * Put a cnode in the hash table
- */
-void
-coda_save(struct cnode *cp)
-{
-       CNODE_NEXT(cp) = coda_cache[coda_hash(&cp->c_fid)];
-       coda_cache[coda_hash(&cp->c_fid)] = cp;
-}
-
-/*
- * Remove a cnode from the hash table
- */
-void
-coda_unsave(struct cnode *cp)
-{
-    struct cnode *ptr;
-    struct cnode *ptrprev = NULL;
-    
-    ptr = coda_cache[coda_hash(&cp->c_fid)]; 
-    while (ptr != NULL) { 
-       if (ptr == cp) { 
-           if (ptrprev == NULL) {
-               coda_cache[coda_hash(&cp->c_fid)] 
-                   = CNODE_NEXT(ptr);
-           } else {
-               CNODE_NEXT(ptrprev) = CNODE_NEXT(ptr);
-           }
-           CNODE_NEXT(cp) = (struct cnode *)NULL;
-           
-           return; 
-       }       
-       ptrprev = ptr;
-       ptr = CNODE_NEXT(ptr);
-    }  
-}
-
-/*
- * Lookup a cnode by fid. If the cnode is dying, it is bogus so skip it.
- * NOTE: this allows multiple cnodes with same fid -- dcs 1/25/95
- */
-struct cnode *
-coda_find(ViceFid *fid) 
-{
-    struct cnode *cp;
-
-    cp = coda_cache[coda_hash(fid)];
-    while (cp) {
-       if ((cp->c_fid.Vnode == fid->Vnode) &&
-           (cp->c_fid.Volume == fid->Volume) &&
-           (cp->c_fid.Unique == fid->Unique) &&
-           (!IS_UNMOUNTING(cp)))
-           {
-               coda_active++;
-               return(cp); 
-           }               
-       cp = CNODE_NEXT(cp);
-    }
-    return(NULL);
-}
-
-/*
- * coda_kill is called as a side effect to vcopen. To prevent any
- * cnodes left around from an earlier run of a venus or warden from
- * causing problems with the new instance, mark any outstanding cnodes
- * as dying. Future operations on these cnodes should fail (excepting
- * coda_inactive of course!). Since multiple venii/wardens can be
- * running, only kill the cnodes for a particular entry in the
- * coda_mnttbl. -- DCS 12/1/94 */
-
-int
-coda_kill(struct mount *whoIam, enum dc_status dcstat)
-{
-       int hash, count = 0;
-       struct cnode *cp;
-       
-       /* 
-        * Algorithm is as follows: 
-        *     Second, flush whatever vnodes we can from the name cache.
-        * 
-        *     Finally, step through whatever is left and mark them dying.
-        *        This prevents any operation at all.
-        */
-       
-       /* This is slightly overkill, but should work. Eventually it'd be
-        * nice to only flush those entries from the namecache that
-        * reference a vnode in this vfs.  */
-       coda_nc_flush(dcstat);
-       
-       for (hash = 0; hash < CODA_CACHESIZE; hash++) {
-               for (cp = coda_cache[hash]; cp != NULL; cp = CNODE_NEXT(cp)) {
-                       if (CTOV(cp)->v_mount == whoIam) {
-#ifdef DEBUG
-                               printf("coda_kill: vp %p, cp %p\n", CTOV(cp), cp);
-#endif
-                               count++;
-                               CODADEBUG(CODA_FLUSH, 
-                                        myprintf(("Live cnode fid %lx.%lx.%lx flags %d count %d\n",
-                                                  (cp->c_fid).Volume,
-                                                  (cp->c_fid).Vnode,
-                                                  (cp->c_fid).Unique, 
-                                                  cp->c_flags,
-                                                  CTOV(cp)->v_usecount)); );
-                       }
-               }
-       }
-       return count;
-}
-
-/*
- * There are two reasons why a cnode may be in use, it may be in the
- * name cache or it may be executing.  
- */
-void
-coda_flush(enum dc_status dcstat)
-{
-    int hash;
-    struct cnode *cp;
-    
-    coda_clstat.ncalls++;
-    coda_clstat.reqs[CODA_FLUSH]++;
-    
-    coda_nc_flush(dcstat);         /* flush files from the name cache */
-
-    for (hash = 0; hash < CODA_CACHESIZE; hash++) {
-       for (cp = coda_cache[hash]; cp != NULL; cp = CNODE_NEXT(cp)) {  
-           if (!ODD(cp->c_fid.Vnode)) /* only files can be executed */
-               coda_vmflush(cp);
-       }
-    }
-}
-
-/*
- * As a debugging measure, print out any cnodes that lived through a
- * name cache flush.  
- */
-void
-coda_testflush(void)
-{
-    int hash;
-    struct cnode *cp;
-    
-    for (hash = 0; hash < CODA_CACHESIZE; hash++) {
-       for (cp = coda_cache[hash];
-            cp != NULL;
-            cp = CNODE_NEXT(cp)) {  
-           myprintf(("Live cnode fid %lx.%lx.%lx count %d\n",
-                     (cp->c_fid).Volume,(cp->c_fid).Vnode,
-                     (cp->c_fid).Unique, CTOV(cp)->v_usecount));
-       }
-    }
-}
-
-/*
- *     First, step through all cnodes and mark them unmounting.
- *         NetBSD kernels may try to fsync them now that venus
- *         is dead, which would be a bad thing.
- *
- */
-void
-coda_unmounting(struct mount *whoIam)
-{      
-       int hash;
-       struct cnode *cp;
-
-       for (hash = 0; hash < CODA_CACHESIZE; hash++) {
-               for (cp = coda_cache[hash]; cp != NULL; cp = CNODE_NEXT(cp)) {
-                       if (CTOV(cp)->v_mount == whoIam) {
-                               if (cp->c_flags & (C_LOCKED|C_WANTED)) {
-                                       printf("coda_unmounting: Unlocking %p\n", cp);
-                                       cp->c_flags &= ~(C_LOCKED|C_WANTED);
-                                       wakeup((caddr_t) cp);
-                               }
-                               cp->c_flags |= C_UNMOUNTING;
-                       }
-               }
-       }
-}
-
-#ifdef DEBUG
-void
-coda_checkunmounting(struct mount *mp)
-{      
-       struct vnode *vp, *nvp;
-       struct cnode *cp;
-       int count = 0, bad = 0;
-       lwkt_tokref ilock;
-
-       lwkt_gettoken(&ilock, &mntvnode_token);
-       for (vp = TAILQ_FIRST(&mp->mnt_nvnodelist); vp; vp = nvp) {
-               nvp = TAILQ_NEXT(vp, v_nmntvnodes);
-               cp = VTOC(vp);
-               count++;
-               if (!(cp->c_flags & C_UNMOUNTING)) {
-                       bad++;
-                       printf("vp %p, cp %p missed\n", vp, cp);
-                       cp->c_flags |= C_UNMOUNTING;
-               }
-       }
-       lwkt_reltoken(&ilock);
-}
-
-void
-coda_cacheprint(struct mount *whoIam)
-{      
-       int hash;
-       struct cnode *cp;
-       int count = 0;
-
-       printf("coda_cacheprint: coda_ctlvp %p, cp %p", coda_ctlvp, VTOC(coda_ctlvp));
-       coda_nc_name(VTOC(coda_ctlvp));
-       printf("\n");
-
-       for (hash = 0; hash < CODA_CACHESIZE; hash++) {
-               for (cp = coda_cache[hash]; cp != NULL; cp = CNODE_NEXT(cp)) {
-                       if (CTOV(cp)->v_mount == whoIam) {
-                               printf("coda_cacheprint: vp %p, cp %p", CTOV(cp), cp);
-                               coda_nc_name(cp);
-                               printf("\n");
-                               count++;
-                       }
-               }
-       }
-       printf("coda_cacheprint: count %d\n", count);
-}
-#endif
-
-/*
- * There are 6 cases where invalidations occur. The semantics of each
- * is listed here.
- *
- * CODA_FLUSH     -- flush all entries from the name cache and the cnode cache.
- * CODA_PURGEUSER -- flush all entries from the name cache for a specific user
- *                  This call is a result of token expiration.
- *
- * The next two are the result of callbacks on a file or directory.
- * CODA_ZAPDIR    -- flush the attributes for the dir from its cnode.
- *                  Zap all children of this directory from the namecache.
- * CODA_ZAPFILE   -- flush the attributes for a file.
- *
- * The fifth is a result of Venus detecting an inconsistent file.
- * CODA_PURGEFID  -- flush the attribute for the file
- *                  If it is a dir (odd vnode), purge its 
- *                  children from the namecache
- *                  remove the file from the namecache.
- *
- * The sixth allows Venus to replace local fids with global ones
- * during reintegration.
- *
- * CODA_REPLACE -- replace one ViceFid with another throughout the name cache 
- */
-
-int
-handleDownCall(int opcode, union outputArgs *out)
-{
-    int error;
-
-    /* Handle invalidate requests. */
-    switch (opcode) {
-      case CODA_FLUSH : {
-
-         coda_flush(IS_DOWNCALL);
-         
-         CODADEBUG(CODA_FLUSH,coda_testflush();)    /* print remaining cnodes */
-             return(0);
-      }
-       
-      case CODA_PURGEUSER : {
-         coda_clstat.ncalls++;
-         coda_clstat.reqs[CODA_PURGEUSER]++;
-         
-         /* XXX - need to prevent fsync's */
-         coda_nc_purge_user(out->coda_purgeuser.cred.cr_uid, IS_DOWNCALL);
-         return(0);
-      }
-       
-      case CODA_ZAPFILE : {
-         struct cnode *cp;
-
-         error = 0;
-         coda_clstat.ncalls++;
-         coda_clstat.reqs[CODA_ZAPFILE]++;
-         
-         cp = coda_find(&out->coda_zapfile.CodaFid);
-         if (cp != NULL) {
-             vref(CTOV(cp));
-             
-             cp->c_flags &= ~C_VATTR;
-             if (CTOV(cp)->v_flag & VTEXT)
-                 error = coda_vmflush(cp);
-             CODADEBUG(CODA_ZAPFILE, 
-                       myprintf(("zapfile: fid = (%lx.%lx.%lx), refcnt = %d, error = %d\n",
-                       cp->c_fid.Volume, 
-                           cp->c_fid.Vnode, 
-                           cp->c_fid.Unique, 
-                           CTOV(cp)->v_usecount - 1, error)););
-             if (CTOV(cp)->v_usecount == 1) {
-                 cp->c_flags |= C_PURGING;
-             }
-             vrele(CTOV(cp));
-         }
-         
-         return(error);
-      }
-       
-      case CODA_ZAPDIR : {
-         struct cnode *cp;
-
-         coda_clstat.ncalls++;
-         coda_clstat.reqs[CODA_ZAPDIR]++;
-         
-         cp = coda_find(&out->coda_zapdir.CodaFid);
-         if (cp != NULL) {
-             vref(CTOV(cp));
-             
-             cp->c_flags &= ~C_VATTR;
-             coda_nc_zapParentfid(&out->coda_zapdir.CodaFid, IS_DOWNCALL);     
-             
-             CODADEBUG(CODA_ZAPDIR, 
-                       myprintf(("zapdir: fid = (%lx.%lx.%lx), refcnt = %d\n",
-                               cp->c_fid.Volume, 
-                               cp->c_fid.Vnode, 
-                               cp->c_fid.Unique, 
-                               CTOV(cp)->v_usecount - 1)););
-             if (CTOV(cp)->v_usecount == 1) {
-                 cp->c_flags |= C_PURGING;
-             }
-             vrele(CTOV(cp));
-         }
-         
-         return(0);
-      }
-       
-      case CODA_PURGEFID : {
-         struct cnode *cp;
-
-         error = 0;
-         coda_clstat.ncalls++;
-         coda_clstat.reqs[CODA_PURGEFID]++;
-
-         cp = coda_find(&out->coda_purgefid.CodaFid);
-         if (cp != NULL) {
-             vref(CTOV(cp));
-             if (ODD(out->coda_purgefid.CodaFid.Vnode)) { /* Vnode is a directory */
-                 coda_nc_zapParentfid(&out->coda_purgefid.CodaFid,
-                                    IS_DOWNCALL);     
-             }
-             cp->c_flags &= ~C_VATTR;
-             coda_nc_zapfid(&out->coda_purgefid.CodaFid, IS_DOWNCALL);
-             if (!(ODD(out->coda_purgefid.CodaFid.Vnode)) 
-                 && (CTOV(cp)->v_flag & VTEXT)) {
-                 
-                 error = coda_vmflush(cp);
-             }
-             CODADEBUG(CODA_PURGEFID, myprintf(("purgefid: fid = (%lx.%lx.%lx), refcnt = %d, error = %d\n",
-                                            cp->c_fid.Volume, cp->c_fid.Vnode,
-                                            cp->c_fid.Unique, 
-                                           CTOV(cp)->v_usecount - 1, error)););
-             if (CTOV(cp)->v_usecount == 1) {
-                 cp->c_flags |= C_PURGING;
-             }
-             vrele(CTOV(cp));
-         }
-         return(error);
-      }
-
-      case CODA_REPLACE : {
-         struct cnode *cp = NULL;
-
-         coda_clstat.ncalls++;
-         coda_clstat.reqs[CODA_REPLACE]++;
-         
-         cp = coda_find(&out->coda_replace.OldFid);
-         if (cp != NULL) { 
-             /* remove the cnode from the hash table, replace the fid, and reinsert */
-             vref(CTOV(cp));
-             coda_unsave(cp);
-             cp->c_fid = out->coda_replace.NewFid;
-             coda_save(cp);
-
-             CODADEBUG(CODA_REPLACE, myprintf(("replace: oldfid = (%lx.%lx.%lx), newfid = (%lx.%lx.%lx), cp = %p\n",
-                                          out->coda_replace.OldFid.Volume,
-                                          out->coda_replace.OldFid.Vnode,
-                                          out->coda_replace.OldFid.Unique,
-                                          cp->c_fid.Volume, cp->c_fid.Vnode, 
-                                          cp->c_fid.Unique, cp));)
-             vrele(CTOV(cp));
-         }
-         return (0);
-      }
-      default:
-       myprintf(("handleDownCall: unknown opcode %d\n", opcode));
-       return (EINVAL);
-    }
-}
-
-/* coda_grab_vnode: lives in either cfs_mach.c or cfs_nbsd.c */
-
-int
-coda_vmflush(struct cnode *cp)
-{
-    return 0;
-}
-
-
-/* 
- * kernel-internal debugging switches
- */
-void
-coda_debugon(void)
-{
-    codadebug = -1;
-    coda_nc_debug = -1;
-    coda_vnop_print_entry = 1;
-    coda_psdev_print_entry = 1;
-    coda_vfsop_print_entry = 1;
-}
-
-void
-coda_debugoff(void)
-{
-    codadebug = 0;
-    coda_nc_debug = 0;
-    coda_vnop_print_entry = 0;
-    coda_psdev_print_entry = 0;
-    coda_vfsop_print_entry = 0;
-}
-
-/*
- * Utilities used by both client and server
- * Standard levels:
- * 0) no debugging
- * 1) hard failures
- * 2) soft failures
- * 3) current test software
- * 4) main procedure entry points
- * 5) main procedure exit points
- * 6) utility procedure entry points
- * 7) utility procedure exit points
- * 8) obscure procedure entry points
- * 9) obscure procedure exit points
- * 10) random stuff
- * 11) all <= 1
- * 12) all <= 2
- * 13) all <= 3
- * ...
- */
diff --git a/sys/vfs/coda/coda_subr.h b/sys/vfs/coda/coda_subr.h
deleted file mode 100644 (file)
index 1d3fd0c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_subr.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_subr.h,v 1.7 1999/08/28 00:40:56 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_subr.h,v 1.2 2003/06/17 04:28:19 dillon Exp $
- * 
- */
-
-struct cnode *coda_alloc(void);
-void  coda_free(struct cnode *cp);
-struct cnode *coda_find(ViceFid *fid);
-void coda_flush(enum dc_status dcstat);
-void coda_testflush(void);
-void coda_checkunmounting(struct mount *mp);
-void coda_cacheprint(struct mount *whoIam);
-void coda_debugon(void);
-void coda_debugoff(void);
-int  coda_kill(struct mount *whoIam, enum dc_status dcstat);
-void coda_save(struct cnode *cp);
-void coda_unsave(struct cnode *cp);
diff --git a/sys/vfs/coda/coda_venus.c b/sys/vfs/coda/coda_venus.c
deleted file mode 100644 (file)
index 888145a..0000000
+++ /dev/null
@@ -1,664 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/cfs/coda_venus.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_venus.c,v 1.9 1999/08/28 00:40:56 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_venus.c,v 1.5 2004/01/08 18:48:07 asmodai Exp $
- * 
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/proc.h>
-#include <sys/select.h>
-#include <sys/ioccom.h>
-#include <sys/fcntl.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_venus.h"
-#include "coda_pioctl.h"
-
-#define DECL_NO_IN(name)                               \
-    struct coda_in_hdr *inp;                           \
-    struct name ## _out *outp;                         \
-    int name ## _size = sizeof (struct coda_in_hdr);   \
-    int Isize = sizeof (struct coda_in_hdr);           \
-    int Osize = sizeof (struct name ## _out);          \
-    int error
-
-#define DECL(name)                                     \
-    struct name ## _in *inp;                           \
-    struct name ## _out *outp;                         \
-    int name ## _size = sizeof (struct name ## _in);   \
-    int Isize = sizeof (struct name ## _in);           \
-    int Osize = sizeof (struct name ## _out);          \
-    int error
-
-#define DECL_NO_OUT(name)                              \
-    struct name ## _in *inp;                           \
-    struct coda_out_hdr *outp;                         \
-    int name ## _size = sizeof (struct name ## _in);   \
-    int Isize = sizeof (struct name ## _in);           \
-    int Osize = sizeof (struct coda_out_hdr);          \
-    int error
-
-#define ALLOC_NO_IN(name)                              \
-    if (Osize > name ## _size)                         \
-       name ## _size = Osize;                          \
-    CODA_ALLOC(inp, struct coda_in_hdr *, name ## _size);\
-    outp = (struct name ## _out *) inp
-
-#define ALLOC(name)                                    \
-    if (Osize > name ## _size)                         \
-       name ## _size = Osize;                          \
-    CODA_ALLOC(inp, struct name ## _in *, name ## _size);\
-    outp = (struct name ## _out *) inp
-
-#define ALLOC_NO_OUT(name)                             \
-    if (Osize > name ## _size)                         \
-       name ## _size = Osize;                          \
-    CODA_ALLOC(inp, struct name ## _in *, name ## _size);\
-    outp = (struct coda_out_hdr *) inp
-
-#define STRCPY(struc, name, len) \
-    bcopy(name, (char *)inp + (int)inp->struc, len); \
-    ((char*)inp + (int)inp->struc)[len++] = 0; \
-    Isize += len
-
-#define INIT_IN(in, op, ident, td) \
-       do { struct proc *p = (td)->td_proc; \
-         (in)->opcode = (op); \
-         (in)->pid = p ? p->p_pid : -1; \
-          (in)->pgid = p ? p->p_pgid : -1; \
-          (in)->sid = (p && p->p_session && p->p_session->s_leader) ? (p->p_session->s_leader->p_pid) : -1; \
-          if (ident != NOCRED) {                              \
-             (in)->cred.cr_uid = ident->cr_uid;              \
-             (in)->cred.cr_groupid = ident->cr_gid;          \
-          } else {                                            \
-             bzero(&((in)->cred),sizeof(struct coda_cred));  \
-             (in)->cred.cr_uid = -1;                         \
-             (in)->cred.cr_groupid = -1;                     \
-          }                                                   \
-       } while(0)
-
-#define        CNV_OFLAG(to, from)                             \
-    do {                                               \
-         to = 0;                                       \
-         if (from & FREAD)   to |= C_O_READ;           \
-         if (from & FWRITE)  to |= C_O_WRITE;          \
-         if (from & O_TRUNC) to |= C_O_TRUNC;          \
-         if (from & O_EXCL)  to |= C_O_EXCL;           \
-         if (from & O_CREAT) to |= C_O_CREAT;          \
-    } while (0)
-
-#define CNV_VV2V_ATTR(top, fromp) \
-       do { \
-               (top)->va_type = (fromp)->va_type; \
-               (top)->va_mode = (fromp)->va_mode; \
-               (top)->va_nlink = (fromp)->va_nlink; \
-               (top)->va_uid = (fromp)->va_uid; \
-               (top)->va_gid = (fromp)->va_gid; \
-               (top)->va_fsid = VNOVAL; \
-               (top)->va_fileid = (fromp)->va_fileid; \
-               (top)->va_size = (fromp)->va_size; \
-               (top)->va_blocksize = (fromp)->va_blocksize; \
-               (top)->va_atime = (fromp)->va_atime; \
-               (top)->va_mtime = (fromp)->va_mtime; \
-               (top)->va_ctime = (fromp)->va_ctime; \
-               (top)->va_gen = (fromp)->va_gen; \
-               (top)->va_flags = (fromp)->va_flags; \
-               (top)->va_rdev = (fromp)->va_rdev; \
-               (top)->va_bytes = (fromp)->va_bytes; \
-               (top)->va_filerev = (fromp)->va_filerev; \
-               (top)->va_vaflags = VNOVAL; \
-               (top)->va_spare = VNOVAL; \
-       } while (0)
-
-#define CNV_V2VV_ATTR(top, fromp) \
-       do { \
-               (top)->va_type = (fromp)->va_type; \
-               (top)->va_mode = (fromp)->va_mode; \
-               (top)->va_nlink = (fromp)->va_nlink; \
-               (top)->va_uid = (fromp)->va_uid; \
-               (top)->va_gid = (fromp)->va_gid; \
-               (top)->va_fileid = (fromp)->va_fileid; \
-               (top)->va_size = (fromp)->va_size; \
-               (top)->va_blocksize = (fromp)->va_blocksize; \
-               (top)->va_atime = (fromp)->va_atime; \
-               (top)->va_mtime = (fromp)->va_mtime; \
-               (top)->va_ctime = (fromp)->va_ctime; \
-               (top)->va_gen = (fromp)->va_gen; \
-               (top)->va_flags = (fromp)->va_flags; \
-               (top)->va_rdev = (fromp)->va_rdev; \
-               (top)->va_bytes = (fromp)->va_bytes; \
-               (top)->va_filerev = (fromp)->va_filerev; \
-       } while (0)
-
-
-int coda_kernel_version = CODA_KERNEL_VERSION;
-
-int
-venus_root(void *mdp,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid)
-{
-    DECL_NO_IN(coda_root);             /* sets Isize & Osize */
-    ALLOC_NO_IN(coda_root);            /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(inp, CODA_ROOT, cred, td);  
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error)
-       *VFid = outp->VFid;
-
-    CODA_FREE(inp, coda_root_size);
-    return error;
-}
-
-int
-venus_open(void *mdp, ViceFid *fid, int flag,
-       struct ucred *cred, struct thread *td,
-/*out*/        dev_t *dev, ino_t *inode)
-{
-    int cflag;
-    DECL(coda_open);                   /* sets Isize & Osize */
-    ALLOC(coda_open);                  /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_OPEN, cred, td);
-    inp->VFid = *fid;
-    CNV_OFLAG(cflag, flag);
-    inp->flags = cflag;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-/* 5/11        *dev =  udev2dev(outp->dev, 2); */
-       *dev =  udev2dev(outp->dev, 0);
-       *inode = outp->inode;
-    }
-
-    CODA_FREE(inp, coda_open_size);
-    return error;
-}
-
-int
-venus_close(void *mdp, ViceFid *fid, int flag,
-       struct ucred *cred, struct thread *td)
-{
-    int cflag;
-    DECL_NO_OUT(coda_close);           /* sets Isize & Osize */
-    ALLOC_NO_OUT(coda_close);          /* sets inp & outp */
-
-    INIT_IN(&inp->ih, CODA_CLOSE, cred, td);
-    inp->VFid = *fid;
-    CNV_OFLAG(cflag, flag);
-    inp->flags = cflag;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_close_size);
-    return error;
-}
-
-/*
- * these two calls will not exist!!!  the container file is read/written
- * directly.
- */
-void
-venus_read(void)
-{
-}
-
-void
-venus_write(void)
-{
-}
-
-/*
- * this is a bit sad too.  the ioctl's are for the control file, not for
- * normal files.
- */
-int
-venus_ioctl(void *mdp, ViceFid *fid,
-       int com, int flag, caddr_t data,
-       struct ucred *cred, struct thread *td)
-{
-    DECL(coda_ioctl);                  /* sets Isize & Osize */
-    struct PioctlData *iap = (struct PioctlData *)data;
-    int tmp;
-
-    coda_ioctl_size = VC_MAXMSGSIZE;
-    ALLOC(coda_ioctl);                 /* sets inp & outp */
-
-    INIT_IN(&inp->ih, CODA_IOCTL, cred, td);
-    inp->VFid = *fid;
-
-    /* command was mutated by increasing its size field to reflect the  
-     * path and follow args. we need to subtract that out before sending
-     * the command to venus.
-     */
-    inp->cmd = (com & ~(IOCPARM_MASK << 16));
-    tmp = ((com >> 16) & IOCPARM_MASK) - sizeof (char *) - sizeof (int);
-    inp->cmd |= (tmp & IOCPARM_MASK) <<        16;
-
-    inp->rwflag = flag;
-    inp->len = iap->vi.in_size;
-    inp->data = (char *)(sizeof (struct coda_ioctl_in));
-
-    error = copyin(iap->vi.in, (char*)inp + (int)inp->data, 
-                  iap->vi.in_size);
-    if (error) {
-       CODA_FREE(inp, coda_ioctl_size);
-       return(error);
-    }
-
-    Osize = VC_MAXMSGSIZE;
-    error = coda_call(mdp, Isize + iap->vi.in_size, &Osize, (char *)inp);
-
-       /* copy out the out buffer. */
-    if (!error) {
-       if (outp->len > iap->vi.out_size) {
-           error = EINVAL;
-       } else {
-           error = copyout((char *)outp + (int)outp->data, 
-                           iap->vi.out, iap->vi.out_size);
-       }
-    }
-
-    CODA_FREE(inp, coda_ioctl_size);
-    return error;
-}
-
-int
-venus_getattr(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        struct vattr *vap)
-{
-    DECL(coda_getattr);                        /* sets Isize & Osize */
-    ALLOC(coda_getattr);                       /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_GETATTR, cred, td);
-    inp->VFid = *fid;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       CNV_VV2V_ATTR(vap, &outp->attr);
-    }
-
-    CODA_FREE(inp, coda_getattr_size);
-    return error;
-}
-
-int
-venus_setattr(void *mdp, ViceFid *fid, struct vattr *vap,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_setattr);         /* sets Isize & Osize */
-    ALLOC_NO_OUT(coda_setattr);                /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_SETATTR, cred, td);
-    inp->VFid = *fid;
-    CNV_V2VV_ATTR(&inp->attr, vap);
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_setattr_size);
-    return error;
-}
-
-int
-venus_access(void *mdp, ViceFid *fid, int mode,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_access);          /* sets Isize & Osize */
-    ALLOC_NO_OUT(coda_access);         /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_ACCESS, cred, td);
-    inp->VFid = *fid;
-    /* NOTE:
-     * NetBSD and Venus internals use the "data" in the low 3 bits.
-     * Hence, the conversion.
-     */
-    inp->flags = mode>>6;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_access_size);
-    return error;
-}
-
-int
-venus_readlink(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        char **str, int *len)
-{
-    DECL(coda_readlink);                       /* sets Isize & Osize */
-    coda_readlink_size += CODA_MAXPATHLEN;
-    ALLOC(coda_readlink);              /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_READLINK, cred, td);
-    inp->VFid = *fid;
-
-    Osize += CODA_MAXPATHLEN;
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-           CODA_ALLOC(*str, char *, outp->count);
-           *len = outp->count;
-           bcopy((char *)outp + (int)outp->data, *str, *len);
-    }
-
-    CODA_FREE(inp, coda_readlink_size);
-    return error;
-}
-
-int
-venus_fsync(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_fsync);           /* sets Isize & Osize */
-    ALLOC_NO_OUT(coda_fsync);          /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_FSYNC, cred, td);
-    inp->VFid = *fid;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_fsync_size);
-    return error;
-}
-
-int
-venus_lookup(void *mdp, ViceFid *fid,
-       const char *nm, int len,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, int *vtype)
-{
-    DECL(coda_lookup);                 /* sets Isize & Osize */
-    coda_lookup_size += len + 1;
-    ALLOC(coda_lookup);                        /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_LOOKUP, cred, td);
-    inp->VFid = *fid;
-
-    /* NOTE:
-     * Between version 1 and version 2 we have added an extra flag field
-     * to this structure.  But because the string was at the end and because
-     * of the weird way we represent strings by having the slot point to
-     * where the string characters are in the "heap", we can just slip the
-     * flag parameter in after the string slot pointer and veni that don't
-     * know better won't see this new flag field ...
-     * Otherwise we'd need two different venus_lookup functions.
-     */
-    inp->name = Isize;
-    inp->flags = CLU_CASE_SENSITIVE;   /* doesn't really matter for BSD */
-    STRCPY(name, nm, len);             /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       *VFid = outp->VFid;
-       *vtype = outp->vtype;
-    }
-
-    CODA_FREE(inp, coda_lookup_size);
-    return error;
-}
-
-int
-venus_create(void *mdp, ViceFid *fid,
-       const char *nm, int len, int exclusive, int mode, struct vattr *va,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, struct vattr *attr)
-{
-    DECL(coda_create);                 /* sets Isize & Osize */
-    coda_create_size += len + 1;
-    ALLOC(coda_create);                        /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_CREATE, cred, td);
-    inp->VFid = *fid;
-    inp->excl = exclusive ? C_O_EXCL : 0;
-    inp->mode = mode;
-    CNV_V2VV_ATTR(&inp->attr, va);
-
-    inp->name = Isize;
-    STRCPY(name, nm, len);             /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       *VFid = outp->VFid;
-       CNV_VV2V_ATTR(attr, &outp->attr);
-    }
-
-    CODA_FREE(inp, coda_create_size);
-    return error;
-}
-
-int
-venus_remove(void *mdp, ViceFid *fid,
-        const char *nm, int len,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_remove);          /* sets Isize & Osize */
-    coda_remove_size += len + 1;
-    ALLOC_NO_OUT(coda_remove);         /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_REMOVE, cred, td);
-    inp->VFid = *fid;
-
-    inp->name = Isize;
-    STRCPY(name, nm, len);             /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_remove_size);
-    return error;
-}
-
-int
-venus_link(void *mdp, ViceFid *fid, ViceFid *tfid,
-        const char *nm, int len,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_link);            /* sets Isize & Osize */
-    coda_link_size += len + 1;
-    ALLOC_NO_OUT(coda_link);           /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_LINK, cred, td);
-    inp->sourceFid = *fid;
-    inp->destFid = *tfid;
-
-    inp->tname = Isize;
-    STRCPY(tname, nm, len);            /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_link_size);
-    return error;
-}
-
-int
-venus_rename(void *mdp, ViceFid *fid, ViceFid *tfid,
-        const char *nm, int len, const char *tnm, int tlen,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_rename);          /* sets Isize & Osize */
-    coda_rename_size += len + 1 + tlen + 1;
-    ALLOC_NO_OUT(coda_rename);         /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_RENAME, cred, td);
-    inp->sourceFid = *fid;
-    inp->destFid = *tfid;
-
-    inp->srcname = Isize;
-    STRCPY(srcname, nm, len);          /* increments Isize */
-
-    inp->destname = Isize;
-    STRCPY(destname, tnm, tlen);       /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_rename_size);
-    return error;
-}
-
-int
-venus_mkdir(void *mdp, ViceFid *fid,
-       const char *nm, int len, struct vattr *va,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, struct vattr *ova)
-{
-    DECL(coda_mkdir);                  /* sets Isize & Osize */
-    coda_mkdir_size += len + 1;
-    ALLOC(coda_mkdir);                 /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_MKDIR, cred, td);
-    inp->VFid = *fid;
-    CNV_V2VV_ATTR(&inp->attr, va);
-
-    inp->name = Isize;
-    STRCPY(name, nm, len);             /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       *VFid = outp->VFid;
-       CNV_VV2V_ATTR(ova, &outp->attr);
-    }
-
-    CODA_FREE(inp, coda_mkdir_size);
-    return error;
-}
-
-int
-venus_rmdir(void *mdp, ViceFid *fid,
-       const char *nm, int len,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_rmdir);           /* sets Isize & Osize */
-    coda_rmdir_size += len + 1;
-    ALLOC_NO_OUT(coda_rmdir);          /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_RMDIR, cred, td);
-    inp->VFid = *fid;
-
-    inp->name = Isize;
-    STRCPY(name, nm, len);             /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_rmdir_size);
-    return error;
-}
-
-int
-venus_symlink(void *mdp, ViceFid *fid,
-        const char *lnm, int llen, const char *nm, int len, struct vattr *va,
-       struct ucred *cred, struct thread *td)
-{
-    DECL_NO_OUT(coda_symlink);         /* sets Isize & Osize */
-    coda_symlink_size += llen + 1 + len + 1;
-    ALLOC_NO_OUT(coda_symlink);                /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_SYMLINK, cred, td);
-    inp->VFid = *fid;
-    CNV_V2VV_ATTR(&inp->attr, va);
-
-    inp->srcname = Isize;
-    STRCPY(srcname, lnm, llen);                /* increments Isize */
-
-    inp->tname = Isize;
-    STRCPY(tname, nm, len);            /* increments Isize */
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-
-    CODA_FREE(inp, coda_symlink_size);
-    return error;
-}
-
-int
-venus_readdir(void *mdp, ViceFid *fid,
-       int count, int offset,
-       struct ucred *cred, struct thread *td,
-/*out*/        char *buffer, int *len)
-{
-    DECL(coda_readdir);                        /* sets Isize & Osize */
-    coda_readdir_size = VC_MAXMSGSIZE;
-    ALLOC(coda_readdir);                       /* sets inp & outp */
-
-    /* send the open to venus. */
-    INIT_IN(&inp->ih, CODA_READDIR, cred, td);
-    inp->VFid = *fid;
-    inp->count = count;
-    inp->offset = offset;
-
-    Osize = VC_MAXMSGSIZE;
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       bcopy((char *)outp + (int)outp->data, buffer, outp->size);
-       *len = outp->size;
-    }
-
-    CODA_FREE(inp, coda_readdir_size);
-    return error;
-}
-
-int
-venus_fhtovp(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, int *vtype)
-{
-    DECL(coda_vget);                   /* sets Isize & Osize */
-    ALLOC(coda_vget);                  /* sets inp & outp */
-
-    /* Send the open to Venus. */
-    INIT_IN(&inp->ih, CODA_VGET, cred, td);
-    inp->VFid = *fid;
-
-    error = coda_call(mdp, Isize, &Osize, (char *)inp);
-    if (!error) {
-       *VFid = outp->VFid;
-       *vtype = outp->vtype;
-    }
-
-    CODA_FREE(inp, coda_vget_size);
-    return error;
-}
diff --git a/sys/vfs/coda/coda_venus.h b/sys/vfs/coda/coda_venus.h
deleted file mode 100644 (file)
index a406533..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_venus.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_venus.h,v 1.4 1999/08/28 00:40:56 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_venus.h,v 1.3 2003/06/25 03:55:44 dillon Exp $
- * 
- */
-
-int
-venus_root(void *mdp,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid);
-
-int
-venus_open(void *mdp, ViceFid *fid, int flag,
-       struct ucred *cred, struct thread *td,
-/*out*/        dev_t *dev, ino_t *inode);
-
-int
-venus_close(void *mdp, ViceFid *fid, int flag,
-       struct ucred *cred, struct thread *td);
-
-void
-venus_read(void);
-
-void
-venus_write(void);
-
-int
-venus_ioctl(void *mdp, ViceFid *fid,
-       int com, int flag, caddr_t data,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_getattr(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        struct vattr *vap);
-
-int
-venus_setattr(void *mdp, ViceFid *fid, struct vattr *vap,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_access(void *mdp, ViceFid *fid, int mode,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_readlink(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        char **str, int *len);
-
-int
-venus_fsync(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_lookup(void *mdp, ViceFid *fid,
-       const char *nm, int len,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, int *vtype);
-
-int
-venus_create(void *mdp, ViceFid *fid,
-       const char *nm, int len, int exclusive, int mode, struct vattr *va,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, struct vattr *attr);
-
-int
-venus_remove(void *mdp, ViceFid *fid,
-        const char *nm, int len,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_link(void *mdp, ViceFid *fid, ViceFid *tfid,
-        const char *nm, int len,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_rename(void *mdp, ViceFid *fid, ViceFid *tfid,
-        const char *nm, int len, const char *tnm, int tlen,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_mkdir(void *mdp, ViceFid *fid,
-       const char *nm, int len, struct vattr *va,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, struct vattr *ova);
-
-int
-venus_rmdir(void *mdp, ViceFid *fid,
-       const char *nm, int len,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_symlink(void *mdp, ViceFid *fid,
-        const char *lnm, int llen, const char *nm, int len, struct vattr *va,
-       struct ucred *cred, struct thread *td);
-
-int
-venus_readdir(void *mdp, ViceFid *fid,
-       int count, int offset,
-       struct ucred *cred, struct thread *td,
-/*out*/        char *buffer, int *len);
-
-int
-venus_fhtovp(void *mdp, ViceFid *fid,
-       struct ucred *cred, struct thread *td,
-/*out*/        ViceFid *VFid, int *vtype);
diff --git a/sys/vfs/coda/coda_vfsops.c b/sys/vfs/coda/coda_vfsops.c
deleted file mode 100644 (file)
index dd783bf..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/cfs/coda_vfsops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_vfsops.c,v 1.24.2.1 2001/07/26 20:36:45 iedowse Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.c,v 1.25 2006/07/28 02:17:41 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon
- * University.  Contributers include David Steere, James Kistler, and
- * M. Satyanarayanan.  
- */
-
-#include "use_vcoda.h"
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/conf.h>
-#include <sys/nlookup.h>
-#include <sys/mount.h>
-#include <sys/select.h>
-
-#include <vm/vm_zone.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_vfsops.h"
-#include "coda_venus.h"
-#include "coda_subr.h"
-#include "coda_opstats.h"
-
-MALLOC_DEFINE(M_CODA, "CODA storage", "Various Coda Structures");
-
-int codadebug = 0;
-int coda_vfsop_print_entry = 0;
-#define ENTRY    if(coda_vfsop_print_entry) myprintf(("Entered %s\n",__func__))
-
-struct vnode *coda_ctlvp;
-struct coda_mntinfo coda_mnttbl[NVCODA]; /* indexed by minor device number */
-
-/* structure to keep statistics of internally generated/satisfied calls */
-
-struct coda_op_stats coda_vfsopstats[CODA_VFSOPS_SIZE];
-
-#define MARK_ENTRY(op) (coda_vfsopstats[op].entries++)
-#define MARK_INT_SAT(op) (coda_vfsopstats[op].sat_intrn++)
-#define MARK_INT_FAIL(op) (coda_vfsopstats[op].unsat_intrn++)
-#define MRAK_INT_GEN(op) (coda_vfsopstats[op].gen_intrn++)
-
-extern int coda_nc_initialized;     /* Set if cache has been initialized */
-
-int
-coda_vfsopstats_init(void)
-{
-       int i;
-       
-       for (i=0;i<CODA_VFSOPS_SIZE;i++) {
-               coda_vfsopstats[i].opcode = i;
-               coda_vfsopstats[i].entries = 0;
-               coda_vfsopstats[i].sat_intrn = 0;
-               coda_vfsopstats[i].unsat_intrn = 0;
-               coda_vfsopstats[i].gen_intrn = 0;
-       }
-       
-       return 0;
-}
-
-/*
- * cfs mount vfsop
- * Set up mount info record and attach it to vfs struct.
- */
-/*ARGSUSED*/
-int
-coda_mount(struct mount *vfsp, /* Allocated and initialized by mount(2) */
-          char *path,          /* path covered: ignored by the fs-layer */
-          caddr_t data,        /* Need to define a data type for this in
-                                * netbsd? */
-          struct ucred *cred)  /* Mount credential */
-{
-    struct vnode *dvp;
-    struct cnode *cp;
-    udev_t udev;
-    struct coda_mntinfo *mi;
-    struct vnode *rootvp;
-    ViceFid rootfid;
-    ViceFid ctlfid;
-    int error;
-    struct nlookupdata nd;
-
-    ENTRY;
-
-    coda_vfsopstats_init();
-    coda_vnodeopstats_init();
-    
-    MARK_ENTRY(CODA_MOUNT_STATS);
-    if (CODA_MOUNTED(vfsp)) {
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-       return(EBUSY);
-    }
-    
-    /* Validate mount device.  Similar to getmdev(). */
-    dvp = NULL;
-    error = nlookup_init(&nd, data, UIO_USERSPACE, NLC_FOLLOW);
-    if (error == 0)
-       error = nlookup(&nd);
-    if (error == 0)
-       error = cache_vref(nd.nl_ncp, nd.nl_cred, &dvp);
-    nlookup_done(&nd);
-    if (error) {
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-       return (error);
-    }
-    if (dvp->v_type != VCHR) {
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-       vrele(dvp);
-       return(ENXIO);
-    }
-    udev = dvp->v_udev;
-    vrele(dvp);
-
-    if (uminor(udev) >= NVCODA || uminor(udev) < 0) {
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-       return(ENXIO);
-    }
-    
-    /*
-     * Initialize the mount record and link it to the vfs struct
-     */
-    mi = &coda_mnttbl[uminor(udev)];
-    
-    if (!VC_OPEN(&mi->mi_vcomm)) {
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-       return(ENODEV);
-    }
-    
-    /* No initialization (here) of mi_vcomm! */
-    vfsp->mnt_data = (qaddr_t)mi;
-    vfs_getnewfsid (vfsp);
-
-    mi->mi_vfsp = vfsp;
-    
-    /*
-     * Make a root vnode to placate the Vnode interface, but don't
-     * actually make the CODA_ROOT call to venus until the first call
-     * to coda_root in case a server is down while venus is starting.
-     */
-    rootfid.Volume = 0;
-    rootfid.Vnode = 0;
-    rootfid.Unique = 0;
-    cp = make_coda_node(&rootfid, vfsp, VDIR);
-    rootvp = CTOV(cp);
-    rootvp->v_flag |= VROOT;
-       
-    ctlfid.Volume = CTL_VOL;
-    ctlfid.Vnode = CTL_VNO;
-    ctlfid.Unique = CTL_UNI;
-/*  cp = make_coda_node(&ctlfid, vfsp, VCHR);
-    The above code seems to cause a loop in the cnode links.
-    I don't totally understand when it happens, it is caught
-    when closing down the system.
- */
-    cp = make_coda_node(&ctlfid, 0, VCHR);
-
-    coda_ctlvp = CTOV(cp);
-
-    /* Add vfs and rootvp to chain of vfs hanging off mntinfo */
-    mi->mi_vfsp = vfsp;
-    mi->mi_rootvp = rootvp;
-    
-    /* set filesystem block size */
-    vfsp->mnt_stat.f_bsize = 8192;         /* XXX -JJK */
-
-    /* Set f_iosize.  XXX -- inamura@isl.ntt.co.jp. 
-       For vnode_pager_haspage() references. The value should be obtained 
-       from underlying UFS. */
-    /* Checked UFS. iosize is set as 8192 */
-    vfsp->mnt_stat.f_iosize = 8192;
-
-    /* error is currently guaranteed to be zero, but in case some
-       code changes... */
-    CODADEBUG(1,
-            myprintf(("coda_mount returned %d\n",error)););
-    if (error)
-       MARK_INT_FAIL(CODA_MOUNT_STATS);
-    else
-       MARK_INT_SAT(CODA_MOUNT_STATS);
-    
-    return(error);
-}
-
-int
-coda_unmount(struct mount *vfsp, int mntflags)
-{
-    struct coda_mntinfo *mi = vftomi(vfsp);
-    int active, error = 0;
-    
-    ENTRY;
-    MARK_ENTRY(CODA_UMOUNT_STATS);
-    if (!CODA_MOUNTED(vfsp)) {
-       MARK_INT_FAIL(CODA_UMOUNT_STATS);
-       return(EINVAL);
-    }
-    
-    if (mi->mi_vfsp == vfsp) { /* We found the victim */
-       if (!IS_UNMOUNTING(VTOC(mi->mi_rootvp)))
-           return (EBUSY);     /* Venus is still running */
-
-#ifdef DEBUG
-       printf("coda_unmount: ROOT: vp %p, cp %p\n", mi->mi_rootvp, VTOC(mi->mi_rootvp));
-#endif
-       vrele(mi->mi_rootvp);
-
-       active = coda_kill(vfsp, NOT_DOWNCALL);
-       mi->mi_rootvp->v_flag &= ~VROOT;
-       error = vflush(mi->mi_vfsp, 0, FORCECLOSE);
-       printf("coda_unmount: active = %d, vflush active %d\n", active, error);
-       error = 0;
-       /* I'm going to take this out to allow lookups to go through. I'm
-        * not sure it's important anyway. -- DCS 2/2/94
-        */
-       /* vfsp->VFS_DATA = NULL; */
-
-       /* No more vfsp's to hold onto */
-       mi->mi_vfsp = NULL;
-       mi->mi_rootvp = NULL;
-
-       if (error)
-           MARK_INT_FAIL(CODA_UMOUNT_STATS);
-       else
-           MARK_INT_SAT(CODA_UMOUNT_STATS);
-
-       return(error);
-    }
-    return (EINVAL);
-}
-
-/*
- * find root of cfs
- */
-int
-coda_root(struct mount *vfsp, struct vnode **vpp)
-{
-    struct coda_mntinfo *mi = vftomi(vfsp);
-    struct vnode **result;
-    int error;
-    struct thread *td = curthread;    /* XXX - bnoble */
-    struct ucred *cred;
-    ViceFid VFid;
-
-    KKASSERT(td->td_proc);
-    cred = td->td_proc->p_ucred;
-
-    ENTRY;
-    MARK_ENTRY(CODA_ROOT_STATS);
-    result = NULL;
-    
-    if (vfsp == mi->mi_vfsp) {
-       if ((VTOC(mi->mi_rootvp)->c_fid.Volume != 0) ||
-           (VTOC(mi->mi_rootvp)->c_fid.Vnode != 0) ||
-           (VTOC(mi->mi_rootvp)->c_fid.Unique != 0))
-           { /* Found valid root. */
-               *vpp = mi->mi_rootvp;
-               /* On Mach, this is vref.  On NetBSD, VOP_LOCK */
-               vget(*vpp, LK_EXCLUSIVE);
-               MARK_INT_SAT(CODA_ROOT_STATS);
-               return(0);
-           }
-    }
-
-    error = venus_root(vftomi(vfsp), cred, td, &VFid);
-
-    if (!error) {
-       /*
-        * Save the new rootfid in the cnode, and rehash the cnode into the
-        * cnode hash with the new fid key.
-        */
-       coda_unsave(VTOC(mi->mi_rootvp));
-       VTOC(mi->mi_rootvp)->c_fid = VFid;
-       coda_save(VTOC(mi->mi_rootvp));
-
-       *vpp = mi->mi_rootvp;
-       vget(*vpp, LK_EXCLUSIVE);
-
-       MARK_INT_SAT(CODA_ROOT_STATS);
-       goto exit;
-    } else if (error == ENODEV || error == EINTR) {
-       /* Gross hack here! */
-       /*
-        * If Venus fails to respond to the CODA_ROOT call, coda_call returns
-        * ENODEV. Return the uninitialized root vnode to allow vfs
-        * operations such as unmount to continue. Without this hack,
-        * there is no way to do an unmount if Venus dies before a 
-        * successful CODA_ROOT call is done. All vnode operations 
-        * will fail.
-        */
-       *vpp = mi->mi_rootvp;
-       vget(*vpp, LK_EXCLUSIVE);
-
-       MARK_INT_FAIL(CODA_ROOT_STATS);
-       error = 0;
-       goto exit;
-    } else {
-       CODADEBUG( CODA_ROOT, myprintf(("error %d in CODA_ROOT\n", error)); );
-       MARK_INT_FAIL(CODA_ROOT_STATS);
-               
-       goto exit;
-    }
-
- exit:
-    return(error);
-}
-
-/*
- * Get file system statistics.
- */
-int
-coda_nb_statfs(struct mount *vfsp, struct statfs *sbp, struct ucred *cred)
-{
-    ENTRY;
-/*  MARK_ENTRY(CODA_STATFS_STATS); */
-    if (!CODA_MOUNTED(vfsp)) {
-/*     MARK_INT_FAIL(CODA_STATFS_STATS);*/
-       return(EINVAL);
-    }
-    
-    bzero(sbp, sizeof(struct statfs));
-    /* XXX - what to do about f_flags, others? --bnoble */
-    /* Below This is what AFS does
-       #define NB_SFS_SIZ 0x895440
-     */
-    /* Note: Normal fs's have a bsize of 0x400 == 1024 */
-    sbp->f_type = vfsp->mnt_vfc->vfc_typenum;
-    sbp->f_bsize = 8192; /* XXX */
-    sbp->f_iosize = 8192; /* XXX */
-#define NB_SFS_SIZ 0x8AB75D
-    sbp->f_blocks = NB_SFS_SIZ;
-    sbp->f_bfree = NB_SFS_SIZ;
-    sbp->f_bavail = NB_SFS_SIZ;
-    sbp->f_files = NB_SFS_SIZ;
-    sbp->f_ffree = NB_SFS_SIZ;
-    bcopy((caddr_t)&(vfsp->mnt_stat.f_fsid), (caddr_t)&(sbp->f_fsid), sizeof (fsid_t));
-    snprintf(sbp->f_mntfromname, sizeof(sbp->f_mntfromname), "CODA");
-/*  MARK_INT_SAT(CODA_STATFS_STATS); */
-    return(0);
-}
-
-/*
- * Flush any pending I/O.
- */
-int
-coda_sync(struct mount *vfsp, int waitfor)
-{
-    ENTRY;
-    MARK_ENTRY(CODA_SYNC_STATS);
-    MARK_INT_SAT(CODA_SYNC_STATS);
-    return(0);
-}
-
-/* 
- * fhtovp is now what vget used to be in 4.3-derived systems.  For
- * some silly reason, vget is now keyed by a 32 bit ino_t, rather than
- * a type-specific fid.  
- */
-int
-coda_fhtovp(struct mount *vfsp, struct fid *fhp, struct mbuf *nam,
-           struct vnode **vpp, int *exflagsp, struct ucred **creadanonp)
-{
-    struct cfid *cfid = (struct cfid *)fhp;
-    struct cnode *cp = 0;
-    int error;
-    struct thread *td = curthread; /* XXX -mach */
-    struct ucred *cred;
-    ViceFid VFid;
-    int vtype;
-
-    KKASSERT(td->td_proc);
-    cred = td->td_proc->p_ucred;
-
-    ENTRY;
-    
-    MARK_ENTRY(CODA_VGET_STATS);
-    /* Check for vget of control object. */
-    if (IS_CTL_FID(&cfid->cfid_fid)) {
-       *vpp = coda_ctlvp;
-       vref(coda_ctlvp);
-       MARK_INT_SAT(CODA_VGET_STATS);
-       return(0);
-    }
-    
-    error = venus_fhtovp(vftomi(vfsp), &cfid->cfid_fid, cred, td, &VFid, &vtype);
-    
-    if (error) {
-       CODADEBUG(CODA_VGET, myprintf(("vget error %d\n",error));)
-           *vpp = (struct vnode *)0;
-    } else {
-       CODADEBUG(CODA_VGET, 
-                myprintf(("vget: vol %lx vno %lx uni %lx type %d result %d\n",
-                       VFid.Volume, VFid.Vnode, VFid.Unique, vtype, error)); )
-           
-       cp = make_coda_node(&VFid, vfsp, vtype);
-       *vpp = CTOV(cp);
-    }
-    return(error);
-}
-
-/*
- * To allow for greater ease of use, some vnodes may be orphaned when
- * Venus dies.  Certain operations should still be allowed to go
- * through, but without propagating orphan-ness.  So this function will
- * get a new vnode for the file from the current run of Venus.
- */
-int
-getNewVnode(struct vnode **vpp)
-{
-    struct cfid cfid;
-    struct coda_mntinfo *mi = vftomi((*vpp)->v_mount);
-    
-    ENTRY;
-
-    cfid.cfid_len = (short)sizeof(ViceFid);
-    cfid.cfid_fid = VTOC(*vpp)->c_fid; /* Structure assignment. */
-    /* XXX ? */
-
-    /* We're guessing that if set, the 1st element on the list is a
-     * valid vnode to use. If not, return ENODEV as venus is dead.
-     */
-    if (mi->mi_vfsp == NULL)
-       return ENODEV;
-    
-    return coda_fhtovp(mi->mi_vfsp, (struct fid*)&cfid, NULL, vpp,
-                     NULL, NULL);
-}
-
-#include <vfs/ufs/quota.h>
-#include <vfs/ufs/ufsmount.h>
-
-/*
- * get the mount structure corresponding to a given device.  Assume 
- * device corresponds to a UFS. Return NULL if no device is found.
- */ 
-struct devtomp_info {
-       struct mount *ret_mp;
-       dev_t dev;
-};
-
-static int devtomp_callback(struct mount *mp, void *data);
-
-struct mount *
-devtomp(dev_t dev)
-{
-    struct devtomp_info info;
-
-    info.ret_mp = NULL;
-    info.dev = dev;
-
-    mountlist_scan(devtomp_callback, &info, MNTSCAN_FORWARD|MNTSCAN_NOBUSY);
-    return(info.ret_mp);
-}
-
-static int
-devtomp_callback(struct mount *mp, void *data)
-{
-       struct devtomp_info *info = data;
-
-       if ((VFSTOUFS(mp))->um_dev == info->dev) {
-               info->ret_mp = mp;
-               return(-1);
-       }
-       return(0);
-}
-
-struct vfsops coda_vfsops = {
-    .vfs_mount =       coda_mount,
-    .vfs_unmount =     coda_unmount,
-    .vfs_root =        coda_root,
-    .vfs_statfs =      coda_nb_statfs,
-    .vfs_sync =        coda_sync
-};
-
-VFS_SET(coda_vfsops, coda, VFCF_NETWORK);
diff --git a/sys/vfs/coda/coda_vfsops.h b/sys/vfs/coda/coda_vfsops.h
deleted file mode 100644 (file)
index 458b344..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/cfs/coda_vfsops.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/coda/coda_vfsops.h,v 1.4 1999/08/28 00:40:57 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vfsops.h,v 1.7 2006/05/06 18:48:52 dillon Exp $
- * 
- */
-
-/*
- * cfid structure:
- * This overlays the fid structure (see vfs.h)
- * Only used below and will probably go away.
- */
-
-struct cfid {
-    u_short    cfid_len;
-    u_short     padding;
-    ViceFid    cfid_fid;
-};
-
-struct mount;
-
-int coda_vfsopstats_init(void);
-int coda_mount(struct mount *, char *, caddr_t, struct ucred *);
-int coda_start(struct mount *, int, struct thread *);
-int coda_unmount(struct mount *, int);
-int coda_root(struct mount *, struct vnode **);
-int coda_quotactl(struct mount *, int, uid_t, caddr_t, struct thread *);
-int coda_nb_statfs(struct mount *, struct statfs *, struct ucred *);
-int coda_sync(struct mount *, int);
-int coda_vget(struct mount *, ino_t, struct vnode **);
-int coda_fhtovp(struct mount *, struct fid *, struct mbuf *, struct vnode **,
-                      int *, struct ucred **);
-int coda_vptofh(struct vnode *, struct fid *);
-int coda_init(struct vfsconf *vfsp);
-
-int getNewVnode(struct vnode **vpp);
diff --git a/sys/vfs/coda/coda_vnops.c b/sys/vfs/coda/coda_vnops.c
deleted file mode 100644 (file)
index 3c9a189..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_vnops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_vnops.c,v 1.22.2.1 2001/06/29 16:26:22 shafeeq Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.c,v 1.43 2006/08/12 00:26:20 dillon Exp $
- * 
- */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon
- * University.  Contributers include David Steere, James Kistler, and
- * M. Satyanarayanan.  
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/malloc.h>
-#include <sys/mount.h>
-#include <sys/errno.h>
-#include <sys/acct.h>
-#include <sys/file.h>
-#include <sys/fcntl.h>
-#include <sys/uio.h>
-#include <sys/nlookup.h>
-#include <sys/namei.h>
-#include <sys/ioccom.h>
-#include <sys/select.h>
-
-#include <vm/vm.h>
-#include <vm/vm_object.h>
-#include <vm/vm_extern.h>
-#include <vm/vm_zone.h>
-
-#include "coda.h"
-#include "cnode.h"
-#include "coda_vnops.h"
-#include "coda_venus.h"
-#include "coda_opstats.h"
-#include "coda_subr.h"
-#include "coda_namecache.h"
-#include "coda_pioctl.h"
-
-/* 
- * These flags select various performance enhancements.
- */
-int coda_attr_cache  = 1;       /* Set to cache attributes in the kernel */
-int coda_symlink_cache = 1;     /* Set to cache symbolic link information */
-int coda_access_cache = 1;      /* Set to handle some access checks directly */
-
-/* structure to keep track of vfs calls */
-
-struct coda_op_stats coda_vnodeopstats[CODA_VNODEOPS_SIZE];
-
-#define MARK_ENTRY(op) (coda_vnodeopstats[op].entries++)
-#define MARK_INT_SAT(op) (coda_vnodeopstats[op].sat_intrn++)
-#define MARK_INT_FAIL(op) (coda_vnodeopstats[op].unsat_intrn++)
-#define MARK_INT_GEN(op) (coda_vnodeopstats[op].gen_intrn++)
-
-/* What we are delaying for in printf */
-int coda_printf_delay = 0;  /* in microseconds */
-int coda_vnop_print_entry = 0;
-static int coda_lockdebug = 0;
-
-/* Definition of the vfs operation vector */
-
-/*
- * Some NetBSD details:
- * 
- *   coda_start is called at the end of the mount syscall.
- *   coda_init is called at boot time.
- */
-
-#define ENTRY  if(coda_vnop_print_entry) myprintf(("Entered %s\n",__func__))
-
-/* Definition of the vnode operation vector */
-
-static int coda_rdwr(struct vnode *vp, struct uio *uiop, enum uio_rw rw,
-                    int ioflag, struct ucred *cred, struct thread *p);
-
-static int coda_vop_error(struct vop_generic_args *ap);
-static int coda_vop_nop(struct vop_generic_args *ap);
-
-static int coda_lookup(struct vop_old_lookup_args *ap);
-static int coda_create(struct vop_old_create_args *ap);
-static int coda_open(struct vop_open_args *ap);
-static int coda_close(struct vop_close_args *ap);
-static int coda_access(struct vop_access_args *ap);
-static int coda_getattr(struct vop_getattr_args *ap);
-static int coda_setattr(struct vop_setattr_args *ap);
-static int coda_read(struct vop_read_args *ap);
-static int coda_write(struct vop_write_args *ap);
-static int coda_ioctl(struct vop_ioctl_args *ap);
-static int coda_fsync(struct vop_fsync_args *ap);
-static int coda_remove(struct vop_old_remove_args *ap);
-static int coda_link(struct vop_old_link_args *ap);
-static int coda_rename(struct vop_old_rename_args *ap);
-static int coda_mkdir(struct vop_old_mkdir_args *ap);
-static int coda_rmdir(struct vop_old_rmdir_args *ap);
-static int coda_symlink(struct vop_old_symlink_args *ap);
-static int coda_readdir(struct vop_readdir_args *ap);
-static int coda_readlink(struct vop_readlink_args *ap);
-static int coda_inactive(struct vop_inactive_args *ap);
-static int coda_reclaim(struct vop_reclaim_args *ap);
-static int coda_bmap(struct vop_bmap_args *ap);
-static int coda_strategy(struct vop_strategy_args *ap);
-
-struct vop_ops coda_vnode_ops = {
-    .vop_default =     (void *)coda_vop_error,
-    .vop_old_lookup =  coda_lookup,
-    .vop_old_create =  coda_create,
-    .vop_old_mknod =   (void *)coda_vop_error,
-    .vop_open =                coda_open,
-    .vop_close =       coda_close,
-    .vop_access =      coda_access,
-    .vop_getattr =     coda_getattr,
-    .vop_setattr =     coda_setattr,
-    .vop_read =                coda_read,
-    .vop_write =       coda_write,
-    .vop_ioctl =       coda_ioctl,
-    .vop_mmap =                (void *)coda_vop_error,
-    .vop_fsync =       coda_fsync,
-    .vop_old_remove =  coda_remove,
-    .vop_old_link =    coda_link,
-    .vop_old_rename =  coda_rename,
-    .vop_old_mkdir =   coda_mkdir,
-    .vop_old_rmdir =   coda_rmdir,
-    .vop_old_symlink = coda_symlink,
-    .vop_readdir =     coda_readdir,
-    .vop_readlink =    coda_readlink,
-    .vop_inactive =    coda_inactive,
-    .vop_reclaim =     coda_reclaim,
-    .vop_bmap =                coda_bmap,
-    .vop_strategy =    coda_strategy,
-    .vop_print =       (void *)coda_vop_error,
-    .vop_pathconf =    (void *)coda_vop_error,
-    .vop_advlock =     (void *)coda_vop_nop,
-    .vop_poll =                vop_stdpoll,
-    .vop_getpages =    coda_fbsd_getpages,
-    .vop_putpages =    coda_fbsd_putpages
-};
-
-/* A generic panic: we were called with something we didn't define yet */
-int
-coda_vop_error(struct vop_generic_args *ap)
-{
-    struct syslink_desc *desc = ap->a_desc;
-
-    myprintf(("coda_vop_error: Vnode operation %s called, but not defined.\n",
-             desc->sd_name));
-    /*
-    panic("coda_vop_error");
-    */
-    return EIO;
-}
-
-/* A generic do-nothing.  For lease_check, advlock */
-int
-coda_vop_nop(struct vop_generic_args *ap)
-{
-    struct syslink_desc *desc = ap->a_desc;
-
-    if (codadebug) {
-       myprintf(("Vnode operation %s called, but unsupported\n",
-                 desc->sd_name));
-    } 
-   return (0);
-}
-
-int
-coda_vnodeopstats_init(void)
-{
-       int i;
-       
-       for(i=0;i<CODA_VNODEOPS_SIZE;i++) {
-               coda_vnodeopstats[i].opcode = i;
-               coda_vnodeopstats[i].entries = 0;
-               coda_vnodeopstats[i].sat_intrn = 0;
-               coda_vnodeopstats[i].unsat_intrn = 0;
-               coda_vnodeopstats[i].gen_intrn = 0;
-       }
-       return 0;
-}
-               
-/* 
- * coda_open calls Venus to return the device, inode pair of the cache
- * file holding the data. Using iget, coda_open finds the vnode of the
- * cache file, and then opens it.
- */
-int
-coda_open(struct vop_open_args *ap)
-{
-    /* 
-     * NetBSD can pass the O_EXCL flag in mode, even though the check
-     * has already happened.  Venus defensively assumes that if open
-     * is passed the EXCL, it must be a bug.  We strip the flag here.
-     */
-/* true args */
-    struct vnode **vpp = &(ap->a_vp);
-    struct cnode *cp = VTOC(*vpp);
-    int flag = ap->a_mode & (~O_EXCL);
-    struct ucred *cred = ap->a_cred;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-    struct vnode *vp;
-    dev_t dev;
-    ino_t inode;
-
-    MARK_ENTRY(CODA_OPEN_STATS);
-
-    /* Check for open of control file. */
-    if (IS_CTL_VP(*vpp)) {
-       /* XXX */
-       /* if (WRITEABLE(flag)) */ 
-       if (flag & (FWRITE | O_TRUNC | O_CREAT | O_EXCL)) {
-           MARK_INT_FAIL(CODA_OPEN_STATS);
-           error = EACCES;
-           goto done;
-       }
-       MARK_INT_SAT(CODA_OPEN_STATS);
-       error = 0;
-       goto done;
-    }
-
-    error = venus_open(vtomi((*vpp)), &cp->c_fid, flag, cred, td, &dev, &inode);
-    if (error)
-       goto done;
-    if (!error) {
-       CODADEBUG( CODA_OPEN,myprintf(("open: dev %#lx inode %lu result %d\n",
-                                      (u_long)dev2udev(dev), (u_long)inode,
-                                      error)); )
-    }
-
-    /* Translate the <device, inode> pair for the cache file into
-       an inode pointer. */
-    error = coda_grab_vnode(dev, inode, &vp);
-    if (error)
-       goto done;
-
-    /* We get the vnode back locked.  Needs unlocked */
-    vn_unlock(vp);
-    /* Keep a reference until the close comes in. */
-    vref(*vpp);                
-
-    /* Save the vnode pointer for the cache file. */
-    if (cp->c_ovp == NULL) {
-       cp->c_ovp = vp;
-    } else {
-       if (cp->c_ovp != vp)
-           panic("coda_open:  cp->c_ovp != ITOV(ip)");
-    }
-    cp->c_ocount++;
-
-    /* Flush the attribute cached if writing the file. */
-    if (flag & FWRITE) {
-       cp->c_owrite++;
-       cp->c_flags &= ~C_VATTR;
-    }
-
-    /* Save the <device, inode> pair for the cache file to speed
-       up subsequent page_read's. */
-    cp->c_device = dev;
-    cp->c_inode = inode;
-
-    /* Open the cache file. */
-    error = VOP_OPEN(vp, flag, cred, NULL); 
-    if (error) {
-       printf("coda_open: VOP_OPEN on container failed %d\n", error);
-       goto done;
-    }
-/* grab (above) does this when it calls newvnode unless it's in the cache*/
-    if (vp->v_type == VREG) {
-       if (vp->v_object == NULL) {
-           error = EINVAL;
-           printf("coda_open: cache file vp %p has no VM object!\n", vp);
-           vput(vp);
-       }
-    }
-done:
-    if (error == 0)
-       vop_stdopen(ap);
-    return(error);
-}
-
-/*
- * Close the cache file used for I/O and notify Venus.
- */
-int
-coda_close(struct vop_close_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    int flag = ap->a_fflag;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-
-    MARK_ENTRY(CODA_CLOSE_STATS);
-
-    /* Check for close of control file. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_SAT(CODA_CLOSE_STATS);
-       error = 0;
-       goto done;
-    }
-
-    if (IS_UNMOUNTING(cp)) {
-       if (cp->c_ovp) {
-#ifdef CODA_VERBOSE
-           printf("coda_close: destroying container ref %d, ufs vp %p of vp %p/cp %p\n",
-                   vp->v_usecount, cp->c_ovp, vp, cp);
-#endif
-#ifdef hmm
-           vgone(cp->c_ovp);
-#else
-           VOP_CLOSE(cp->c_ovp, flag); /* Do errors matter here? */
-           vrele(cp->c_ovp);
-#endif
-       } else {
-#ifdef CODA_VERBOSE
-           printf("coda_close: NO container vp %p/cp %p\n", vp, cp);
-#endif
-       }
-       error = ENODEV;
-       goto done;
-    } else {
-       VOP_CLOSE(cp->c_ovp, flag); /* Do errors matter here? */
-       vrele(cp->c_ovp);
-    }
-
-    if (--cp->c_ocount == 0)
-       cp->c_ovp = NULL;
-
-    if (flag & FWRITE)                    /* file was opened for write */
-       --cp->c_owrite;
-
-    error = venus_close(vtomi(vp), &cp->c_fid, flag, proc0.p_ucred, td);
-    vrele(CTOV(cp));
-
-    CODADEBUG(CODA_CLOSE, myprintf(("close: result %d\n",error)); )
-done:
-    vop_stdclose(ap);
-    return(error);
-}
-
-int
-coda_read(struct vop_read_args *ap)
-{
-    ENTRY;
-    return(coda_rdwr(ap->a_vp, ap->a_uio, UIO_READ,
-                   ap->a_ioflag, ap->a_cred, ap->a_uio->uio_td));
-}
-
-int
-coda_write(struct vop_write_args *ap)
-{
-    ENTRY;
-    return(coda_rdwr(ap->a_vp, ap->a_uio, UIO_WRITE,
-                   ap->a_ioflag, ap->a_cred, ap->a_uio->uio_td));
-}
-
-int
-coda_rdwr(struct vnode *vp, struct uio *uiop, enum uio_rw rw, int ioflag,
-         struct ucred *cred, struct thread *td)
-{ 
-/* upcall decl */
-  /* NOTE: container file operation!!! */
-/* locals */
-    struct cnode *cp = VTOC(vp);
-    struct vnode *cfvp = cp->c_ovp;
-    int igot_internally = 0;
-    int opened_internally = 0;
-    int error = 0;
-
-    MARK_ENTRY(CODA_RDWR_STATS);
-
-    CODADEBUG(CODA_RDWR, myprintf(("coda_rdwr(%d, %p, %d, %lld, %d)\n", rw, 
-                             (void *)uiop->uio_iov->iov_base, uiop->uio_resid, 
-                             (long long)uiop->uio_offset, uiop->uio_segflg)); )
-       
-    /* Check for rdwr of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_RDWR_STATS);
-       return(EINVAL);
-    }
-
-    /* 
-     * If file is not already open this must be a page
-     * {read,write} request.  Iget the cache file's inode
-     * pointer if we still have its <device, inode> pair.
-     * Otherwise, we must do an internal open to derive the
-     * pair. 
-     */
-    if (cfvp == NULL) {
-       /* 
-        * If we're dumping core, do the internal open. Otherwise
-        * venus won't have the correct size of the core when
-        * it's completely written.
-        */
-       if (cp->c_inode != 0 && (ioflag & IO_CORE) == 0) { 
-           igot_internally = 1;
-           error = coda_grab_vnode(cp->c_device, cp->c_inode, &cfvp);
-           if (error) {
-               MARK_INT_FAIL(CODA_RDWR_STATS);
-               return(error);
-           }
-           /* 
-            * We get the vnode back locked in both Mach and
-            * NetBSD.  Needs unlocked 
-            */
-           vn_unlock(cfvp);
-       }
-       else {
-           opened_internally = 1;
-           MARK_INT_GEN(CODA_OPEN_STATS);
-           error = VOP_OPEN(vp, (rw == UIO_READ ? FREAD : FWRITE), cred, NULL);
-printf("coda_rdwr: Internally Opening %p\n", vp);
-           if (error) {
-               printf("coda_rdwr: VOP_OPEN on container failed %d\n", error);
-               return (error);
-           }
-           if (vp->v_type == VREG) {
-               if (vp->v_object == NULL) {
-                   error = EINVAL;
-                   printf("coda_rdwr: vnode %p has no VM object!\n", vp);
-                   vput(vp);
-               }
-           }
-           if (error) {
-               MARK_INT_FAIL(CODA_RDWR_STATS);
-               return(error);
-           }
-           cfvp = cp->c_ovp;
-       }
-    }
-
-    /* Have UFS handle the call. */
-    CODADEBUG(CODA_RDWR, myprintf(("indirect rdwr: fid = (%lx.%lx.%lx), refcnt = %d\n",
-                             cp->c_fid.Volume, cp->c_fid.Vnode, 
-                             cp->c_fid.Unique, CTOV(cp)->v_usecount)); )
-
-
-    if (rw == UIO_READ) {
-       error = VOP_READ(cfvp, uiop, ioflag, cred);
-    } else {
-       error = VOP_WRITE(cfvp, uiop, ioflag, cred);
-       /* ufs_write updates the vnode_pager_setsize for the vnode/object */
-
-       {   struct vattr attr;
-
-           if (VOP_GETATTR(cfvp, &attr) == 0) {
-               vnode_pager_setsize(vp, attr.va_size);
-           }
-       }
-    }
-
-    if (error)
-       MARK_INT_FAIL(CODA_RDWR_STATS);
-    else
-       MARK_INT_SAT(CODA_RDWR_STATS);
-
-    /* Do an internal close if necessary. */
-    if (opened_internally) {
-       MARK_INT_GEN(CODA_CLOSE_STATS);
-       VOP_CLOSE(vp, (rw == UIO_READ ? FREAD : FWRITE));
-    }
-
-    /* Invalidate cached attributes if writing. */
-    if (rw == UIO_WRITE)
-       cp->c_flags &= ~C_VATTR;
-    return(error);
-}
-
-int
-coda_ioctl(struct vop_ioctl_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    int com = ap->a_command;
-    caddr_t data = ap->a_data;
-    int flag = ap->a_fflag;
-    struct ucred *cred = ap->a_cred;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-    struct vnode *tvp;
-    struct nlookupdata nd;
-    struct PioctlData *iap = (struct PioctlData *)data;
-
-    MARK_ENTRY(CODA_IOCTL_STATS);
-
-    CODADEBUG(CODA_IOCTL, myprintf(("in coda_ioctl on %s\n", iap->path));)
-       
-    /* Don't check for operation on a dying object, for ctlvp it
-       shouldn't matter */
-       
-    /* Must be control object to succeed. */
-    if (!IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_IOCTL_STATS);
-       CODADEBUG(CODA_IOCTL, myprintf(("coda_ioctl error: vp != ctlvp"));)
-           return (EOPNOTSUPP);
-    }
-    /* Look up the pathname. */
-
-    /* Should we use the name cache here? It would get it from
-       lookupname sooner or later anyway, right? */
-
-    tvp = NULL;
-    error = nlookup_init(&nd, iap->path, UIO_USERSPACE,
-                       (iap->follow ? NLC_FOLLOW : 0));
-    if (error == 0)
-       error = nlookup(&nd);
-    if (error == 0)
-       error = cache_vref(nd.nl_ncp, nd.nl_cred, &tvp);
-    nlookup_done(&nd);
-
-    if (error) {
-       MARK_INT_FAIL(CODA_IOCTL_STATS);
-       CODADEBUG(CODA_IOCTL, myprintf(("coda_ioctl error: lookup returns %d\n",
-                                  error));)
-       return(error);
-    }
-
-    /* 
-     * Make sure this is a coda style cnode, but it may be a
-     * different vfsp 
-     */
-    if (tvp->v_tag != VT_CODA) {
-       vrele(tvp);
-       MARK_INT_FAIL(CODA_IOCTL_STATS);
-       CODADEBUG(CODA_IOCTL, 
-                myprintf(("coda_ioctl error: %s not a coda object\n", 
-                       iap->path));)
-       return(EINVAL);
-    }
-
-    if (iap->vi.in_size > VC_MAXDATASIZE) {
-       vrele(tvp);
-       return(EINVAL);
-    }
-    error = venus_ioctl(vtomi(tvp), &((VTOC(tvp))->c_fid), com, flag, data, cred, td);
-
-    if (error)
-       MARK_INT_FAIL(CODA_IOCTL_STATS);
-    else
-       CODADEBUG(CODA_IOCTL, myprintf(("Ioctl returns %d \n", error)); )
-
-    vrele(tvp);
-    return(error);
-}
-
-/*
- * To reduce the cost of a user-level venus;we cache attributes in
- * the kernel.  Each cnode has storage allocated for an attribute. If
- * c_vattr is valid, return a reference to it. Otherwise, get the
- * attributes from venus and store them in the cnode.  There is some
- * question if this method is a security leak. But I think that in
- * order to make this call, the user must have done a lookup and
- * opened the file, and therefore should already have access.  
- */
-int
-coda_getattr(struct vop_getattr_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct vattr *vap = ap->a_vap;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-
-    MARK_ENTRY(CODA_GETATTR_STATS);
-
-    if (IS_UNMOUNTING(cp))
-       return ENODEV;
-
-    /* Check for getattr of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_GETATTR_STATS);
-       return(ENOENT);
-    }
-
-    /* Check to see if the attributes have already been cached */
-    if (VALID_VATTR(cp)) { 
-       CODADEBUG(CODA_GETATTR, { myprintf(("attr cache hit: (%lx.%lx.%lx)\n",
-                                      cp->c_fid.Volume,
-                                      cp->c_fid.Vnode,
-                                      cp->c_fid.Unique));});
-       CODADEBUG(CODA_GETATTR, if (!(codadebug & ~CODA_GETATTR))
-                print_vattr(&cp->c_vattr); );
-       
-       *vap = cp->c_vattr;
-       MARK_INT_SAT(CODA_GETATTR_STATS);
-       return(0);
-    }
-
-    error = venus_getattr(vtomi(vp), &cp->c_fid, proc0.p_ucred, td, vap);
-
-    if (!error) {
-       CODADEBUG(CODA_GETATTR, myprintf(("getattr miss (%lx.%lx.%lx): result %d\n",
-                                    cp->c_fid.Volume,
-                                    cp->c_fid.Vnode,
-                                    cp->c_fid.Unique,
-                                    error)); )
-           
-       CODADEBUG(CODA_GETATTR, if (!(codadebug & ~CODA_GETATTR))
-                print_vattr(vap);      );
-       
-    {  int size = vap->va_size;
-       struct vnode *convp = cp->c_ovp;
-       if (convp != (struct vnode *)0) {
-           vnode_pager_setsize(convp, size);
-       }
-    }
-       /* If not open for write, store attributes in cnode */   
-       if ((cp->c_owrite == 0) && (coda_attr_cache)) {  
-           cp->c_vattr = *vap;
-           cp->c_flags |= C_VATTR; 
-       }
-       
-    }
-    return(error);
-}
-
-int
-coda_setattr(struct vop_setattr_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct vattr *vap = ap->a_vap;
-    struct ucred *cred = ap->a_cred;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-
-    MARK_ENTRY(CODA_SETATTR_STATS);
-
-    /* Check for setattr of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_SETATTR_STATS);
-       return(ENOENT);
-    }
-
-    if (codadebug & CODADBGMSK(CODA_SETATTR)) {
-       print_vattr(vap);
-    }
-    error = venus_setattr(vtomi(vp), &cp->c_fid, vap, cred, td);
-
-    if (!error)
-       cp->c_flags &= ~C_VATTR;
-
-    {  int size = vap->va_size;
-       struct vnode *convp = cp->c_ovp;
-       if (size != VNOVAL && convp != (struct vnode *)0) {
-           vnode_pager_setsize(convp, size);
-       }
-    }
-    CODADEBUG(CODA_SETATTR,    myprintf(("setattr %d\n", error)); )
-    return(error);
-}
-
-int
-coda_access(struct vop_access_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    int mode = ap->a_mode;
-    struct ucred *cred = ap->a_cred;
-    struct thread *td = curthread;
-/* locals */
-    int error;
-
-    MARK_ENTRY(CODA_ACCESS_STATS);
-
-    /* Check for access of control object.  Only read access is
-       allowed on it. */
-    if (IS_CTL_VP(vp)) {
-       /* bogus hack - all will be marked as successes */
-       MARK_INT_SAT(CODA_ACCESS_STATS);
-       return(((mode & VREAD) && !(mode & (VWRITE | VEXEC))) 
-              ? 0 : EACCES);
-    }
-
-    /*
-     * if the file is a directory, and we are checking exec (eg lookup) 
-     * access, and the file is in the namecache, then the user must have 
-     * lookup access to it.
-     */
-    if (coda_access_cache) {
-       if ((vp->v_type == VDIR) && (mode & VEXEC)) {
-           if (coda_nc_lookup(cp, ".", 1, cred)) {
-               MARK_INT_SAT(CODA_ACCESS_STATS);
-               return(0);                     /* it was in the cache */
-           }
-       }
-    }
-
-    error = venus_access(vtomi(vp), &cp->c_fid, mode, cred, td);
-
-    return(error);
-}
-
-int
-coda_readlink(struct vop_readlink_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct uio *uiop = ap->a_uio;
-    struct ucred *cred = ap->a_cred;
-    struct thread *td = ap->a_uio->uio_td;
-/* locals */
-    int error;
-    char *str;
-    int len;
-
-    MARK_ENTRY(CODA_READLINK_STATS);
-
-    /* Check for readlink of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_READLINK_STATS);
-       return(ENOENT);
-    }
-
-    if ((coda_symlink_cache) && (VALID_SYMLINK(cp))) { /* symlink was cached */
-       uiop->uio_rw = UIO_READ;
-       error = uiomove(cp->c_symlink, (int)cp->c_symlen, uiop);
-       if (error)
-           MARK_INT_FAIL(CODA_READLINK_STATS);
-       else
-           MARK_INT_SAT(CODA_READLINK_STATS);
-       return(error);
-    }
-
-    error = venus_readlink(vtomi(vp), &cp->c_fid, cred, td, &str, &len);
-
-    if (!error) {
-       uiop->uio_rw = UIO_READ;
-       error = uiomove(str, len, uiop);
-
-       if (coda_symlink_cache) {
-           cp->c_symlink = str;
-           cp->c_symlen = len;
-           cp->c_flags |= C_SYMLINK;
-       } else
-           CODA_FREE(str, len);
-    }
-
-    CODADEBUG(CODA_READLINK, myprintf(("in readlink result %d\n",error));)
-    return(error);
-}
-
-int
-coda_fsync(struct vop_fsync_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct thread *td = curthread;
-/* locals */
-    struct vnode *convp = cp->c_ovp;
-    int error;
-   
-    MARK_ENTRY(CODA_FSYNC_STATS);
-
-    /* Check for fsync on an unmounting object */
-    /* The NetBSD kernel, in it's infinite wisdom, can try to fsync
-     * after an unmount has been initiated.  This is a Bad Thing,
-     * which we have to avoid.  Not a legitimate failure for stats.
-     */
-    if (IS_UNMOUNTING(cp)) {
-       return(ENODEV);
-    }
-
-    /* Check for fsync of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_SAT(CODA_FSYNC_STATS);
-       return(0);
-    }
-
-    if (convp)
-       VOP_FSYNC(convp, MNT_WAIT);
-
-    /*
-     * We see fsyncs with usecount == 1 then usecount == 0.
-     * For now we ignore them.
-     */
-    /*
-    if (!vp->v_usecount) {
-       printf("coda_fsync on vnode %p with %d usecount.  c_flags = %x (%x)\n",
-               vp, vp->v_usecount, cp->c_flags, cp->c_flags&C_PURGING);
-    }
-    */
-
-    /*
-     * We can expect fsync on any vnode at all if venus is pruging it.
-     * Venus can't very well answer the fsync request, now can it?
-     * Hopefully, it won't have to, because hopefully, venus preserves
-     * the (possibly untrue) invariant that it never purges an open
-     * vnode.  Hopefully.
-     */
-    if (cp->c_flags & C_PURGING) {
-       return(0);
-    }
-
-    /* needs research */
-    return 0;
-    error = venus_fsync(vtomi(vp), &cp->c_fid, proc0.p_ucred, td);
-
-    CODADEBUG(CODA_FSYNC, myprintf(("in fsync result %d\n",error)); );
-    return(error);
-}
-
-int
-coda_inactive(struct vop_inactive_args *ap)
-{
-    /* XXX - at the moment, inactive doesn't look at cred, and doesn't
-       have a proc pointer.  Oops. */
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct ucred *cred __attribute__((unused)) = NULL;
-    /*struct thread *td = curthread;*/
-/* upcall decl */
-/* locals */
-
-    /* We don't need to send inactive to venus - DCS */
-    MARK_ENTRY(CODA_INACTIVE_STATS);
-
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_SAT(CODA_INACTIVE_STATS);
-       return 0;
-    }
-
-    CODADEBUG(CODA_INACTIVE, myprintf(("in inactive, %lx.%lx.%lx. vfsp %p\n",
-                                 cp->c_fid.Volume, cp->c_fid.Vnode, 
-                                 cp->c_fid.Unique, vp->v_mount));)
-
-    /* If an array has been allocated to hold the symlink, deallocate it */
-    if ((coda_symlink_cache) && (VALID_SYMLINK(cp))) {
-       if (cp->c_symlink == NULL)
-           panic("coda_inactive: null symlink pointer in cnode");
-       
-       CODA_FREE(cp->c_symlink, cp->c_symlen);
-       cp->c_flags &= ~C_SYMLINK;
-       cp->c_symlen = 0;
-    }
-
-    /* Remove it from the table so it can't be found. */
-    coda_unsave(cp);
-    if ((struct coda_mntinfo *)(vp->v_mount->mnt_data) == NULL) {
-       myprintf(("Help! vfsp->vfs_data was NULL, but vnode %p wasn't dying\n", vp));
-       panic("badness in coda_inactive\n");
-    }
-
-    if (IS_UNMOUNTING(cp)) {
-#ifdef DEBUG
-       printf("coda_inactive: IS_UNMOUNTING use %d: vp %p, cp %p\n", vp->v_usecount, vp, cp);
-       if (cp->c_ovp != NULL)
-           printf("coda_inactive: cp->ovp != NULL use %d: vp %p, cp %p\n",
-                  vp->v_usecount, vp, cp);
-#endif
-    } else {
-#ifdef OLD_DIAGNOSTIC
-       if (CTOV(cp)->v_usecount) {
-           panic("coda_inactive: nonzero reference count");
-       }
-       if (cp->c_ovp != NULL) {
-           panic("coda_inactive:  cp->ovp != NULL");
-       }
-#endif
-       vgone(vp);
-    }
-
-    MARK_INT_SAT(CODA_INACTIVE_STATS);
-    return(0);
-}
-
-/*
- * Remote file system operations having to do with directory manipulation.
- */
-
-/* 
- * It appears that in NetBSD, lookup is supposed to return the vnode locked
- */
-int
-coda_lookup(struct vop_old_lookup_args *ap)
-{
-/* true args */
-    struct vnode *dvp = ap->a_dvp;
-    struct cnode *dcp = VTOC(dvp);
-    struct vnode **vpp = ap->a_vpp;
-    /* 
-     * It looks as though ap->a_cnp->ni_cnd->cn_nameptr holds the rest
-     * of the string to xlate, and that we must try to get at least
-     * ap->a_cnp->ni_cnd->cn_namelen of those characters to macth.  I
-     * could be wrong. 
-     */
-    struct componentname  *cnp = ap->a_cnp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* locals */
-    struct cnode *cp;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    ViceFid VFid;
-    int        vtype;
-    int error = 0;
-
-    MARK_ENTRY(CODA_LOOKUP_STATS);
-
-    CODADEBUG(CODA_LOOKUP, myprintf(("lookup: %s in %lx.%lx.%lx\n",
-                                  nm, dcp->c_fid.Volume,
-                                  dcp->c_fid.Vnode, dcp->c_fid.Unique)););
-
-    /* Check for lookup of control object. */
-    if (IS_CTL_NAME(dvp, nm, len)) {
-       *vpp = coda_ctlvp;
-       vref(*vpp);
-       MARK_INT_SAT(CODA_LOOKUP_STATS);
-       goto exit;
-    }
-
-    if (len+1 > CODA_MAXNAMLEN) {
-       MARK_INT_FAIL(CODA_LOOKUP_STATS);
-       CODADEBUG(CODA_LOOKUP, myprintf(("name too long: lookup, %lx.%lx.%lx(%s)\n",
-                                   dcp->c_fid.Volume, dcp->c_fid.Vnode,
-                                   dcp->c_fid.Unique, nm)););
-       *vpp = (struct vnode *)0;
-       error = EINVAL;
-       goto exit;
-    }
-    /* First try to look the file up in the cfs name cache */
-    /* lock the parent vnode? */
-    cp = coda_nc_lookup(dcp, nm, len, cred);
-    if (cp) {
-       *vpp = CTOV(cp);
-       vref(*vpp);
-       CODADEBUG(CODA_LOOKUP, 
-                myprintf(("lookup result %d vpp %p\n",error,*vpp));)
-    } else {
-       
-       /* The name wasn't cached, so we need to contact Venus */
-       error = venus_lookup(vtomi(dvp), &dcp->c_fid, nm, len, cred, td, &VFid, &vtype);
-       
-       if (error) {
-           MARK_INT_FAIL(CODA_LOOKUP_STATS);
-           CODADEBUG(CODA_LOOKUP, myprintf(("lookup error on %lx.%lx.%lx(%s)%d\n",
-                                       dcp->c_fid.Volume, dcp->c_fid.Vnode, dcp->c_fid.Unique, nm, error));)
-           *vpp = (struct vnode *)0;
-       } else {
-           MARK_INT_SAT(CODA_LOOKUP_STATS);
-           CODADEBUG(CODA_LOOKUP, 
-                    myprintf(("lookup: vol %lx vno %lx uni %lx type %o result %d\n",
-                           VFid.Volume, VFid.Vnode, VFid.Unique, vtype,
-                           error)); )
-               
-           cp = make_coda_node(&VFid, dvp->v_mount, vtype);
-           *vpp = CTOV(cp);
-           
-           /* enter the new vnode in the Name Cache only if the top bit isn't set */
-           /* And don't enter a new vnode for an invalid one! */
-           if (!(vtype & CODA_NOCACHE))
-               coda_nc_enter(VTOC(dvp), nm, len, cred, VTOC(*vpp));
-       }
-    }
-
- exit:
-    /* 
-     * If we are creating, and this was the last name to be looked up,
-     * and the error was ENOENT, then there really shouldn't be an
-     * error and we can make the leaf NULL and return success.  Since
-     * this is supposed to work under Mach as well as NetBSD, we're
-     * leaving this fn wrapped.  We also must tell lookup/namei that
-     * we need to save the last component of the name.  (Create will
-     * have to free the name buffer later...lucky us...)
-     */
-    if ((cnp->cn_nameiop == NAMEI_CREATE || cnp->cn_nameiop == NAMEI_RENAME)
-       && error == ENOENT)
-    {
-       error = EJUSTRETURN;
-       *ap->a_vpp = NULL;
-    }
-
-    /* 
-     * If the lookup went well, we need to (potentially?) unlock the
-     * parent, and lock the child.  We are only responsible for
-     * checking to see if the parent is supposed to be unlocked before
-     * we return.  We must always lock the child (provided there is
-     * one, and (the parent isn't locked or it isn't the same as the
-     * parent.)  Simple, huh?  We can never leave the parent locked unless
-     * we are ISLASTCN
-     */
-    if (!error || (error == EJUSTRETURN)) {
-       if ((cnp->cn_flags & CNP_LOCKPARENT) == 0) {
-           vn_unlock(dvp);
-           /* 
-            * The parent is unlocked.  As long as there is a child,
-            * lock it without bothering to check anything else. 
-            */
-           if (*ap->a_vpp) {
-               if ((error = vn_lock(*ap->a_vpp, LK_EXCLUSIVE))) {
-                   printf("coda_lookup: ");
-                   panic("unlocked parent but couldn't lock child");
-               }
-           }
-       } else {
-           /* The parent is locked, and may be the same as the child */
-           if (*ap->a_vpp && (*ap->a_vpp != dvp)) {
-               /* Different, go ahead and lock it. */
-               if ((error = vn_lock(*ap->a_vpp, LK_EXCLUSIVE))) {
-                   printf("coda_lookup: ");
-                   panic("unlocked parent but couldn't lock child");
-               }
-           }
-       }
-    } else {
-       /* If the lookup failed, we need to ensure that the leaf is NULL */
-       /* Don't change any locking? */
-       *ap->a_vpp = NULL;
-    }
-    return(error);
-}
-
-/*ARGSUSED*/
-int
-coda_create(struct vop_old_create_args *ap)
-{
-/* true args */
-    struct vnode *dvp = ap->a_dvp;
-    struct cnode *dcp = VTOC(dvp);
-    struct vattr *va = ap->a_vap;
-    int exclusive = 1;
-    int mode = ap->a_vap->va_mode;
-    struct vnode **vpp = ap->a_vpp;
-    struct componentname  *cnp = ap->a_cnp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* locals */
-    int error;
-    struct cnode *cp;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    ViceFid VFid;
-    struct vattr attr;
-
-    MARK_ENTRY(CODA_CREATE_STATS);
-
-    /* All creates are exclusive XXX */
-    /* I'm assuming the 'mode' argument is the file mode bits XXX */
-
-    /* Check for create of control object. */
-    if (IS_CTL_NAME(dvp, nm, len)) {
-       *vpp = (struct vnode *)0;
-       MARK_INT_FAIL(CODA_CREATE_STATS);
-       return(EACCES);
-    }
-
-    error = venus_create(vtomi(dvp), &dcp->c_fid, nm, len, exclusive, mode, va, cred, td, &VFid, &attr);
-
-    if (!error) {
-       
-       /* If this is an exclusive create, panic if the file already exists. */
-       /* Venus should have detected the file and reported EEXIST. */
-
-       if ((exclusive == 1) &&
-           (coda_find(&VFid) != NULL))
-           panic("cnode existed for newly created file!");
-       
-       cp = make_coda_node(&VFid, dvp->v_mount, attr.va_type);
-       *vpp = CTOV(cp);
-       
-       /* Update va to reflect the new attributes. */
-       (*va) = attr;
-       
-       /* Update the attribute cache and mark it as valid */
-       if (coda_attr_cache) {
-           VTOC(*vpp)->c_vattr = attr;
-           VTOC(*vpp)->c_flags |= C_VATTR;       
-       }
-
-       /* Invalidate the parent's attr cache, the modification time has changed */
-       VTOC(dvp)->c_flags &= ~C_VATTR;
-       
-       /* enter the new vnode in the Name Cache */
-       coda_nc_enter(VTOC(dvp), nm, len, cred, VTOC(*vpp));
-       
-       CODADEBUG(CODA_CREATE, 
-                myprintf(("create: (%lx.%lx.%lx), result %d\n",
-                       VFid.Volume, VFid.Vnode, VFid.Unique, error)); )
-    } else {
-       *vpp = (struct vnode *)0;
-       CODADEBUG(CODA_CREATE, myprintf(("create error %d\n", error));)
-    }
-
-    if (!error) {
-       if ((error = vn_lock(*ap->a_vpp, LK_EXCLUSIVE))) {
-           printf("coda_create: ");
-           panic("unlocked parent but couldn't lock child");
-       }
-    }
-    return(error);
-}
-
-int
-coda_remove(struct vop_old_remove_args *ap)
-{
-/* true args */
-    struct vnode *dvp = ap->a_dvp;
-    struct cnode *cp = VTOC(dvp);
-    struct componentname  *cnp = ap->a_cnp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* locals */
-    int error;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    struct cnode *tp;
-
-    MARK_ENTRY(CODA_REMOVE_STATS);
-
-    CODADEBUG(CODA_REMOVE, myprintf(("remove: %s in %lx.%lx.%lx\n",
-                                  nm, cp->c_fid.Volume, cp->c_fid.Vnode,
-                                  cp->c_fid.Unique)););
-
-    /* Remove the file's entry from the CODA Name Cache */
-    /* We're being conservative here, it might be that this person
-     * doesn't really have sufficient access to delete the file
-     * but we feel zapping the entry won't really hurt anyone -- dcs
-     */
-    /* I'm gonna go out on a limb here. If a file and a hardlink to it
-     * exist, and one is removed, the link count on the other will be
-     * off by 1. We could either invalidate the attrs if cached, or
-     * fix them. I'll try to fix them. DCS 11/8/94
-     */
-    tp = coda_nc_lookup(VTOC(dvp), nm, len, cred);
-    if (tp) {
-       if (VALID_VATTR(tp)) {  /* If attrs are cached */
-           if (tp->c_vattr.va_nlink > 1) {     /* If it's a hard link */
-               tp->c_vattr.va_nlink--;
-           }
-       }
-       
-       coda_nc_zapfile(VTOC(dvp), nm, len); 
-       /* No need to flush it if it doesn't exist! */
-    }
-    /* Invalidate the parent's attr cache, the modification time has changed */
-    VTOC(dvp)->c_flags &= ~C_VATTR;
-
-    /* Check for remove of control object. */
-    if (IS_CTL_NAME(dvp, nm, len)) {
-       MARK_INT_FAIL(CODA_REMOVE_STATS);
-       return(ENOENT);
-    }
-
-    error = venus_remove(vtomi(dvp), &cp->c_fid, nm, len, cred, td);
-
-    CODADEBUG(CODA_REMOVE, myprintf(("in remove result %d\n",error)); )
-
-    return(error);
-}
-
-int
-coda_link(struct vop_old_link_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct vnode *tdvp = ap->a_tdvp;
-    struct cnode *tdcp = VTOC(tdvp);
-    struct componentname *cnp = ap->a_cnp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* locals */
-    int error;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-
-    MARK_ENTRY(CODA_LINK_STATS);
-
-    if (codadebug & CODADBGMSK(CODA_LINK)) {
-
-       myprintf(("nb_link:   vp fid: (%lx.%lx.%lx)\n",
-                 cp->c_fid.Volume, cp->c_fid.Vnode, cp->c_fid.Unique));
-       myprintf(("nb_link: tdvp fid: (%lx.%lx.%lx)\n",
-                 tdcp->c_fid.Volume, tdcp->c_fid.Vnode, tdcp->c_fid.Unique));
-       
-    }
-    if (codadebug & CODADBGMSK(CODA_LINK)) {
-       myprintf(("link:   vp fid: (%lx.%lx.%lx)\n",
-                 cp->c_fid.Volume, cp->c_fid.Vnode, cp->c_fid.Unique));
-       myprintf(("link: tdvp fid: (%lx.%lx.%lx)\n",
-                 tdcp->c_fid.Volume, tdcp->c_fid.Vnode, tdcp->c_fid.Unique));
-
-    }
-
-    /* Check for link to/from control object. */
-    if (IS_CTL_NAME(tdvp, nm, len) || IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_LINK_STATS);
-       return(EACCES);
-    }
-
-    error = venus_link(vtomi(vp), &cp->c_fid, &tdcp->c_fid, nm, len, cred, td);
-
-    /* Invalidate the parent's attr cache, the modification time has changed */
-    VTOC(tdvp)->c_flags &= ~C_VATTR;
-    VTOC(vp)->c_flags &= ~C_VATTR;
-
-    CODADEBUG(CODA_LINK,       myprintf(("in link result %d\n",error)); )
-
-    return(error);
-}
-
-int
-coda_rename(struct vop_old_rename_args *ap)
-{
-/* true args */
-    struct vnode *odvp = ap->a_fdvp;
-    struct cnode *odcp = VTOC(odvp);
-    struct componentname  *fcnp = ap->a_fcnp;
-    struct vnode *ndvp = ap->a_tdvp;
-    struct cnode *ndcp = VTOC(ndvp);
-    struct componentname  *tcnp = ap->a_tcnp;
-    struct ucred *cred = fcnp->cn_cred;
-    struct thread *td = fcnp->cn_td;
-/* true args */
-    int error;
-    const char *fnm = fcnp->cn_nameptr;
-    int flen = fcnp->cn_namelen;
-    const char *tnm = tcnp->cn_nameptr;
-    int tlen = tcnp->cn_namelen;
-
-    MARK_ENTRY(CODA_RENAME_STATS);
-
-    /* Hmmm.  The vnodes are already looked up.  Perhaps they are locked?
-       This could be Bad. XXX */
-#ifdef OLD_DIAGNOSTIC
-    if ((fcnp->cn_cred != tcnp->cn_cred) || (fcnp->cn_td != tcnp->cn_td))
-    {
-       panic("coda_rename: component names don't agree");
-    }
-#endif
-
-    /* Check for rename involving control object. */ 
-    if (IS_CTL_NAME(odvp, fnm, flen) || IS_CTL_NAME(ndvp, tnm, tlen)) {
-       MARK_INT_FAIL(CODA_RENAME_STATS);
-       return(EACCES);
-    }
-
-    /* Problem with moving directories -- need to flush entry for .. */
-    if (odvp != ndvp) {
-       struct cnode *ovcp = coda_nc_lookup(VTOC(odvp), fnm, flen, cred);
-       if (ovcp) {
-           struct vnode *ovp = CTOV(ovcp);
-           if ((ovp) &&
-               (ovp->v_type == VDIR)) /* If it's a directory */
-               coda_nc_zapfile(VTOC(ovp),"..", 2);
-       }
-    }
-
-    /* Remove the entries for both source and target files */
-    coda_nc_zapfile(VTOC(odvp), fnm, flen);
-    coda_nc_zapfile(VTOC(ndvp), tnm, tlen);
-
-    /* Invalidate the parent's attr cache, the modification time has changed */
-    VTOC(odvp)->c_flags &= ~C_VATTR;
-    VTOC(ndvp)->c_flags &= ~C_VATTR;
-
-    if (flen+1 > CODA_MAXNAMLEN) {
-       MARK_INT_FAIL(CODA_RENAME_STATS);
-       error = EINVAL;
-       goto exit;
-    }
-
-    if (tlen+1 > CODA_MAXNAMLEN) {
-       MARK_INT_FAIL(CODA_RENAME_STATS);
-       error = EINVAL;
-       goto exit;
-    }
-
-    error = venus_rename(vtomi(odvp), &odcp->c_fid, &ndcp->c_fid, fnm, flen, tnm, tlen, cred, td);
-
- exit:
-    CODADEBUG(CODA_RENAME, myprintf(("in rename result %d\n",error));)
-
-    /* It seems to be incumbent on us to drop locks on all four vnodes */
-    /* From-vnodes are not locked, only ref'd.  To-vnodes are locked. */
-
-    vrele(ap->a_fvp);
-    vrele(odvp);
-
-    if (ap->a_tvp) {
-       if (ap->a_tvp == ndvp) {
-           vrele(ap->a_tvp);
-       } else {
-           vput(ap->a_tvp);
-       }
-    }
-
-    vput(ndvp);
-    return(error);
-}
-
-int
-coda_mkdir(struct vop_old_mkdir_args *ap)
-{
-/* true args */
-    struct vnode *dvp = ap->a_dvp;
-    struct cnode *dcp = VTOC(dvp);     
-    struct componentname  *cnp = ap->a_cnp;
-    struct vattr *va = ap->a_vap;
-    struct vnode **vpp = ap->a_vpp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* locals */
-    int error;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    struct cnode *cp;
-    ViceFid VFid;
-    struct vattr ova;
-
-    MARK_ENTRY(CODA_MKDIR_STATS);
-
-    /* Check for mkdir of target object. */
-    if (IS_CTL_NAME(dvp, nm, len)) {
-       *vpp = (struct vnode *)0;
-       MARK_INT_FAIL(CODA_MKDIR_STATS);
-       return(EACCES);
-    }
-
-    if (len+1 > CODA_MAXNAMLEN) {
-       *vpp = (struct vnode *)0;
-       MARK_INT_FAIL(CODA_MKDIR_STATS);
-       return(EACCES);
-    }
-
-    error = venus_mkdir(vtomi(dvp), &dcp->c_fid, nm, len, va, cred, td, &VFid, &ova);
-
-    if (!error) {
-       if (coda_find(&VFid) != NULL)
-           panic("cnode existed for newly created directory!");
-       
-       
-       cp =  make_coda_node(&VFid, dvp->v_mount, va->va_type);
-       *vpp = CTOV(cp);
-       
-       /* enter the new vnode in the Name Cache */
-       coda_nc_enter(VTOC(dvp), nm, len, cred, VTOC(*vpp));
-
-       /* as a side effect, enter "." and ".." for the directory */
-       coda_nc_enter(VTOC(*vpp), ".", 1, cred, VTOC(*vpp));
-       coda_nc_enter(VTOC(*vpp), "..", 2, cred, VTOC(dvp));
-
-       if (coda_attr_cache) {
-           VTOC(*vpp)->c_vattr = ova;          /* update the attr cache */
-           VTOC(*vpp)->c_flags |= C_VATTR;     /* Valid attributes in cnode */
-       }
-
-       /* Invalidate the parent's attr cache, the modification time has changed */
-       VTOC(dvp)->c_flags &= ~C_VATTR;
-       
-       CODADEBUG( CODA_MKDIR, myprintf(("mkdir: (%lx.%lx.%lx) result %d\n",
-                                   VFid.Volume, VFid.Vnode, VFid.Unique, error)); )
-    } else {
-       *vpp = (struct vnode *)0;
-       CODADEBUG(CODA_MKDIR, myprintf(("mkdir error %d\n",error));)
-    }
-
-    return(error);
-}
-
-int
-coda_rmdir(struct vop_old_rmdir_args *ap)
-{
-/* true args */
-    struct vnode *dvp = ap->a_dvp;
-    struct cnode *dcp = VTOC(dvp);
-    struct componentname  *cnp = ap->a_cnp;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-/* true args */
-    int error;
-    const char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    struct cnode *cp;
-   
-    MARK_ENTRY(CODA_RMDIR_STATS);
-
-    /* Check for rmdir of control object. */
-    if (IS_CTL_NAME(dvp, nm, len)) {
-       MARK_INT_FAIL(CODA_RMDIR_STATS);
-       return(ENOENT);
-    }
-
-    /* We're being conservative here, it might be that this person
-     * doesn't really have sufficient access to delete the file
-     * but we feel zapping the entry won't really hurt anyone -- dcs
-     */
-    /*
-     * As a side effect of the rmdir, remove any entries for children of
-     * the directory, especially "." and "..".
-     */
-    cp = coda_nc_lookup(dcp, nm, len, cred);
-    if (cp) coda_nc_zapParentfid(&(cp->c_fid), NOT_DOWNCALL);
-
-    /* Remove the file's entry from the CODA Name Cache */
-    coda_nc_zapfile(dcp, nm, len);
-
-    /* Invalidate the parent's attr cache, the modification time has changed */
-    dcp->c_flags &= ~C_VATTR;
-
-    error = venus_rmdir(vtomi(dvp), &dcp->c_fid, nm, len, cred, td);
-
-    CODADEBUG(CODA_RMDIR, myprintf(("in rmdir result %d\n", error)); )
-
-    return(error);
-}
-
-int
-coda_symlink(struct vop_old_symlink_args *ap)
-{
-/* true args */
-    struct vnode *tdvp = ap->a_dvp;
-    struct cnode *tdcp = VTOC(tdvp);   
-    struct componentname *cnp = ap->a_cnp;
-    struct vattr *tva = ap->a_vap;
-    char *path = ap->a_target;
-    struct ucred *cred = cnp->cn_cred;
-    struct thread *td = cnp->cn_td;
-    struct vnode **vpp = ap->a_vpp;
-/* locals */
-    int error;
-    /* 
-     * XXX I'm assuming the following things about coda_symlink's
-     * arguments: 
-     *       t(foo) is the new name/parent/etc being created.
-     *       lname is the contents of the new symlink. 
-     */
-    char *nm = cnp->cn_nameptr;
-    int len = cnp->cn_namelen;
-    int plen = strlen(path);
-
-    /* 
-     * Here's the strategy for the moment: perform the symlink, then
-     * do a lookup to grab the resulting vnode.  I know this requires
-     * two communications with Venus for a new sybolic link, but
-     * that's the way the ball bounces.  I don't yet want to change
-     * the way the Mach symlink works.  When Mach support is
-     * deprecated, we should change symlink so that the common case
-     * returns the resultant vnode in a vpp argument.
-     */
-
-    MARK_ENTRY(CODA_SYMLINK_STATS);
-
-    /* Check for symlink of control object. */
-    if (IS_CTL_NAME(tdvp, nm, len)) {
-       MARK_INT_FAIL(CODA_SYMLINK_STATS);
-       return(EACCES);
-    }
-
-    if (plen+1 > CODA_MAXPATHLEN) {
-       MARK_INT_FAIL(CODA_SYMLINK_STATS);
-       return(EINVAL);
-    }
-
-    if (len+1 > CODA_MAXNAMLEN) {
-       MARK_INT_FAIL(CODA_SYMLINK_STATS);
-       error = EINVAL;
-       goto exit;
-    }
-
-    error = venus_symlink(vtomi(tdvp), &tdcp->c_fid, path, plen, nm, len, tva, cred, td);
-
-    /* Invalidate the parent's attr cache, the modification time has changed */
-    tdcp->c_flags &= ~C_VATTR;
-
-    if (error == 0)
-       error = VOP_OLD_LOOKUP(tdvp, vpp, cnp);
-
- exit:    
-    CODADEBUG(CODA_SYMLINK, myprintf(("in symlink result %d\n",error)); )
-    return(error);
-}
-
-/*
- * Read directory entries.
- */
-int
-coda_readdir(struct vop_readdir_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-    struct uio *uiop = ap->a_uio;
-    struct ucred *cred = ap->a_cred;
-    int *eofflag = ap->a_eofflag;
-    u_long **cookies = ap->a_cookies;
-    int *ncookies = ap->a_ncookies;
-/* upcall decl */
-/* locals */
-    int error = 0;
-
-    MARK_ENTRY(CODA_READDIR_STATS);
-
-    CODADEBUG(CODA_READDIR, myprintf(("coda_readdir(%p, %d, %lld, %d)\n",
-                                     (void *)uiop->uio_iov->iov_base,
-                                     uiop->uio_resid,
-                                     (long long)uiop->uio_offset,
-                                     uiop->uio_segflg)); )
-       
-    /* Check for readdir of control object. */
-    if (IS_CTL_VP(vp)) {
-       MARK_INT_FAIL(CODA_READDIR_STATS);
-       return(ENOENT);
-    }
-
-    {
-       /* If directory is not already open do an "internal open" on it. */
-       int opened_internally = 0;
-       if (cp->c_ovp == NULL) {
-           opened_internally = 1;
-           MARK_INT_GEN(CODA_OPEN_STATS);
-           error = VOP_OPEN(vp, FREAD, cred, NULL);
-printf("coda_readdir: Internally Opening %p\n", vp);
-           if (error) {
-               printf("coda_readdir: VOP_OPEN on container failed %d\n", error);
-               return (error);
-           }
-           if (vp->v_type == VREG) {
-               if (vp->v_object == NULL) {
-                   error = EINVAL;
-                   printf("coda_readdir: vnode %p has no VM object!\n", vp);
-                   vput(vp);
-               }
-           }
-           if (error) return(error);
-       }
-       
-       /* Have UFS handle the call. */
-       CODADEBUG(CODA_READDIR, myprintf(("indirect readdir: fid = (%lx.%lx.%lx), refcnt = %d\n",cp->c_fid.Volume, cp->c_fid.Vnode, cp->c_fid.Unique, vp->v_usecount)); )
-       error = VOP_READDIR(cp->c_ovp, uiop, cred, eofflag, ncookies,
-                              cookies);
-       
-       if (error)
-           MARK_INT_FAIL(CODA_READDIR_STATS);
-       else
-           MARK_INT_SAT(CODA_READDIR_STATS);
-       
-       /* Do an "internal close" if necessary. */ 
-       if (opened_internally) {
-           MARK_INT_GEN(CODA_CLOSE_STATS);
-           VOP_CLOSE(vp, FREAD);
-       }
-    }
-
-    return(error);
-}
-
-/*
- * Convert from file system blocks to device blocks
- */
-int
-coda_bmap(struct vop_bmap_args *ap)
-{
-    /* XXX on the global proc */
-    int ret = 0;
-    struct cnode *cp;
-
-    cp = VTOC(ap->a_vp);
-    if (cp->c_ovp) {
-           return EINVAL;
-#if 0
-           ret =  VOP_BMAP(cp->c_ovp, bn, vpp, bnp, ap->a_runp, ap->a_runb);
-           printf("VOP_BMAP(cp->c_ovp %p, bn %p, vpp %p, bnp %p, ap->a_runp %p, ap->a_runb %p) = %d\n",
-                   cp->c_ovp, bn, vpp, bnp, ap->a_runp, ap->a_runb, ret);
-#endif
-           return ret;
-    } else {
-#if 0
-           printf("coda_bmap: no container\n");
-#endif
-           return(EOPNOTSUPP);
-    }
-}
-
-/*
- * I don't think the following two things are used anywhere, so I've
- * commented them out 
- * 
- * struct buf *async_bufhead; 
- * int async_daemon_count;
- */
-int
-coda_strategy(struct vop_strategy_args *ap __unused)
-{
-       printf("coda_strategy: called ???\n");
-       return(EOPNOTSUPP);
-}
-
-int
-coda_reclaim(struct vop_reclaim_args *ap)
-{
-/* true args */
-    struct vnode *vp = ap->a_vp;
-    struct cnode *cp = VTOC(vp);
-/* upcall decl */
-/* locals */
-
-/*
- * Forced unmount/flush will let vnodes with non zero use be destroyed!
- */
-    ENTRY;
-
-    if (IS_UNMOUNTING(cp)) {
-#ifdef DEBUG
-       if (VTOC(vp)->c_ovp) {
-           if (IS_UNMOUNTING(cp))
-               printf("coda_reclaim: c_ovp not void: vp %p, cp %p\n", vp, cp);
-       }
-#endif
-    } else {
-#ifdef OLD_DIAGNOSTIC
-       if (vp->v_usecount != 0) 
-           print("coda_reclaim: pushing active %p\n", vp);
-       if (VTOC(vp)->c_ovp) {
-           panic("coda_reclaim: c_ovp not void");
-    }
-#endif
-    }  
-    coda_free(VTOC(vp));
-    vp->v_data = NULL;
-    return (0);
-}
-
-/* How one looks up a vnode given a device/inode pair: */
-int
-coda_grab_vnode(dev_t dev, ino_t ino, struct vnode **vpp)
-{
-    /* This is like VFS_VGET() or igetinode()! */
-    int           error;
-    struct mount *mp;
-
-    if (!(mp = devtomp(dev))) {
-       myprintf(("coda_grab_vnode: devtomp(%#lx) returns NULL\n",
-                 (u_long)dev2udev(dev)));
-       return(ENXIO);
-    }
-
-    /* XXX - ensure that nonzero-return means failure */
-    error = VFS_VGET(mp,ino,vpp);
-    if (error) {
-       myprintf(("coda_grab_vnode: iget/vget(%lx, %lu) returns %p, err %d\n", 
-                 (u_long)dev2udev(dev), (u_long)ino, (void *)*vpp, error));
-       return(ENOENT);
-    }
-    return(0);
-}
-
-void
-print_vattr(struct vattr *attr)
-{
-    char *typestr;
-
-    switch (attr->va_type) {
-    case VNON:
-       typestr = "VNON";
-       break;
-    case VREG:
-       typestr = "VREG";
-       break;
-    case VDIR:
-       typestr = "VDIR";
-       break;
-    case VBLK:
-       typestr = "VBLK";
-       break;
-    case VCHR:
-       typestr = "VCHR";
-       break;
-    case VLNK:
-       typestr = "VLNK";
-       break;
-    case VSOCK:
-       typestr = "VSCK";
-       break;
-    case VFIFO:
-       typestr = "VFFO";
-       break;
-    case VBAD:
-       typestr = "VBAD";
-       break;
-    default:
-       typestr = "????";
-       break;
-    }
-
-
-    myprintf(("attr: type %s mode %d uid %d gid %d fsid %d rdev %d\n",
-             typestr, (int)attr->va_mode, (int)attr->va_uid,
-             (int)attr->va_gid, (int)attr->va_fsid, (int)attr->va_rdev));
-
-    myprintf(("      fileid %d nlink %d size %d blocksize %d bytes %d\n",
-             (int)attr->va_fileid, (int)attr->va_nlink, 
-             (int)attr->va_size,
-             (int)attr->va_blocksize,(int)attr->va_bytes));
-    myprintf(("      gen %ld flags %ld vaflags %d\n",
-             attr->va_gen, attr->va_flags, attr->va_vaflags));
-    myprintf(("      atime sec %d nsec %d\n",
-             (int)attr->va_atime.tv_sec, (int)attr->va_atime.tv_nsec));
-    myprintf(("      mtime sec %d nsec %d\n",
-             (int)attr->va_mtime.tv_sec, (int)attr->va_mtime.tv_nsec));
-    myprintf(("      ctime sec %d nsec %d\n",
-             (int)attr->va_ctime.tv_sec, (int)attr->va_ctime.tv_nsec));
-}
-
-/* How to print a ucred */
-void
-print_cred(struct ucred *cred)
-{
-
-       int i;
-
-       myprintf(("ref %d\tuid %d\n",cred->cr_ref,cred->cr_uid));
-
-       for (i=0; i < cred->cr_ngroups; i++)
-               myprintf(("\tgroup %d: (%d)\n",i,cred->cr_groups[i]));
-       myprintf(("\n"));
-
-}
-
-/*
- * Return a vnode for the given fid.
- * If no cnode exists for this fid create one and put it
- * in a table hashed by fid.Volume and fid.Vnode.  If the cnode for
- * this fid is already in the table return it (ref count is
- * incremented by coda_find.  The cnode will be flushed from the
- * table when coda_inactive calls coda_unsave.
- */
-struct cnode *
-make_coda_node(ViceFid *fid, struct mount *vfsp, short type)
-{
-    struct cnode *cp;
-    int          err;
-
-    if ((cp = coda_find(fid)) == NULL) {
-       struct vnode *vp;
-       
-       cp = coda_alloc();
-       cp->c_fid = *fid;
-       
-       err = getnewvnode(VT_CODA, vfsp, &vp, 0, 0);
-       if (err) {                                                
-           panic("coda: getnewvnode returned error %d\n", err);   
-       }                                                         
-       vp->v_data = cp;                                          
-       vp->v_type = type;                                      
-       cp->c_vnode = vp;                                         
-       coda_save(cp);
-       vx_unlock(vp);
-    } else {
-       vref(CTOV(cp));
-    }
-
-    return cp;
-}
diff --git a/sys/vfs/coda/coda_vnops.h b/sys/vfs/coda/coda_vnops.h
deleted file mode 100644 (file)
index 06b0f65..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 
- *             Coda: an Experimental Distributed File System
- *                              Release 3.1
- * 
- *           Copyright (c) 1987-1998 Carnegie Mellon University
- *                          All Rights Reserved
- * 
- * Permission  to  use, copy, modify and distribute this software and its
- * documentation is hereby granted,  provided  that  both  the  copyright
- * notice  and  this  permission  notice  appear  in  all  copies  of the
- * software, derivative works or  modified  versions,  and  any  portions
- * thereof, and that both notices appear in supporting documentation, and
- * that credit is given to Carnegie Mellon University  in  all  documents
- * and publicity pertaining to direct or indirect use of this code or its
- * derivatives.
- * 
- * CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS  KNOWN  TO  HAVE  BUGS,
- * SOME  OF  WHICH MAY HAVE SERIOUS CONSEQUENCES.  CARNEGIE MELLON ALLOWS
- * FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION.   CARNEGIE  MELLON
- * DISCLAIMS  ANY  LIABILITY  OF  ANY  KIND  FOR  ANY  DAMAGES WHATSOEVER
- * RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE  OR  OF
- * ANY DERIVATIVE WORK.
- * 
- * Carnegie  Mellon  encourages  users  of  this  software  to return any
- * improvements or extensions that  they  make,  and  to  grant  Carnegie
- * Mellon the rights to redistribute these changes without encumbrance.
- * 
- *     @(#) src/sys/coda/coda_vnops.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
- * $FreeBSD: src/sys/coda/coda_vnops.h,v 1.6 1999/08/28 00:40:58 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.h,v 1.9 2006/07/19 05:59:54 dillon Exp $
- * 
-  */
-
-/* 
- * Mach Operating System
- * Copyright (c) 1990 Carnegie-Mellon University
- * Copyright (c) 1989 Carnegie-Mellon University
- * All rights reserved.  The CMU software License Agreement specifies
- * the terms and conditions for use and redistribution.
- */
-
-/*
- * This code was written for the Coda file system at Carnegie Mellon
- * University.  Contributers include David Steere, James Kistler, and
- * M. Satyanarayanan.  
- */
-
-int coda_fbsd_getpages(struct vop_getpages_args *ap);
-int coda_fbsd_putpages(struct vop_putpages_args *ap);
-
-int coda_grab_vnode(dev_t dev, ino_t ino, struct vnode **vpp);
-void print_vattr(struct vattr *attr);
-void print_cred(struct ucred *cred);
-
-