Solaris: Default to fs_pathconf in afs_pathconf
[openafs.git] / src / afs / SOLARIS / osi_vnodeops.c
index 212b10f..acb7879 100644 (file)
@@ -10,8 +10,6 @@
 #include <afsconfig.h>
 #include "afs/param.h"
 
-RCSID
-    ("$Header$");
 
 /*
  * SOLARIS/osi_vnodeops.c
@@ -47,32 +45,14 @@ RCSID
 #include <vm/seg_map.h>
 #include <vm/seg_vn.h>
 #include <vm/rm.h>
+#if defined(AFS_SUN511_ENV)
+#include <sys/vfs_opreg.h>
+#endif
 #include <sys/modctl.h>
 #include <sys/syscall.h>
 #include <sys/debug.h>
 #include <sys/fs_subr.h>
 
-/* 
- * XXX Temporary fix for problems with Solaris rw_tryupgrade() lock.
- * It isn't very persistent in getting the upgrade when others are
- * waiting for it and returns 0.  So the UpgradeSToW() macro that the
- * rw_tryupgrade used to map to wasn't good enough and we need to use
- * the following code instead.  Obviously this isn't the proper place
- * for it but it's only called from here for now
- * 
- */
-#ifndef        AFS_SUN54_ENV
-AFS_TRYUP(lock)
-     afs_rwlock_t *lock;
-{
-    if (!rw_tryupgrade(lock)) {
-       rw_exit(lock);
-       rw_enter(lock, RW_WRITER);
-    }
-}
-#endif
-
-
 /* Translate a faultcode_t as returned by some of the vm routines
  * into a suitable errno value.
  */
@@ -103,26 +83,18 @@ int afs_dump(), afs_cmp(), afs_realvp(), afs_GetOnePage();
 int afs_pvn_vptrunc;
 
 int
-afs_addmap(avp, offset, asp, addr, length, prot, maxprot, flags, credp)
-     register struct vnode *avp;
-     offset_t offset;
-     struct as *asp;
-     caddr_t addr;
-     int length, prot, maxprot, flags;
-     struct AFS_UCRED *credp;
+afs_addmap(register struct vnode *avp, offset_t offset, struct as *asp, 
+          caddr_t addr, int length, int prot, int maxprot, int flags, 
+          AFS_UCRED *credp)
 {
     /* XXX What should we do here?? XXX */
     return (0);
 }
 
 int
