Make DRelease take an anonymous pointer
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Tue, 21 Jul 2009 10:58:47 +0000 (11:58 +0100)
committerRuss Allbery <rra@stanford.edu>
Tue, 21 Jul 2009 13:44:52 +0000 (06:44 -0700)
DRelease is used to free data blocks returned by the dir package. These
can be any of a number of different types, which we were previously
dealing with by casting everything to (struct buffer *) before calling
DRelease.

Instead, make DRelease take a (void *), so we can free any dir package
product without requiring casts.

Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/159
Reviewed-by: Russ Allbery <rra@stanford.edu>
Tested-by: Russ Allbery <rra@stanford.edu>

src/afs/LINUX/osi_vnodeops.c
src/afs/VNOPS/afs_vnop_lookup.c
src/afs/VNOPS/afs_vnop_readdir.c
src/afs/afs_buffer.c
src/afs/afs_prototypes.h
src/dir/buffer.c
src/dir/dir.c
src/dir/dir.h
src/dir/salvage.c

index 74ec9ad..0747dd2 100644 (file)
@@ -310,7 +310,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
        else {
            printf("afs_linux_readdir: afs_dir_GetBlob failed, null name (inode %lx, dirpos %d)\n", 
                   (unsigned long)&tdc->f.inode, dirpos);
-           DRelease((struct buffer *) de, 0);
+           DRelease(de, 0);
            ReleaseSharedLock(&avc->lock);
            afs_PutDCache(tdc);
            code = -ENOENT;
@@ -361,7 +361,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir)
 #else
        code = (*filldir) (dirbuf, de->name, len, offset, ino);
 #endif
-       DRelease((struct buffer *)de, 0);
+       DRelease(de, 0);
        if (code)
            break;
        offset = dirpos + 1 + ((len + 16) >> 5);
index 0c8ad6a..7b3ef68 100644 (file)
@@ -773,7 +773,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
 
        /* dont copy more than we have room for */
        if (fidIndex >= nentries) {
-           DRelease((struct buffer *)dirEntryp, 0);
+           DRelease(dirEntryp, 0);
            break;
        }
 
@@ -814,7 +814,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
            }
            if (!tvcp)
            {
-               DRelease((struct buffer *)dirEntryp, 0);
+               DRelease(dirEntryp, 0);
                ReleaseReadLock(&dcp->lock);
                ReleaseReadLock(&adp->lock);
                afs_PutDCache(dcp);
@@ -875,7 +875,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp)
         * used by this dir entry.
         */
        temp = afs_dir_NameBlobs(dirEntryp->name) << 5;
-       DRelease((struct buffer *)dirEntryp, 0);
+       DRelease(dirEntryp, 0);
        if (temp <= 0)
            break;
        dirCookie += temp;
index 3d3d4dc..c602250 100644 (file)
@@ -91,7 +91,7 @@ BlobScan(struct dcache * afile, afs_int32 ablob)
        }
        /* now relativeBlob is the page-relative first allocated blob,
         * or EPP (if there are none in this page). */
-       DRelease((struct buffer *)tpe, 0);
+       DRelease(tpe, 0);
        if (i != EPP)
            return i + pageBlob;
        ablob = pageBlob + EPP; /* go around again */
@@ -763,7 +763,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred)
                *eofp = 1;      /* Set it properly */
 #endif
            if (ode)
-               DRelease((struct buffer *)ode, 0);
+               DRelease(ode, 0);
            goto dirend;
        }
        /* by here nde is set */
@@ -782,7 +782,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred)
        if (DIRSIZ_LEN(n_slen) >= (AFS_UIO_RESID(auio) - len)) {
 #endif /* AFS_SGI53_ENV */
            /* No can do no more now; ya know... at this time */
-           DRelease((struct buffer *)nde, 0);  /* can't use this one. */
+           DRelease(nde, 0);   /* can't use this one. */
            if (len) {
 #ifdef AFS_HPUX_ENV
                sdirEntry->d_fileno =
@@ -830,7 +830,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred)
                code = EINVAL;
            }
            if (ode)
-               DRelease((struct buffer *)ode, 0);
+               DRelease(ode, 0);
            goto dirend;
        }
 
@@ -880,12 +880,12 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred)
        len = DIRSIZ_LEN(o_slen = n_slen);
 #endif /* AFS_SGI53_ENV */
        if (ode)
-           DRelease((struct buffer *)ode, 0);
+           DRelease(ode, 0);
        ode = nde;
        AFS_UIO_SETOFFSET(auio, (afs_int32) ((us + afs_dir_NameBlobs(nde->name)) << 5));
     }
     if (ode)
-       DRelease((struct buffer *)ode, 0);
+       DRelease(ode, 0);
 
   dirend:
     ReleaseReadLock(&tdc->lock);
index b15a635..58d9fce 100644 (file)
@@ -360,10 +360,11 @@ afs_newslot(struct dcache *adc, afs_int32 apage, register struct buffer *lp)
 }
 
 void
-DRelease(register struct buffer *bp, int flag)
+DRelease(void *loc, int flag)
 {
     /* Release a buffer, specifying whether or not the buffer has been
      * modified by the locker. */
+    register struct buffer *bp = (struct buffer *)loc;
     register int index;
 #if defined(AFS_USEBUFFERS)
     register struct buffer *tp;
index 9a84e0e..f886fd0 100644 (file)
@@ -26,7 +26,6 @@ extern void afs_FreeAllAxs(struct axscache **headp);
 /* afs_buffer.c */
 extern void DInit(int abuffers);
 extern void *DRead(register struct dcache * fid, register int page);
-extern void DRelease(register struct buffer *bp, int flag);
 extern int DVOffset(register void *ap);
 extern void DZap(struct dcache * fid);
 extern void DFlush(void);
index dd134a9..9827788 100644 (file)
@@ -287,10 +287,12 @@ newslot(afs_int32 *afid, afs_int32 apage, register struct buffer *lp)
     return lp;
 }
 
+/* Release a buffer, specifying whether or not the buffer has been modified
+ * by the locker. */
 void
-DRelease(register struct buffer *bp, int flag)
+DRelease(void *loc, int flag)
 {
-    /* Release a buffer, specifying whether or not the buffer has been modified by the locker. */
+    struct buffer *bp = (struct buffer *)loc;
     register int index;
 
     if (!bp)
index 18ab0da..de69433 100644 (file)
@@ -114,16 +114,17 @@ static struct DirEntry *FindItem(void *dir, char *ename,
                                 unsigned short **previtem);
 
 
+/* Find out how many entries are required to store a name. */
 int
 NameBlobs(char *name)
-{                              /* Find out how many entries are required to store a name. */
+{
     register int i;
     i = strlen(name) + 1;
     return 1 + ((i + 15) >> 5);
 }
 
-/* Create an entry in a file.  Dir is a file representation, while entry is a string name. */
-
+/* Create an entry in a file.  Dir is a file representation, while entry is
+ * a string name. */
 int
 Create(void *dir, char *entry, void *voidfid)
 {
@@ -140,8 +141,8 @@ Create(void *dir, char *entry, void *voidfid)
     /* First check if file already exists. */
     ep = FindItem(dir, entry, &pp);
     if (ep) {
-       DRelease((struct buffer *)ep, 0);
-       DRelease((struct buffer *)pp, 0);
+       DRelease(ep, 0);
+       DRelease(pp, 0);
        return EEXIST;
     }
     blobs = NameBlobs(entry);  /* number of entries required */
@@ -159,14 +160,14 @@ Create(void *dir, char *entry, void *voidfid)
     /* Now we just have to thread it on the hash table list. */
     dhp = (struct DirHeader *)DRead(dir, 0);
     if (!dhp) {
-       DRelease((struct buffer *)ep, 1);
+       DRelease(ep, 1);
        return EIO;
     }
     i = DirHash(entry);
     ep->next = dhp->hashTable[i];
     dhp->hashTable[i] = htons(firstelt);
-    DRelease((struct buffer *)dhp, 1);
-    DRelease((struct buffer *)ep, 1);
+    DRelease(dhp, 1);
+    DRelease(ep, 1);
     return 0;
 }
 
@@ -187,7 +188,7 @@ Length(void *dir)
            if (dhp->alloMap[i] != EPP)
                ctr++;
     }
-    DRelease((struct buffer *)dhp, 0);
+    DRelease(dhp, 0);
     return ctr * AFS_PAGESIZE;
 }
 
@@ -202,10 +203,10 @@ Delete(void *dir, char *entry)
     if (firstitem == 0)
        return ENOENT;
     *previtem = firstitem->next;