-afs_delmap(avp, offset, asp, addr, length, prot, maxprot, flags, credp)
-     register struct vnode *avp;
-     offset_t offset;
-     struct as *asp;
-     caddr_t addr;
-     int length, prot, maxprot, flags;
-     struct AFS_UCRED *credp;
+afs_delmap(register struct vnode *avp, offset_t offset, struct as *asp, 
+          caddr_t addr, int length, int prot, int maxprot, int flags, 
+          AFS_UCRED *credp)
 {
     /* XXX What should we do here?? XXX */
     return (0);
@@ -130,19 +102,12 @@ afs_delmap(avp, offset, asp, addr, length, prot, maxprot, flags, credp)
 
 #ifdef AFS_SUN510_ENV
 int
-afs_vmread(avp, auio, ioflag, acred, ct)
-     register struct vnode *avp;
-     struct uio *auio;
-     int ioflag;
-     struct AFS_UCRED *acred;
-     caller_context_t *ct;
+afs_vmread(register struct vnode *avp, struct uio *auio, int ioflag, 
+          AFS_UCRED *acred, caller_context_t *ct)
 #else
 int
-afs_vmread(avp, auio, ioflag, acred)
-     register struct vnode *avp;
-     struct uio *auio;
-     int ioflag;
-     struct AFS_UCRED *acred;
+afs_vmread(register struct vnode *avp, struct uio *auio, int ioflag, 
+          AFS_UCRED *acred)
 #endif
 {
     register int code;
@@ -158,19 +123,12 @@ afs_vmread(avp, auio, ioflag, acred)
 
 #ifdef AFS_SUN510_ENV
 int
-afs_vmwrite(avp, auio, ioflag, acred, ct)
-     register struct vnode *avp;
-     struct uio *auio;
-     int ioflag;
-     struct AFS_UCRED *acred;
-     caller_context_t *ct;
+afs_vmwrite(register struct vnode *avp, struct uio *auio, int ioflag, 
+           AFS_UCRED *acred, caller_context_t *ct)
 #else
 int
-afs_vmwrite(avp, auio, ioflag, acred)
-     register struct vnode *avp;
-     struct uio *auio;
-     int ioflag;
-     struct AFS_UCRED *acred;
+afs_vmwrite(register struct vnode *avp, struct uio *auio, int ioflag, 
+           AFS_UCRED *acred)
 #endif
 {
     register int code;
@@ -184,17 +142,9 @@ afs_vmwrite(avp, auio, ioflag, acred)
 }
 
 int
-afs_getpage(vp, off, len, protp, pl, plsz, seg, addr, rw, acred)
-     struct vnode *vp;
-     u_int len;
-     u_int *protp;
-     struct page *pl[];
-     u_int plsz;
-     struct seg *seg;
-     offset_t off;
-     caddr_t addr;
-     enum seg_rw rw;
-     struct AFS_UCRED *acred;
+afs_getpage(struct vnode *vp, offset_t off, u_int len, u_int *protp, 
+           struct page *pl[], u_int plsz, struct seg *seg, caddr_t addr, 
+           enum seg_rw rw, AFS_UCRED *acred)
 {
     register afs_int32 code = 0;
     AFS_STATCNT(afs_getpage);
@@ -204,32 +154,25 @@ afs_getpage(vp, off, len, protp, pl, plsz, seg, addr, rw, acred)
 
     AFS_GLOCK();
 
-#if    defined(AFS_SUN56_ENV)
-    if (len <= PAGESIZE)
-       code =
-           afs_GetOnePage(vp, off, len, protp, pl, plsz, seg, addr, rw,
-                          acred);
-#else
     if (len <= PAGESIZE)
        code =
-           afs_GetOnePage(vp, (u_int) off, len, protp, pl, plsz, seg, addr,
-                          rw, acred);
+           afs_GetOnePage(vp, 
+#if !defined(AFS_SUN56_ENV)
+                          (u_int)
 #endif
+                          off, len, protp, pl, plsz, seg, addr, rw, acred);
     else {
        struct vcache *vcp = VTOAFS(vp);
        ObtainWriteLock(&vcp->vlock, 548);
        vcp->multiPage++;
        ReleaseWriteLock(&vcp->vlock);
        afs_BozonLock(&vcp->pvnLock, vcp);
-#if    defined(AFS_SUN56_ENV)
-       code =
-           pvn_getpages(afs_GetOnePage, vp, off, len, protp, pl, plsz, seg,
-                        addr, rw, acred);
-#else
        code =
-           pvn_getpages(afs_GetOnePage, vp, (u_int) off, len, protp, pl,
-                        plsz, seg, addr, rw, acred);
+           pvn_getpages(afs_GetOnePage, vp, 
+#if !defined(AFS_SUN56_ENV)
+                        (u_int)
 #endif
+                        off, len, protp, pl, plsz, seg, addr, rw, acred);
        afs_BozonUnlock(&vcp->pvnLock, vcp);
        ObtainWriteLock(&vcp->vlock, 549);
        vcp->multiPage--;
@@ -241,21 +184,15 @@ afs_getpage(vp, off, len, protp, pl, plsz, seg, addr, rw, acred)
 
 /* Return all the pages from [off..off+len) in file */
 int
-afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
-     u_int alen;
-     struct vnode *vp;
 #if    defined(AFS_SUN56_ENV)
-     u_offset_t off;
+afs_GetOnePage(struct vnode *vp, u_offset_t off, u_int alen, u_int *protp, 
+              struct page *pl[], u_int plsz, struct seg *seg, caddr_t addr, 
+              enum seg_rw rw, AFS_UCRED *acred)
 #else
-     u_int off;
+afs_GetOnePage(struct vnode *vp, u_int off, u_int alen, u_int *protp, 
+              struct page *pl[], u_int plsz, struct seg *seg, caddr_t addr, 
+              enum seg_rw rw, AFS_UCRED *acred)
 #endif
-     u_int *protp;
-     struct page *pl[];
-     u_int plsz;
-     struct seg *seg;
-     caddr_t addr;
-     enum seg_rw rw;
-     struct AFS_UCRED *acred;
 {
     register struct page *page;
     register afs_int32 code = 0;
@@ -266,7 +203,7 @@ afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
     register struct dcache *tdc;
     int i, s, pexists;
     int slot;
-    afs_size_t offset, nlen;
+    afs_size_t offset, nlen = 0;
     struct vrequest treq;
     afs_int32 mapForRead = 0, Code = 0;
     u_offset_t toffset;
@@ -360,7 +297,7 @@ afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
     else
        tdc = afs_GetDCache(avc, (afs_offs_t) off, &treq, &offset, &nlen, 1);
     if (!tdc)
-       return EINVAL;
+       return afs_CheckCode(EINVAL, &treq, 62);
     code = afs_VerifyVCache(avc, &treq);
     if (code) {
        afs_PutDCache(tdc);
@@ -403,8 +340,8 @@ afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
     ObtainReadLock(&tdc->lock);
 
     /* Check to see whether the cache entry is still valid */
-    if (!(avc->states & CStatd)
-       || !hsame(avc->m.DataVersion, tdc->f.versionNo)) {
+    if (!(avc->f.states & CStatd)
+       || !hsame(avc->f.m.DataVersion, tdc->f.versionNo)) {
        ReleaseReadLock(&tdc->lock);
        ReleaseReadLock(&avc->lock);
        afs_BozonUnlock(&avc->pvnLock, avc);
@@ -457,7 +394,11 @@ afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
            buf = pageio_setup(page, PAGESIZE, vp, B_READ);     /* allocate a buf structure */
            buf->b_edev = 0;
            buf->b_dev = 0;
+#if defined(AFS_SUN56_ENV)
+           buf->b_lblkno = lbtodb(toffset);
+#else
            buf->b_blkno = btodb(toffset);
+#endif
            bp_mapin(buf);      /* map it in to our address space */
 
            AFS_GLOCK();
@@ -537,12 +478,8 @@ afs_GetOnePage(vp, off, alen, protp, pl, plsz, seg, addr, rw, acred)
 }
 
 int
-afs_putpage(vp, off, len, flags, cred)
-     struct vnode *vp;
-     offset_t off;
-     u_int len;
-     int flags;
-     struct AFS_UCRED *cred;
+afs_putpage(struct vnode *vp, offset_t off, u_int len, int flags, 
+           AFS_UCRED *cred)
 {
     struct vcache *avc;
     struct page *pages;
@@ -581,7 +518,7 @@ afs_putpage(vp, off, len, flags, cred)
     if (len) {
        endPos = (afs_offs_t) off + len;        /* position we're supposed to write up to */
        while ((afs_offs_t) toff < endPos
-              && (afs_offs_t) toff < avc->m.Length) {
+              && (afs_offs_t) toff < avc->f.m.Length) {
            /* If not invalidating pages use page_lookup_nowait to avoid reclaiming
             * them from the free list
             */
@@ -645,18 +582,16 @@ afs_putpage(vp, off, len, flags, cred)
 
 
 int
-afs_putapage(struct vnode *vp, struct page *pages,
-#if    defined(AFS_SUN56_ENV)
-            u_offset_t * offp,
+#if defined(AFS_SUN58_ENV)
+afs_putapage(struct vnode *vp, struct page *pages, u_offset_t * offp,
+            size_t * lenp, int flags, AFS_UCRED *credp)
+#elif defined(AFS_SUN56_ENV)
+afs_putapage(struct vnode *vp, struct page *pages, u_offset_t * offp,
+            u_int * lenp, int flags, AFS_UCRED *credp)
 #else
-            u_int * offp,
+afs_putapage(struct vnode *vp, struct page *pages, u_int * offp,
+            u_int * lenp, int flags, AFS_UCRED *credp)
 #endif
-#if    defined(AFS_SUN58_ENV)
-            size_t * lenp,
-#else
-            u_int * lenp,
-#endif
-            int flags, struct AFS_UCRED *credp)
 {
     struct buf *tbuf;
     struct vcache *avc = VTOAFS(vp);
@@ -669,8 +604,8 @@ afs_putapage(struct vnode *vp, struct page *pages,
      * XXX Find a kluster that fits in one block (or page). We also
      * adjust the i/o if the file space is less than a while page. XXX
      */
-    if (off + tlen > avc->m.Length) {
-       tlen = avc->m.Length - off;
+    if (off + tlen > avc->f.m.Length) {
+       tlen = avc->f.m.Length - off;
     }
     /* can't call mapout with 0 length buffers (rmfree panics) */
     if (((tlen >> 24) & 0xff) == 0xff) {
@@ -685,7 +620,11 @@ afs_putapage(struct vnode *vp, struct page *pages,
            return (ENOMEM);
 
        tbuf->b_dev = 0;
+#if defined(AFS_SUN56_ENV)
+       tbuf->b_lblkno = lbtodb(pages->p_offset);
+#else
        tbuf->b_blkno = btodb(pages->p_offset);
+#endif
        bp_mapin(tbuf);
        AFS_GLOCK();
        afs_Trace4(afs_iclSetp, CM_TRACE_PAGEOUTONE, ICL_TYPE_LONG, avc,
@@ -706,12 +645,8 @@ afs_putapage(struct vnode *vp, struct page *pages,
 }
 
 int
-afs_nfsrdwr(avc, auio, arw, ioflag, acred)
-     register struct vcache *avc;
-     struct uio *auio;
-     enum uio_rw arw;
-     int ioflag;
-     struct AFS_UCRED *acred;
+afs_nfsrdwr(register struct vcache *avc, struct uio *auio, enum uio_rw arw,
+           int ioflag, AFS_UCRED *acred)
 {
     register afs_int32 code;
     afs_int32 code2;
@@ -743,7 +678,7 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
 
     afs_Trace4(afs_iclSetp, CM_TRACE_VMRW, ICL_TYPE_POINTER, (afs_int32) avc,
               ICL_TYPE_LONG, (arw == UIO_WRITE ? 1 : 0), ICL_TYPE_OFFSET,
-              ICL_HANDLE_OFFSET(auio->uio_offset), ICL_TYPE_OFFSET,
+              ICL_HANDLE_OFFSET(auio->uio_loffset), ICL_TYPE_OFFSET,
               ICL_HANDLE_OFFSET(auio->uio_resid));
 
 #ifndef AFS_64BIT_CLIENT
@@ -762,9 +697,9 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
      */
     afs_MaybeWakeupTruncateDaemon();
     while ((arw == UIO_WRITE)
-          && (afs_blocksUsed > (CM_WAITFORDRAINPCT * afs_cacheBlocks) / 100)) {
+          && (afs_blocksUsed > PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks))) {
        if (afs_blocksUsed - afs_blocksDiscarded >
-           (CM_WAITFORDRAINPCT * afs_cacheBlocks) / 100) {
+           PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks)) {
            afs_WaitForCacheDrain = 1;
            afs_osi_Sleep(&afs_WaitForCacheDrain);
        }
@@ -782,12 +717,13 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
 
     /* adjust parameters when appending files */
     if ((ioflag & IO_APPEND) && arw == UIO_WRITE) {
-#if    defined(AFS_SUN56_ENV)
-       auio->uio_loffset = 0;
+#if defined(AFS_SUN56_ENV)
+       auio->uio_loffset = avc->f.m.Length;    /* write at EOF position */
+#else
+       auio->uio_offset = avc->f.m.Length;     /* write at EOF position */
 #endif
-       auio->uio_offset = avc->m.Length;       /* write at EOF position */
     }
-    if (auio->uio_offset < 0 || (auio->uio_offset + auio->uio_resid) < 0) {
+    if (auio->afsio_offset < 0 || (auio->afsio_offset + auio->uio_resid) < 0) {
        ReleaseWriteLock(&avc->lock);
        afs_BozonUnlock(&avc->pvnLock, avc);
        return EINVAL;
@@ -847,19 +783,19 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
         * to hold the results (since afs_putpage will be called to force the I/O */
        size = auio->afsio_resid + auio->afsio_offset;  /* new file size */
        appendLength = size;
-       origLength = avc->m.Length;
-       if (size > avc->m.Length) {
+       origLength = avc->f.m.Length;
+       if (size > avc->f.m.Length) {
            afs_Trace4(afs_iclSetp, CM_TRACE_SETLENGTH, ICL_TYPE_STRING,
                       __FILE__, ICL_TYPE_LONG, __LINE__, ICL_TYPE_OFFSET,
-                      ICL_HANDLE_OFFSET(avc->m.Length), ICL_TYPE_OFFSET,
+                      ICL_HANDLE_OFFSET(avc->f.m.Length), ICL_TYPE_OFFSET,
                       ICL_HANDLE_OFFSET(size));
-           avc->m.Length = size;       /* file grew */
+           avc->f.m.Length = size;     /* file grew */
        }
-       avc->states |= CDirty;  /* Set the dirty bit */
-       avc->m.Date = osi_Time();       /* Set file date (for ranlib) */
+       avc->f.states |= CDirty;        /* Set the dirty bit */
+       avc->f.m.Date = osi_Time();     /* Set file date (for ranlib) */
     } else {
        mode = S_READ;          /* map-in read-only */
-       origLength = avc->m.Length;
+       origLength = avc->f.m.Length;
     }
 
     if (acred && AFS_NFSXLATORREQ(acred)) {
@@ -886,8 +822,9 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
         * call it with an offset based on blocks smaller than MAXBSIZE
         * (implying that it should be named BSIZE, since it is clearly both a
         * max and a min). */
-       size = auio->afsio_resid;       /* transfer size */
-       fileBase = auio->afsio_offset;  /* start file position for xfr */
+       size = auio->afsio_resid;       /* transfer size */     
+       fileBase = ((arw == UIO_READ) && (origLength < auio->uio_offset)) ? 
+           origLength : auio->afsio_offset;  /* start file position for xfr */
        pageBase = fileBase & ~(MAXBSIZE - 1);  /* file position of the page */
        pageOffset = fileBase & (MAXBSIZE - 1); /* xfr start's offset within page */
        tsize = MAXBSIZE - pageOffset;  /* how much more fits in this page */
@@ -927,7 +864,7 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
            break;              /* nothing to transfer, we're done */
        }
        if (arw == UIO_WRITE)
-           avc->states |= CDirty;      /* may have been cleared by DoPartialWrite */
+           avc->f.states |= CDirty;    /* may have been cleared by DoPartialWrite */
 
        /* Before dropping lock, hold the chunk (create it if necessary).  This
         * serves two purposes:  (1) Ensure Cache Truncate Daemon doesn't try
@@ -986,12 +923,12 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
                AFS_GLOCK();
                dcp_newpage = afs_FindDCache(avc, pageBase);
                if (dcp_newpage
-                   && hsame(avc->m.DataVersion, dcp_newpage->f.versionNo)) {
+                   && hsame(avc->f.m.DataVersion, dcp_newpage->f.versionNo)) {
                    ObtainWriteLock(&avc->lock, 251);
                    ObtainWriteLock(&avc->vlock, 576);
                    ObtainReadLock(&dcp_newpage->lock);
                    if ((avc->activeV == 0)
-                       && hsame(avc->m.DataVersion, dcp_newpage->f.versionNo)
+                       && hsame(avc->f.m.DataVersion, dcp_newpage->f.versionNo)
                        && !(dcp_newpage->dflags & (DFFetching))) {
                        AFS_GUNLOCK();
                        segmap_pagecreate(segkmap, raddr, rsize, 1);
@@ -1038,7 +975,7 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
     if (didFakeOpen) {
        afs_FakeClose(avc, acred);
     }
-    if (arw == UIO_WRITE && (avc->states & CDirty)) {
+    if (arw == UIO_WRITE && (avc->f.states & CDirty)) {
        code2 = afs_DoPartialWrite(avc, &treq);
        if (!code)
            code = code2;
@@ -1071,15 +1008,8 @@ afs_nfsrdwr(avc, auio, arw, ioflag, acred)
     return afs_CheckCode(code, &treq, 46);
 }
 
-afs_map(vp, off, as, addr, len, prot, maxprot, flags, cred)
-     struct vnode *vp;
-     struct as *as;
-     offset_t off;
-     caddr_t *addr;
-     u_int len;
-     u_char prot, maxprot;
-     u_int flags;
-     struct AFS_UCRED *cred;
+int
+afs_map(struct vnode *vp, offset_t off, struct as *as, caddr_t *addr, u_int len, u_char prot, u_char maxprot, u_int flags, AFS_UCRED *cred)
 {
     struct segvn_crargs crargs;
     register afs_int32 code;
@@ -1121,7 +1051,7 @@ afs_map(vp, off, as, addr, len, prot, maxprot, flags, cred)
     }
     afs_BozonLock(&avc->pvnLock, avc);
     osi_FlushPages(avc, cred); /* ensure old pages are gone */
-    avc->states |= CMAPPED;    /* flag cleared at afs_inactive */
+    avc->f.states |= CMAPPED;  /* flag cleared at afs_inactive */
     afs_BozonUnlock(&avc->pvnLock, avc);
 
     AFS_GUNLOCK();
@@ -1169,11 +1099,14 @@ afs_map(vp, off, as, addr, len, prot, maxprot, flags, cred)
  * For Now We use standard local kernel params for AFS system values. Change this
  * at some point.
  */
-afs_pathconf(vp, cmd, outdatap, credp)
-     register struct AFS_UCRED *credp;
-     struct vnode *vp;
-     int cmd;
-     u_long *outdatap;
+int
+#ifdef AFS_SUN511_ENV
+afs_pathconf(struct vnode *vp, int cmd, u_long *outdatap,
+            register AFS_UCRED *credp, caller_context_t *ct)
+#else
+afs_pathconf(struct vnode *vp, int cmd, u_long *outdatap,
+            register AFS_UCRED *credp)
+#endif /* AFS_SUN511_ENV */
 {
     AFS_STATCNT(afs_cntl);
     switch (cmd) {
@@ -1192,71 +1125,72 @@ afs_pathconf(vp, cmd, outdatap, credp)
     case _PC_NO_TRUNC:
        *outdatap = 1;
        break;
+    case _PC_FILESIZEBITS:
+#ifdef AFS_64BIT_CLIENT
+       *outdatap = 64;
+#else
+       *outdatap = 32;
+#endif
+       break;
     default:
-       return EINVAL;
+#ifdef AFS_SUN511_ENV
+       return fs_pathconf(vp, cmd, outdatap, credp, ct);
+#else
+       return fs_pathconf(vp, cmd, outdatap, credp);
+#endif /* AFS_SUN511_ENV */
     }
     return 0;
 }
 
-afs_ioctl(vnp, com, arg, flag, credp, rvalp)
-     struct vnode *vnp;
-     int com, arg, flag;
-     cred_t *credp;
-     int *rvalp;
+int
+afs_ioctl(struct vnode *vnp, int com, int arg, int flag, cred_t *credp, 
+         int *rvalp)
 {
     return (ENOTTY);
 }
 
 void
-afs_rwlock(vnp, wlock)
-     struct vnode *vnp;
-     int wlock;
+afs_rwlock(struct vnode *vnp, int wlock)
 {
     rw_enter(&(VTOAFS(vnp))->rwlock, (wlock ? RW_WRITER : RW_READER));
 }
 
 
 void
-afs_rwunlock(vnp, wlock)
-     struct vnode *vnp;
-     int wlock;
+afs_rwunlock(struct vnode *vnp, int wlock)
 {
     rw_exit(&(VTOAFS(vnp))->rwlock);
 }
 
 
 /* NOT SUPPORTED */
-afs_seek(vnp, ooff, noffp)
-     struct vnode *vnp;
-     offset_t ooff;
-     offset_t *noffp;
+int
+afs_seek(struct vnode *vnp, offset_t ooff, offset_t *noffp)
 {
     register int code = 0;
 
-    if ((*noffp < 0 || *noffp > MAXOFF_T))
+#ifndef AFS_64BIT_CLIENT
+# define __MAXOFF_T MAXOFF_T
+#else
+# define __MAXOFF_T MAXOFFSET_T
+#endif
+
+    if ((*noffp < 0 || *noffp > __MAXOFF_T))
        code = EINVAL;
     return code;
 }
 
 int
-afs_frlock(vnp, cmd, ap, flag, off,
 #ifdef AFS_SUN59_ENV
-          flkcb,
-#endif
-          credp)
-     struct vnode *vnp;
-     int cmd;
-#if    defined(AFS_SUN56_ENV)
-     struct flock64 *ap;
+afs_frlock(struct vnode *vnp, int cmd, struct flock64 *ap, int flag, 
+          offset_t off, struct flk_callback *flkcb, AFS_UCRED *credp)
+#elif defined(AFS_SUN56_ENV)
+afs_frlock(struct vnode *vnp, int cmd, struct flock64 *ap, int flag, 
+          offset_t off, AFS_UCRED *credp)
 #else
-     struct flock *ap;
-#endif
-     int flag;
-     offset_t off;
-#ifdef AFS_SUN59_ENV
-     struct flk_callback *flkcb;
+afs_frlock(struct vnode *vnp, int cmd, struct flock *ap, int flag, 
+          offset_t off, AFS_UCRED *credp)
 #endif
-     struct AFS_UCRED *credp;
 {
     register afs_int32 code = 0;
     /*
@@ -1295,17 +1229,13 @@ afs_frlock(vnp, cmd, ap, flag, off,
 
 
 int
-afs_space(vnp, cmd, ap, flag, off, credp)
-     struct vnode *vnp;
-     int cmd;
 #if    defined(AFS_SUN56_ENV)
-     struct flock64 *ap;
+afs_space(struct vnode *vnp, int cmd, struct flock64 *ap, int flag, 
+         offset_t off, AFS_UCRED *credp)
 #else
-     struct flock *ap;
+afs_space(struct vnode *vnp, int cmd, struct flock *ap, int flag, 
+         offset_t off, AFS_UCRED *credp)
 #endif
-     int flag;
-     offset_t off;
-     struct AFS_UCRED *credp;
 {
     register afs_int32 code = EINVAL;
     struct vattr vattr;
@@ -1328,10 +1258,7 @@ afs_space(vnp, cmd, ap, flag, off, credp)
 }
 
 int
-afs_dump(vp, addr, i1, i2)
-     struct vnode *vp;
-     caddr_t addr;
-     int i1, i2;
+afs_dump(struct vnode *vp, caddr_t addr, int i1, int i2)
 {
     AFS_STATCNT(afs_dump);
     afs_warn("AFS_DUMP. MUST IMPLEMENT THIS!!!\n");
@@ -1340,8 +1267,8 @@ afs_dump(vp, addr, i1, i2)
 
 
 /* Nothing fancy here; just compare if vnodes are identical ones */
-afs_cmp(vp1, vp2)
-     struct vnode *vp1, *vp2;
+int
+afs_cmp(struct vnode *vp1, struct vnode *vp2)
 {
     AFS_STATCNT(afs_cmp);
     return (vp1 == vp2);
@@ -1357,27 +1284,18 @@ afs_realvp(struct vnode *vp, struct vnode **vpp)
 
 
 int
-afs_pageio(vp, pp, ui1, ui2, i1, credp)
-     struct vnode *vp;
-     struct page *pp;
-     u_int ui1, ui2;
-     int i1;
-     struct cred *credp;
+afs_pageio(struct vnode *vp, struct page *pp, u_int ui1, u_int ui2, int i1, 
+          struct cred *credp)
 {
     afs_warn("afs_pageio: Not implemented\n");
     return EINVAL;
 }
 
 int
-afs_dumpctl(vp, i
-#ifdef AFS_SUN59_ENV
-           , blkp
-#endif
-    )
-     struct vnode *vp;
-     int i;
 #ifdef AFS_SUN59_ENV
-     int *blkp;
+afs_dumpctl(struct vnode *vp, int i, int *blkp)
+#else
+afs_dumpctl(struct vnode *vp, int i)
 #endif
 {
     afs_warn("afs_dumpctl: Not implemented\n");
@@ -1385,92 +1303,199 @@ afs_dumpctl(vp, i
 }
 
 #ifdef AFS_SUN54_ENV
+#ifdef AFS_SUN511_ENV
+extern void
+afs_dispose(struct vnode *vp, struct page *p, int fl, int dn, struct cred *cr, struct caller_context_t *ct)
+{
+    fs_dispose(vp, p, fl, dn, cr,ct);
+}
+
+int
+afs_setsecattr(struct vnode *vp, vsecattr_t *vsecattr, int flag, struct cred *creds, struct caller_context_t *ct)
+{
+    return ENOSYS;
+}
+
+int
+afs_getsecattr(struct vnode *vp, vsecattr_t *vsecattr, int flag, struct cred *creds, struct caller_context_t *ct)
+{
+  return fs_fab_acl(vp, vsecattr, flag, creds,ct);
+}
+#else
 extern void
-afs_dispose(vp, p, fl, dn, cr)
-     struct vnode *vp;
-     struct page *p;
-     int fl, dn;
-     struct cred *cr;
+afs_dispose(struct vnode *vp, struct page *p, int fl, int dn, struct cred *cr)
 {
     fs_dispose(vp, p, fl, dn, cr);
 }
 
 int
-afs_setsecattr(vp, vsecattr, flag, creds)
-     struct vnode *vp;
-     vsecattr_t *vsecattr;
-     int flag;
-     struct cred *creds;
+afs_setsecattr(struct vnode *vp, vsecattr_t *vsecattr, int flag, 
+              struct cred *creds)
 {
     return ENOSYS;
 }
 
 int
-afs_getsecattr(vp, vsecattr, flag, creds)
-     struct vnode *vp;
-     vsecattr_t *vsecattr;
-     int flag;
-     struct cred *creds;
+afs_getsecattr(struct vnode *vp, vsecattr_t *vsecattr, int flag, struct cred *creds)
 {
     return fs_fab_acl(vp, vsecattr, flag, creds);
 }
 #endif
+#endif
 
 #ifdef AFS_GLOBAL_SUNLOCK
-extern int gafs_open(), gafs_close(), afs_ioctl(), gafs_access();
-extern int gafs_getattr(), gafs_setattr(), gafs_lookup(), gafs_create();
-extern int gafs_remove(), gafs_link(), gafs_rename(), gafs_mkdir();
-extern int gafs_rmdir(), gafs_readdir(), gafs_fsync(), gafs_symlink();
-extern int gafs_fid(), gafs_readlink(), fs_setfl(), afs_pathconf();
-extern int afs_lockctl();
-extern void gafs_inactive();
-
-#ifdef AFS_SUN510_ENV
-struct fs_operation_def afs_vnodeops_template[] = {
-    { VOPNAME_OPEN,            gafs_open },
-    { VOPNAME_CLOSE,           gafs_close },
-    { VOPNAME_READ,            afs_vmread },
-    { VOPNAME_WRITE,           afs_vmwrite },
-    { VOPNAME_IOCTL,           afs_ioctl },
-    { VOPNAME_SETFL,           fs_setfl },
-    { VOPNAME_GETATTR,         gafs_getattr },
-    { VOPNAME_SETATTR,         gafs_setattr },
-    { VOPNAME_ACCESS,          gafs_access },
-    { VOPNAME_LOOKUP,          gafs_lookup },
-    { VOPNAME_CREATE,          gafs_create },
-    { VOPNAME_REMOVE,          gafs_remove },
-    { VOPNAME_LINK,            gafs_link },
-    { VOPNAME_RENAME,          gafs_rename },
-    { VOPNAME_MKDIR,           gafs_mkdir },
-    { VOPNAME_RMDIR,           gafs_rmdir },
-    { VOPNAME_READDIR,         gafs_readdir },
-    { VOPNAME_SYMLINK,         gafs_symlink },   
-    { VOPNAME_READLINK,                gafs_readlink },
-    { VOPNAME_FSYNC,           gafs_fsync },
-    { VOPNAME_INACTIVE,                gafs_inactive },
-    { VOPNAME_FID,             gafs_fid },
-    { VOPNAME_RWLOCK,          afs_rwlock },
-    { VOPNAME_RWUNLOCK,                afs_rwunlock },
-    { VOPNAME_SEEK,            afs_seek },
-    { VOPNAME_CMP,             afs_cmp },
-    { VOPNAME_FRLOCK,          afs_frlock },
-    { VOPNAME_SPACE,           afs_space },
-    { VOPNAME_REALVP,          afs_realvp },
-    { VOPNAME_GETPAGE,         afs_getpage },
-    { VOPNAME_PUTPAGE,         afs_putpage },
-    { VOPNAME_MAP,             afs_map },
-    { VOPNAME_ADDMAP,          afs_addmap },
-    { VOPNAME_DELMAP,          afs_delmap },
-    { VOPNAME_POLL,            fs_poll },
-    { VOPNAME_DUMP,            afs_dump },
-    { VOPNAME_PATHCONF,                afs_pathconf },
-    { VOPNAME_PAGEIO,          afs_pageio },
-    { VOPNAME_DUMPCTL,         afs_dumpctl },   
-    { VOPNAME_DISPOSE,         afs_dispose },
-    { VOPNAME_GETSECATTR,      afs_getsecattr },
-    { VOPNAME_SETSECATTR,      afs_setsecattr },
-    { VOPNAME_SHRLOCK,         fs_shrlock },
-    NULL,
+extern int gafs_open(register struct vcache **avcp, afs_int32 aflags, 
+                    AFS_UCRED *acred);
+extern int gafs_close(register struct vcache *avc, afs_int32 aflags, 
+                     int count, offset_t offset, AFS_UCRED *acred);
+extern int afs_ioctl(struct vnode *vnp, int com, int arg, int flag, 
+                    cred_t *credp, int *rvalp);
+extern int gafs_access(register struct vcache *avc, register afs_int32 amode,
+                      int flags, AFS_UCRED *acred);
+extern int gafs_getattr(register struct vcache *avc, 
+                       register struct vattr *attrs, int flags, 
+                       AFS_UCRED *acred);
+extern int gafs_setattr(register struct vcache *avc, 
+                       register struct vattr *attrs, int flags, 
+                       AFS_UCRED *acred);
+extern int gafs_lookup(register struct vcache *adp, char *aname, 
+                      register struct vcache **avcp, struct pathname *pnp,
+                      int flags, struct vnode *rdir, AFS_UCRED *acred);
+extern int gafs_remove(register struct vcache *adp, char *aname, 
+                      AFS_UCRED *acred);
+extern int gafs_link(register struct vcache *adp, register struct vcache *avc,
+                    char *aname, AFS_UCRED *acred);
+extern int gafs_rename(register struct vcache *aodp, char *aname1,
+                      register struct vcache *andp, char *aname2,
+                      AFS_UCRED *acred);
+extern int gafs_symlink(register struct vcache *adp, char *aname, 
+                       struct vattr *attrs, register char *atargetName, 
+                       AFS_UCRED *acred);
+extern int gafs_rmdir(register struct vcache *adp, char *aname, 
+                     struct vnode *cdirp, AFS_UCRED *acred);
+extern int gafs_mkdir(register struct vcache *adp, char *aname, 
+                     struct vattr *attrs, register struct vcache **avcp, 
+                     AFS_UCRED *acred);
+extern int
+#ifdef  AFS_SUN53_ENV
+gafs_fsync(register struct vcache *avc, int flag, AFS_UCRED *acred);
+#else
+gafs_fsync(register struct vcache *avc, AFS_UCRED *acred);
+#endif
+extern int gafs_readlink(register struct vcache *avc, struct uio *auio, 
+                        AFS_UCRED *acred);
+extern int gafs_readdir(register struct vcache *avc, struct uio *auio,
+                       AFS_UCRED *acred, int *eofp);
+extern void gafs_inactive(register struct vcache *avc, 
+                         AFS_UCRED *acred);
+extern int gafs_fid(struct vcache *avc, struct fid **fidpp);
+extern int gafs_create(register struct vcache *adp, char *aname, 
+                      struct vattr *attrs, enum vcexcl aexcl, int amode, 
+                      struct vcache **avcp, AFS_UCRED *acred);
+#ifdef AFS_SUN511_ENV
+extern int afs_pathconf(struct vnode *vp, int cmd, u_long *outdatap,
+                       register AFS_UCRED *credp, caller_context_t *ct);
+#else
+extern int afs_pathconf(struct vnode *vp, int cmd, u_long *outdatap,
+                       register AFS_UCRED *credp);
+#endif /* AFS_SUN511_ENV */
+
+#if defined(AFS_SUN511_ENV)
+/* The following list must always be NULL-terminated */
+const fs_operation_def_t afs_vnodeops_template[] = {
+    VOPNAME_OPEN,              { .vop_open = gafs_open },
+    VOPNAME_CLOSE,             { .vop_close = gafs_close },
+    VOPNAME_READ,              { .vop_read = afs_vmread },
+    VOPNAME_WRITE,             { .vop_write = afs_vmwrite },
+    VOPNAME_IOCTL,             { .vop_ioctl = afs_ioctl },
+    VOPNAME_SETFL,             { .vop_setfl = fs_setfl },
+    VOPNAME_GETATTR,           { .vop_getattr = gafs_getattr },
+    VOPNAME_SETATTR,           { .vop_setattr = gafs_setattr },
+    VOPNAME_ACCESS,            { .vop_access = gafs_access },
+    VOPNAME_LOOKUP,            { .vop_lookup = gafs_lookup },
+    VOPNAME_CREATE,            { .vop_create = gafs_create },
+    VOPNAME_REMOVE,            { .vop_remove = gafs_remove },
+    VOPNAME_LINK,              { .vop_link = gafs_link },
+    VOPNAME_RENAME,            { .vop_rename = gafs_rename },
+    VOPNAME_MKDIR,             { .vop_mkdir = gafs_mkdir },
+    VOPNAME_RMDIR,             { .vop_rmdir = gafs_rmdir },
+    VOPNAME_READDIR,           { .vop_readdir = gafs_readdir },
+    VOPNAME_SYMLINK,           { .vop_symlink = gafs_symlink },   
+    VOPNAME_READLINK,          { .vop_readlink = gafs_readlink },
+    VOPNAME_FSYNC,             { .vop_fsync = gafs_fsync },
+    VOPNAME_INACTIVE,          { .vop_inactive = gafs_inactive },
+    VOPNAME_FID,               { .vop_fid = gafs_fid },
+    VOPNAME_RWLOCK,            { .vop_rwlock = afs_rwlock },
+    VOPNAME_RWUNLOCK,          { .vop_rwunlock = afs_rwunlock },
+    VOPNAME_SEEK,              { .vop_seek = afs_seek },
+    VOPNAME_CMP,               { .vop_cmp = afs_cmp },
+    VOPNAME_FRLOCK,            { .vop_frlock = afs_frlock },
+    VOPNAME_SPACE,             { .vop_space = afs_space },
+    VOPNAME_REALVP,            { .vop_realvp = afs_realvp },
+    VOPNAME_GETPAGE,           { .vop_getpage = afs_getpage },
+    VOPNAME_PUTPAGE,           { .vop_putpage = afs_putpage },
+    VOPNAME_MAP,               { .vop_map = afs_map },
+    VOPNAME_ADDMAP,            { .vop_addmap = afs_addmap },
+    VOPNAME_DELMAP,            { .vop_delmap = afs_delmap },
+    VOPNAME_POLL,              { .vop_poll = fs_poll },
+    VOPNAME_PATHCONF,          { .vop_pathconf = afs_pathconf },
+    VOPNAME_PAGEIO,            { .vop_pageio = afs_pageio },
+    VOPNAME_DUMP,              { .vop_dump = afs_dump },
+    VOPNAME_DUMPCTL,           { .vop_dumpctl = afs_dumpctl },   
+    VOPNAME_DISPOSE,           { .vop_dispose = afs_dispose },
+    VOPNAME_GETSECATTR,                { .vop_getsecattr = afs_getsecattr },
+    VOPNAME_SETSECATTR,        { .vop_setsecattr = afs_setsecattr },
+    VOPNAME_SHRLOCK,           { .vop_shrlock = fs_shrlock },
+    NULL,                      NULL
+};
+vnodeops_t *afs_ops;
+#elif defined(AFS_SUN510_ENV)
+/* The following list must always be NULL-terminated */
+const fs_operation_def_t afs_vnodeops_template[] = {
+    VOPNAME_OPEN,              gafs_open,
+    VOPNAME_CLOSE,             gafs_close,
+    VOPNAME_READ,              afs_vmread,
+    VOPNAME_WRITE,             afs_vmwrite,
+    VOPNAME_IOCTL,             afs_ioctl,
+    VOPNAME_SETFL,             fs_setfl,
+    VOPNAME_GETATTR,           gafs_getattr,
+    VOPNAME_SETATTR,           gafs_setattr,
+    VOPNAME_ACCESS,            gafs_access,
+    VOPNAME_LOOKUP,            gafs_lookup,
+    VOPNAME_CREATE,            gafs_create,
+    VOPNAME_REMOVE,            gafs_remove,
+    VOPNAME_LINK,              gafs_link,
+    VOPNAME_RENAME,            gafs_rename,
+    VOPNAME_MKDIR,             gafs_mkdir,
+    VOPNAME_RMDIR,             gafs_rmdir,
+    VOPNAME_READDIR,           gafs_readdir,
+    VOPNAME_SYMLINK,           gafs_symlink,   
+    VOPNAME_READLINK,          gafs_readlink,
+    VOPNAME_FSYNC,             gafs_fsync,
+    VOPNAME_INACTIVE,          gafs_inactive,
+    VOPNAME_FID,               gafs_fid,
+    VOPNAME_RWLOCK,            afs_rwlock,
+    VOPNAME_RWUNLOCK,          afs_rwunlock,
+    VOPNAME_SEEK,              afs_seek,
+    VOPNAME_CMP,               afs_cmp,
+    VOPNAME_FRLOCK,            afs_frlock,
+    VOPNAME_SPACE,             afs_space,
+    VOPNAME_REALVP,            afs_realvp,
+    VOPNAME_GETPAGE,           afs_getpage,
+    VOPNAME_PUTPAGE,           afs_putpage,
+    VOPNAME_MAP,               afs_map,
+    VOPNAME_ADDMAP,            afs_addmap,
+    VOPNAME_DELMAP,            afs_delmap,
+    VOPNAME_POLL,              fs_poll,
+    VOPNAME_DUMP,              afs_dump,
+    VOPNAME_PATHCONF,          afs_pathconf,
+    VOPNAME_PAGEIO,            afs_pageio,
+    VOPNAME_DUMPCTL,           afs_dumpctl,   
+    VOPNAME_DISPOSE,           afs_dispose,
+    VOPNAME_GETSECATTR,       afs_getsecattr,
+    VOPNAME_SETSECATTR,        afs_setsecattr,
+    VOPNAME_SHRLOCK,           fs_shrlock,
+    NULL,                     NULL
 };
 struct vnodeops *afs_ops;
 #else
@@ -1526,12 +1551,9 @@ struct vnodeops Afs_vnodeops = {
 struct vnodeops *afs_ops = &Afs_vnodeops;
 #endif
 
-
-
-gafs_open(avcp, aflags, acred)
-     register struct vcache **avcp;
-     afs_int32 aflags;
-     struct AFS_UCRED *acred;
+int
+gafs_open(register struct vcache **avcp, afs_int32 aflags, 
+         AFS_UCRED *acred)
 {
     register int code;
 
@@ -1541,13 +1563,9 @@ gafs_open(avcp, aflags, acred)
     return (code);
 }
 
-
-gafs_close(avc, aflags, count, offset, acred)
-     offset_t offset;
-     int count;
-     register struct vcache *avc;
-     afs_int32 aflags;
-     struct AFS_UCRED *acred;
+int
+gafs_close(register struct vcache *avc, afs_int32 aflags, int count, 
+          offset_t offset, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1557,12 +1575,9 @@ gafs_close(avc, aflags, count, offset, acred)
     return (code);
 }
 
-
-gafs_getattr(avc, attrs, flags, acred)
-     int flags;
-     register struct vcache *avc;
-     register struct vattr *attrs;
-     struct AFS_UCRED *acred;
+int
+gafs_getattr(register struct vcache *avc, register struct vattr *attrs, 
+            int flags, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1573,11 +1588,9 @@ gafs_getattr(avc, attrs, flags, acred)
 }
 
 
-gafs_setattr(avc, attrs, flags, acred)
-     int flags;
-     register struct vcache *avc;
-     register struct vattr *attrs;
-     struct AFS_UCRED *acred;
+int
+gafs_setattr(register struct vcache *avc, register struct vattr *attrs, 
+            int flags, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1588,11 +1601,9 @@ gafs_setattr(avc, attrs, flags, acred)
 }
 
 
-gafs_access(avc, amode, flags, acred)
-     int flags;
-     register struct vcache *avc;
-     register afs_int32 amode;
-     struct AFS_UCRED *acred;
+int
+gafs_access(register struct vcache *avc, register afs_int32 amode, int flags, 
+           AFS_UCRED *acred)
 {
     register int code;
 
@@ -1603,13 +1614,10 @@ gafs_access(avc, amode, flags, acred)
 }
 
 
-gafs_lookup(adp, aname, avcp, pnp, flags, rdir, acred)
-     struct pathname *pnp;
-     int flags;
-     struct vnode *rdir;
-     register struct vcache *adp, **avcp;
-     char *aname;
-     struct AFS_UCRED *acred;
+int
+gafs_lookup(register struct vcache *adp, char *aname, 
+           register struct vcache **avcp, struct pathname *pnp, int flags, 
+           struct vnode *rdir, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1620,14 +1628,10 @@ gafs_lookup(adp, aname, avcp, pnp, flags, rdir, acred)
 }
 
 
-gafs_create(adp, aname, attrs, aexcl, amode, avcp, acred)
-     register struct vcache *adp;
-     char *aname;
-     struct vattr *attrs;
-     enum vcexcl aexcl;
-     int amode;
-     struct vcache **avcp;
-     struct AFS_UCRED *acred;
+int
+gafs_create(register struct vcache *adp, char *aname, struct vattr *attrs, 
+           enum vcexcl aexcl, int amode, struct vcache **avcp, 
+           AFS_UCRED *acred)
 {
     register int code;
 
@@ -1637,10 +1641,8 @@ gafs_create(adp, aname, attrs, aexcl, amode, avcp, acred)
     return (code);
 }
 
-gafs_remove(adp, aname, acred)
-     register struct vcache *adp;
-     char *aname;
-     struct AFS_UCRED *acred;
+int
+gafs_remove(register struct vcache *adp, char *aname, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1650,11 +1652,9 @@ gafs_remove(adp, aname, acred)
     return (code);
 }
 
-gafs_link(adp, avc, aname, acred)
-     register struct vcache *avc;
-     register struct vcache *adp;
-     char *aname;
-     struct AFS_UCRED *acred;
+int
+gafs_link(register struct vcache *adp, register struct vcache *avc, 
+         char *aname, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1664,25 +1664,42 @@ gafs_link(adp, avc, aname, acred)
     return (code);
 }
 
-gafs_rename(aodp, aname1, andp, aname2, acred)
-     register struct vcache *aodp, *andp;
-     char *aname1, *aname2;
-     struct AFS_UCRED *acred;
+int
+gafs_rename(register struct vcache *aodp, char *aname1, 
+           register struct vcache *andp, char *aname2, 
+           AFS_UCRED *acred)
 {
     register int code;
 
     AFS_GLOCK();
     code = afs_rename(aodp, aname1, andp, aname2, acred);
+#ifdef AFS_SUN510_ENV
+    if (code == 0) {
+       struct vcache *avcp = NULL;
+       
+       (void) afs_lookup(andp, aname2, &avcp, NULL, 0, NULL, acred);
+       if (avcp) {
+           struct vnode *vp = AFSTOV(avcp), *pvp = AFSTOV(andp);
+           
+           mutex_enter(&vp->v_lock);
+           if (vp->v_path != NULL) {
+               kmem_free(vp->v_path, strlen(vp->v_path) + 1);
+               vp->v_path = NULL;
+           }
+           mutex_exit(&vp->v_lock);
+           vn_setpath(afs_globalVp, pvp, vp, aname2, strlen(aname2));
+
+           AFS_RELE(avcp);
+       }
+    }
+#endif
     AFS_GUNLOCK();
     return (code);
 }
 
-gafs_mkdir(adp, aname, attrs, avcp, acred)
-     register struct vcache *adp;
-     register struct vcache **avcp;
-     char *aname;
-     struct vattr *attrs;
-     struct AFS_UCRED *acred;
+int
+gafs_mkdir(register struct vcache *adp, char *aname, struct vattr *attrs, 
+          register struct vcache **avcp, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1692,12 +1709,9 @@ gafs_mkdir(adp, aname, attrs, avcp, acred)
     return (code);
 }
 
-
-gafs_rmdir(adp, aname, cdirp, acred)
-     struct vnode *cdirp;
-     register struct vcache *adp;
-     char *aname;
-     struct AFS_UCRED *acred;
+int
+gafs_rmdir(register struct vcache *adp, char *aname, struct vnode *cdirp, 
+          AFS_UCRED *acred)
 {
     register int code;
 
@@ -1708,11 +1722,9 @@ gafs_rmdir(adp, aname, cdirp, acred)
 }
 
 
-gafs_readdir(avc, auio, acred, eofp)
-     int *eofp;
-     register struct vcache *avc;
-     struct uio *auio;
-     struct AFS_UCRED *acred;
+int
+gafs_readdir(register struct vcache *avc, struct uio *auio,
+            AFS_UCRED *acred, int *eofp)
 {
     register int code;
 
@@ -1722,12 +1734,9 @@ gafs_readdir(avc, auio, acred, eofp)
     return (code);
 }
 
-gafs_symlink(adp, aname, attrs, atargetName, acred)
-     register struct vcache *adp;
-     register char *atargetName;
-     char *aname;
-     struct vattr *attrs;
-     struct AFS_UCRED *acred;
+int
+gafs_symlink(register struct vcache *adp, char *aname, struct vattr *attrs,
+            register char *atargetName, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1738,10 +1747,8 @@ gafs_symlink(adp, aname, attrs, atargetName, acred)
 }
 
 
-gafs_readlink(avc, auio, acred)
-     register struct vcache *avc;
-     struct uio *auio;
-     struct AFS_UCRED *acred;
+int
+gafs_readlink(register struct vcache *avc, struct uio *auio, AFS_UCRED *acred)
 {
     register int code;
 
@@ -1751,14 +1758,12 @@ gafs_readlink(avc, auio, acred)
     return (code);
 }
 
+int
 #ifdef AFS_SUN53_ENV
-gafs_fsync(avc, flag, acred)
-     int flag;
+gafs_fsync(register struct vcache *avc, int flag, AFS_UCRED *acred)
 #else
-gafs_fsync(avc, acred)
+gafs_fsync(register struct vcache *avc, AFS_UCRED *acred)
 #endif
-     register struct vcache *avc;
-     struct AFS_UCRED *acred;
 {
     register int code;
 
@@ -1772,12 +1777,12 @@ gafs_fsync(avc, acred)
     return (code);
 }
 
-void
-afs_inactive(struct vcache *avc, struct AFS_UCRED *acred)
+int
+afs_inactive(struct vcache *avc, AFS_UCRED *acred)
 {
     struct vnode *vp = AFSTOV(avc);
     if (afs_shuttingdown)
-       return;
+       return 0;
 
     /*
      * In Solaris and HPUX s800 and HP-UX10.0 they actually call us with
@@ -1793,7 +1798,7 @@ afs_inactive(struct vcache *avc, struct AFS_UCRED *acred)
     vp->v_count--;
     if (vp->v_count > 0) {
        mutex_exit(&vp->v_lock);
-       return;
+       return 0;
     }
     mutex_exit(&vp->v_lock);
 
@@ -1805,26 +1810,24 @@ afs_inactive(struct vcache *avc, struct AFS_UCRED *acred)
      * lose the open count for volume roots (mvstat 2), even though they
      * will get VOP_INACTIVE'd when released by afs_PutFakeStat().
      */
-    if (avc->opens > 0 && avc->mvstat == 0 && !(avc->states & CCore))
+    if (avc->opens > 0 && avc->mvstat == 0 && !(avc->f.states & CCore))
        avc->opens = avc->execsOrWriters = 0;
 
     afs_InactiveVCache(avc, acred);
+    return 0;
 }
 
 void
-gafs_inactive(avc, acred)
-     register struct vcache *avc;
-     struct AFS_UCRED *acred;
+gafs_inactive(register struct vcache *avc, AFS_UCRED *acred)
 {
     AFS_GLOCK();
-    afs_inactive(avc, acred);
+    (void)afs_inactive(avc, acred);
     AFS_GUNLOCK();
 }
 
 
-gafs_fid(avc, fidpp)
-     struct vcache *avc;
-     struct fid **fidpp;
+int
+gafs_fid(struct vcache *avc, struct fid **fidpp)
 {
     register int code;