-    DRelease((struct buffer *)previtem, 1);
+    DRelease(previtem, 1);
     index = DVOffset(firstitem) / 32;
     nitems = NameBlobs(firstitem->name);
-    DRelease((struct buffer *)firstitem, 0);
+    DRelease(firstitem, 0);
     FreeBlobs(dir, index, nitems);
     return 0;
 }
@@ -247,7 +248,7 @@ FindBlobs(void *dir, int nblobs)
            }
            pp = (struct PageHeader *)DRead(dir, i);    /* read the page in. */
            if (!pp) {
-               DRelease((struct buffer *)dhp, 1);
+               DRelease(dhp, 1);
                break;
            }
            for (j = 0; j <= EPP - nblobs; j++) {
@@ -266,17 +267,17 @@ FindBlobs(void *dir, int nblobs)
                 * and free up any resources we've got allocated. */
                if (i < MAXPAGES)
                    dhp->alloMap[i] -= nblobs;
-               DRelease((struct buffer *)dhp, 1);
+               DRelease(dhp, 1);
                for (k = 0; k < nblobs; k++)
                    pp->freebitmap[(j + k) >> 3] |= 1 << ((j + k) & 7);
-               DRelease((struct buffer *)pp, 1);
+               DRelease(pp, 1);
                return j + i * EPP;
            }
-           DRelease((struct buffer *)pp, 0);   /* This dir page is unchanged. */
+           DRelease(pp, 0);    /* This dir page is unchanged. */
        }
     }
     /* If we make it here, the directory is full. */
-    DRelease((struct buffer *)dhp, 1);
+    DRelease(dhp, 1);
     return -1;
 }
 
@@ -294,7 +295,7 @@ AddPage(void *dir, int pageno)
     pp->freebitmap[0] = 0x01;
     for (i = 1; i < EPP / 8; i++)      /* It's a constant */
        pp->freebitmap[i] = 0;
-    DRelease((struct buffer *)pp, 1);
+    DRelease(pp, 1);
 }
 
 /* Free a whole bunch of directory entries. */
@@ -313,13 +314,13 @@ FreeBlobs(void *dir, register int firstblob, int nblobs)
        return;
     if (page < MAXPAGES)
        dhp->alloMap[page] += nblobs;
-    DRelease((struct buffer *)dhp, 1);
+    DRelease(dhp, 1);
     pp = (struct PageHeader *)DRead(dir, page);
     if (pp)
        for (i = 0; i < nblobs; i++)
            pp->freebitmap[(firstblob + i) >> 3] &=
                ~(1 << ((firstblob + i) & 7));
-    DRelease((struct buffer *)pp, 1);
+    DRelease(pp, 1);
 }
 
 /*
@@ -345,7 +346,7 @@ MakeDir(void *dir, afs_int32 * me, afs_int32 * parent)
        dhp->alloMap[i] = EPP;
     for (i = 0; i < NHASHENT; i++)
        dhp->hashTable[i] = 0;
-    DRelease((struct buffer *)dhp, 1);
+    DRelease(dhp, 1);
     Create(dir, ".", me);
     Create(dir, "..", parent); /* Virtue is its own .. */
     return 0;
@@ -363,10 +364,10 @@ Lookup(void *dir, char *entry, void *voidfid)
     firstitem = FindItem(dir, entry, &previtem);
     if (firstitem == 0)
        return ENOENT;
-    DRelease((struct buffer *)previtem, 0);
+    DRelease(previtem, 0);
     fid[1] = ntohl(firstitem->fid.vnode);
     fid[2] = ntohl(firstitem->fid.vunique);
-    DRelease((struct buffer *)firstitem, 0);
+    DRelease(firstitem, 0);
     return 0;
 }
 
@@ -382,12 +383,12 @@ LookupOffset(void *dir, char *entry, void *voidfid, long *offsetp)
     firstitem = FindItem(dir, entry, &previtem);
     if (firstitem == 0)
        return ENOENT;
-    DRelease((struct buffer *)previtem, 0);
+    DRelease(previtem, 0);
     fid[1] = ntohl(firstitem->fid.vnode);
     fid[2] = ntohl(firstitem->fid.vunique);
     if (offsetp)
        *offsetp = DVOffset(firstitem);
-    DRelease((struct buffer *)firstitem, 0);
+    DRelease(firstitem, 0);
     return 0;
 }
 
@@ -419,7 +420,7 @@ EnumerateDir(void *dir, int (*hookproc) (void *dir, char *name,
            if (!ep) {
                if (DErrno) {
                    /* we failed, return why */
-                   DRelease((struct buffer *)dhp, 0);
+                   DRelease(dhp, 0);
                    return DErrno;
                }
                break;
@@ -428,12 +429,12 @@ EnumerateDir(void *dir, int (*hookproc) (void *dir, char *name,
            num = ntohs(ep->next);
            code = (*hookproc) (hook, ep->name, ntohl(ep->fid.vnode),
                         ntohl(ep->fid.vunique));
-           DRelease((struct buffer *)ep, 0);
+           DRelease(ep, 0);
            if (code)
                break;
        }
     }
-    DRelease((struct buffer *)dhp, 0);
+    DRelease(dhp, 0);
     return 0;
 }
 
@@ -457,15 +458,15 @@ IsEmpty(void *dir)
            if (!ep)
                break;
            if (strcmp(ep->name, "..") && strcmp(ep->name, ".")) {
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 1;
            }
            num = ntohs(ep->next);
-           DRelease((struct buffer *)ep, 0);
+           DRelease(ep, 0);
        }
     }
-    DRelease((struct buffer *)dhp, 0);
+    DRelease(dhp, 0);
     return 0;
 }
 
@@ -500,10 +501,16 @@ DirHash(register char *string)
     return tval;
 }
 
+
+/* Find a directory entry, given its name.  This entry returns a pointer
+ * to a locked buffer, and a pointer to a locked buffer (in previtem)
+ * referencing the found item (to aid the delete code).  If no entry is
+ * found, however, no items are left locked, and a null pointer is
+ * returned instead. */
+
 static struct DirEntry *
 FindItem(void *dir, char *ename, unsigned short **previtem)
 {
-    /* Find a directory entry, given its name.  This entry returns a pointer to a locked buffer, and a pointer to a locked buffer (in previtem) referencing the found item (to aid the delete code).  If no entry is found, however, no items are left locked, and a null pointer is returned instead. */
     register int i;
     register struct DirHeader *dhp;
     register unsigned short *lp;
@@ -514,12 +521,12 @@ FindItem(void *dir, char *ename, unsigned short **previtem)
        return 0;
     if (dhp->hashTable[i] == 0) {
        /* no such entry */
-       DRelease((struct buffer *)dhp, 0);
+       DRelease(dhp, 0);
        return 0;
     }
     tp = GetBlob(dir, (u_short) ntohs(dhp->hashTable[i]));
     if (!tp) {
-       DRelease((struct buffer *)dhp, 0);
+       DRelease(dhp, 0);
        return 0;
     }
     lp = &(dhp->hashTable[i]);
@@ -530,16 +537,16 @@ FindItem(void *dir, char *ename, unsigned short **previtem)
            *previtem = lp;
            return tp;
        }
-       DRelease((struct buffer *)lp, 0);
+       DRelease(lp, 0);
        lp = &(tp->next);
        if (tp->next == 0) {
            /* The end of the line */
-           DRelease((struct buffer *)lp, 0);   /* Release all locks. */
+           DRelease(lp, 0);    /* Release all locks. */
            return 0;
        }
        tp = GetBlob(dir, (u_short) ntohs(tp->next));
        if (!tp) {
-           DRelease((struct buffer *)lp, 0);
+           DRelease(lp, 0);
            return 0;
        }
     }
@@ -569,20 +576,20 @@ FindFid (void *dir, afs_uint32 vnode, afs_uint32 unique)
            while(tp) {
                if (vnode == ntohl(tp->fid.vnode) 
                    && unique == ntohl(tp->fid.vunique)) { 
-                   DRelease(dhp,0);
+                   DRelease(dhp, 0);
                    return tp;
                }
                lp = &(tp->next);
                if (tp->next == 0)
                    break;
                tp = GetBlob(dir,(u_short)ntohs(tp->next));
-               DRelease(lp,0);
+               DRelease(lp, 0);
            }
-           DRelease(lp,0);
+           DRelease(lp, 0);
        }
     }
-    DRelease(dhp,0);
-    return (struct DirEntry *)0;
+    DRelease(dhp, 0);
+    return NULL;
 }
 
 int
index 998f70e..bad7c06 100644 (file)
@@ -101,7 +101,7 @@ extern struct DirEntry *GetBlob(void *dir, afs_int32 blobno);
 extern int DirHash(register char *string);
 
 extern int DStat(int *abuffers, int *acalls, int *aios);
-extern void DRelease(struct buffer *bp, int flag);
+extern void DRelease(void *loc, int flag);
 extern int DVOffset(register void *ap);
 extern int DFlushVolume(register afs_int32 vid);
 extern int DFlushEntry(register afs_int32 *fid);
index dffec6e..b20e73b 100644 (file)
@@ -106,7 +106,7 @@ DirOK(void *file)
     /* Check magic number for first page */
     if (dhp->header.tag != htons(1234)) {
        printf("Bad first pageheader magic number.\n");
-       DRelease((struct buffer *)dhp, 0);
+       DRelease(dhp, 0);
        return 0;
     }
 
@@ -127,13 +127,13 @@ DirOK(void *file)
                 * two must exist for "." and ".."
                 */
                printf("The dir header alloc map for page %d is bad.\n", i);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
        } else {
            if ((j < 0) || (j > EPP)) {
                printf("The dir header alloc map for page %d is bad.\n", i);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
        }
@@ -144,7 +144,7 @@ DirOK(void *file)
                printf
                    ("A partially-full page occurs in slot %d, after the dir end.\n",
                     i);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
        } else if (j == EPP) {  /* is this the last page */
@@ -162,7 +162,7 @@ DirOK(void *file)
     if (usedPages < up) {
        printf
            ("Count of used directory pages does not match count in directory header\n");
-       DRelease((struct buffer *)dhp, 0);
+       DRelease(dhp, 0);
        return 0;
     }
 
@@ -174,7 +174,7 @@ DirOK(void *file)
        /* Read the page header */
        pp = (struct PageHeader *)DRead(file, i);
        if (!pp) {
-           DRelease((struct buffer *)dhp, 0);
+           DRelease(dhp, 0);
            if (DErrno != 0) {
                /* couldn't read page, but not because it wasn't there permanently */
                printf("Failed to read dir page %d (errno %d)\n", i, DErrno);
@@ -188,8 +188,8 @@ DirOK(void *file)
        /* check the tag field */
        if (pp->tag != htons(1234)) {
            printf("Directory page %d has a bad magic number.\n", i);
-           DRelease((struct buffer *)pp, 0);
-           DRelease((struct buffer *)dhp, 0);
+           DRelease(pp, 0);
+           DRelease(dhp, 0);
            return 0;
        }
 
@@ -223,12 +223,12 @@ DirOK(void *file)
            printf
                ("Header alloMap count doesn't match count in freebitmap for page %d.\n",
                 i);
-           DRelease((struct buffer *)pp, 0);
-           DRelease((struct buffer *)dhp, 0);
+           DRelease(pp, 0);
+           DRelease(dhp, 0);
            return 0;
        }
 
-       DRelease((struct buffer *)pp, 0);
+       DRelease(pp, 0);
     }
 
     /* Initialize the in-memory freebit map for all pages. */
@@ -256,7 +256,7 @@ DirOK(void *file)
            /* Verify that the entry is within range */
            if (entry < 0 || entry >= maxents) {
                printf("Out-of-range hash id %d in chain %d.\n", entry, i);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -270,11 +270,11 @@ DirOK(void *file)
                     */
                    printf("Could not get dir blob %d (errno %d)\n", entry,
                           DErrno);
-                   DRelease((struct buffer *)dhp, 0);
+                   DRelease(dhp, 0);
                    Die("dirok3");
                }
                printf("Invalid hash id %d in chain %d.\n", entry, i);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
            ne = ntohs(ep->next);
@@ -282,8 +282,8 @@ DirOK(void *file)
            /* There can't be more than maxents entries */
            if (++entcount >= maxents) {
                printf("Directory's hash chain %d is circular.\n", i);
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -291,8 +291,8 @@ DirOK(void *file)
            if (ep->name[0] == '\000') {
                printf("Dir entry %x in chain %d has bogus (null) name.\n",
                       (int)ep, i);
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -300,8 +300,8 @@ DirOK(void *file)
            if (ep->flag != FFIRST) {
                printf("Dir entry %x in chain %d has bogus flag field.\n", (int)ep,
                       i);
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -310,8 +310,8 @@ DirOK(void *file)
            if (j >= MAXENAME) {        /* MAXENAME counts the null */
                printf("Dir entry %x in chain %d has too-long name.\n", (int)ep,
                       i);
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -328,8 +328,8 @@ DirOK(void *file)
                printf
                    ("Dir entry %x should be in hash bucket %d but IS in %d.\n",
                     (int)ep, j, i);
-               DRelease((struct buffer *)ep, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(ep, 0);
+               DRelease(dhp, 0);
                return 0;
            }
 
@@ -341,8 +341,8 @@ DirOK(void *file)
                    printf
                        ("Dir entry %x, index 13 has name '%s' should be '.'\n",
                         (int)ep, ep->name);
-                   DRelease((struct buffer *)ep, 0);
-                   DRelease((struct buffer *)dhp, 0);
+                   DRelease(ep, 0);
+                   DRelease(dhp, 0);
                    return 0;
                }
            }
@@ -355,15 +355,15 @@ DirOK(void *file)
                    printf
                        ("Dir entry %x, index 14 has name '%s' should be '..'\n",
                         (int)ep, ep->name);
-                   DRelease((struct buffer *)ep, 0);
-                   DRelease((struct buffer *)dhp, 0);
+                   DRelease(ep, 0);
+                   DRelease(dhp, 0);
                    return 0;
                }
            }
 
            /* CHECK FOR DUPLICATE NAMES? */
 
-           DRelease((struct buffer *)ep, 0);
+           DRelease(ep, 0);
        }
     }
 
@@ -371,7 +371,7 @@ DirOK(void *file)
     if (!havedot || !havedotdot) {
        printf
            ("Directory entry '.' or '..' does not exist or is in the wrong index.\n");
-       DRelease((struct buffer *)dhp, 0);
+       DRelease(dhp, 0);
        return 0;
     }
 
@@ -385,7 +385,7 @@ DirOK(void *file)
            printf
                ("Failed on second attempt to read dir page %d (errno %d)\n",
                 i, DErrno);
-           DRelease((struct buffer *)dhp, 0);
+           DRelease(dhp, 0);
            /* if DErrno is 0, then the dir is really bad, and we return dir *not* OK.
             * otherwise, we want to return true (1), meaning the dir isn't known
             * to be bad (we can't tell, since I/Os are failing.
@@ -402,17 +402,17 @@ DirOK(void *file)
                printf
                    ("Entry freebitmap error, page %d, map offset %d, %x should be %x.\n",
                     i, j, pp->freebitmap[j], eaMap[count + j]);
-               DRelease((struct buffer *)pp, 0);
-               DRelease((struct buffer *)dhp, 0);
+               DRelease(pp, 0);
+               DRelease(dhp, 0);
                return 0;
            }
        }
 
-       DRelease((struct buffer *)pp, 0);
+       DRelease(pp, 0);
     }
 
     /* Finally cleanup and return. */
-    DRelease((struct buffer *)dhp, 0);
+    DRelease(dhp, 0);
     return 1;
 }
 
@@ -425,7 +425,7 @@ DirOK(void *file)
  * parent directory.
  */
 int
-DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu, 
+DirSalvage(void *fromFile, void *toFile, afs_int32 vn, afs_int32 vu,
           afs_int32 pvn, afs_int32 pvu)
 {
     /* First do a MakeDir on the target. */
@@ -479,7 +479,7 @@ DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu,
                    printf
                        ("can't continue down hash chain (entry %d, errno %d)\n",
                         entry, DErrno);
-                   DRelease((struct buffer *)dhp, 0);
+                   DRelease(dhp, 0);
                    return DErrno;
                }
                printf
@@ -500,15 +500,15 @@ DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu,
                    printf
                        ("Create of %s returned code %d, skipping to next hash chain.\n",
                         tname, code);
-                   DRelease((struct buffer *)ep, 0);
+                   DRelease(ep, 0);
                    break;
                }
            }
-           DRelease((struct buffer *)ep, 0);
+           DRelease(ep, 0);
        }
     }
 
     /* Clean up things. */
-    DRelease((struct buffer *)dhp, 0);
+    DRelease(dhp, 0);
     return 0;
 }