volser: remove commented code
[openafs.git] / src / volser / volprocs.c
index c78a737..2e483f3 100644 (file)
 
 #include <roken.h>
 
-#include <rx/xdr.h>
+#include <afs/opr.h>
+#ifdef AFS_PTHREAD_ENV
+# include <opr/lock.h>
+#endif
+
 #include <rx/rx.h>
 #include <rx/rxkad.h>
+#include <rx/rx_queue.h>
 #include <afs/afsint.h>
 #include <afs/prs_fs.h>
 #include <afs/nfs.h>
@@ -76,10 +81,10 @@ static afs_int32 VolCreateVolume(struct rx_call *, afs_int32, char *,
                                 afs_int32, afs_uint32, afs_uint32 *,
                                 afs_int32 *);
 static afs_int32 VolDeleteVolume(struct rx_call *, afs_int32);
-static afs_int32 VolClone(struct rx_call *, afs_int32, afs_uint32,
-                         afs_int32, char *, afs_uint32 *);
-static afs_int32 VolReClone(struct rx_call *, afs_int32, afs_int32);
-static afs_int32 VolTransCreate(struct rx_call *, afs_uint32, afs_int32,
+static afs_int32 VolClone(struct rx_call *, afs_int32, VolumeId,
+                         afs_int32, char *, VolumeId *);
+static afs_int32 VolReClone(struct rx_call *, afs_int32, VolumeId);
+static afs_int32 VolTransCreate(struct rx_call *, VolumeId, afs_int32,
                                afs_int32, afs_int32 *);
 static afs_int32 VolGetNthVolume(struct rx_call *, afs_int32, afs_uint32 *,
                                 afs_int32 *);
@@ -99,9 +104,9 @@ static afs_int32 VolSetInfo(struct rx_call *, afs_int32, struct volintInfo *);
 static afs_int32 VolGetName(struct rx_call *, afs_int32, char **);
 static afs_int32 VolListPartitions(struct rx_call *, struct pIDs *);
 static afs_int32 XVolListPartitions(struct rx_call *, struct partEntries *);
-static afs_int32 VolListOneVolume(struct rx_call *, afs_int32, afs_uint32,
+static afs_int32 VolListOneVolume(struct rx_call *, afs_int32, VolumeId,
                                  volEntries *);
-static afs_int32 VolXListOneVolume(struct rx_call *, afs_int32, afs_uint32,
+static afs_int32 VolXListOneVolume(struct rx_call *, afs_int32, VolumeId,
                                   volXEntries *);
 static afs_int32 VolListVolumes(struct rx_call *, afs_int32, afs_int32,
                                volEntries *);
@@ -109,8 +114,8 @@ static afs_int32 VolXListVolumes(struct rx_call *, afs_int32, afs_int32,
                                volXEntries *);
 static afs_int32 VolMonitor(struct rx_call *, transDebugEntries *);
 static afs_int32 VolSetIdsTypes(struct rx_call *, afs_int32, char [],
-                               afs_int32, afs_uint32, afs_uint32,
-                               afs_uint32);
+                               afs_int32, VolumeId, VolumeId,
+                               VolumeId);
 static afs_int32 VolSetDate(struct rx_call *, afs_int32, afs_int32);
 
 /**
@@ -191,12 +196,12 @@ PartitionID(char *aname)
 }
 
 static int
-ConvertVolume(afs_uint32 avol, char *aname, afs_int32 asize)
+ConvertVolume(VolumeId avol, char *aname, afs_int32 asize)
 {
     if (asize < 18)
        return -1;
     /* It's better using the Generic VFORMAT since otherwise we have to make changes to too many places... The 14 char limitation in names hits us again in AIX; print in field of 9 digits (still 10 for the rest), right justified with 0 padding */
-    snprintf(aname, asize, VFORMAT, (unsigned long)avol);
+    snprintf(aname, asize, VFORMAT, afs_printable_VolumeId_lu(avol));
     return 0;
 }
 
@@ -354,7 +359,7 @@ ViceCreateRoot(Volume *vp)
     did.Vnode = (VnodeId) 1;
     did.Unique = 1;
 
-    osi_Assert(!(afs_dir_MakeDir(&dir, (afs_int32 *)&did, (afs_int32 *)&did)));
+    opr_Verify(!(afs_dir_MakeDir(&dir, (afs_int32 *)&did, (afs_int32 *)&did)));
     DFlush();                  /* flush all modified dir buffers out */
     DZap(&dir);                        /* Remove all buffers for this dir */
     length = afs_dir_Length(&dir);     /* Remember size of this directory */
@@ -394,9 +399,9 @@ ViceCreateRoot(Volume *vp)
     IH_INIT(h, vp->device, V_parentId(vp),
            vp->vnodeIndex[vLarge].handle->ih_ino);
     fdP = IH_OPEN(h);
-    osi_Assert(fdP != NULL);
+    opr_Assert(fdP != NULL);
     nBytes = FDH_PWRITE(fdP, vnode, SIZEOF_LARGEDISKVNODE, vnodeIndexOffset(vcp, 1));
-    osi_Assert(nBytes == SIZEOF_LARGEDISKVNODE);
+    opr_Assert(nBytes == SIZEOF_LARGEDISKVNODE);
     FDH_REALLYCLOSE(fdP);
     IH_RELEASE(h);
     VNDISK_GET_LEN(length, vnode);
@@ -443,9 +448,6 @@ VolPartitionInfo(struct rx_call *acid, char *pname, struct diskPartition64
 {
     struct DiskPartition64 *dp;
 
-/*
-    if (!afsconf_SuperUser(tdir, acid, caller)) return VOLSERBAD_ACCESS;
-*/
     VResetDiskUsage();
     dp = VGetPartition(pname, 0);
     if (dp) {
@@ -461,7 +463,7 @@ VolPartitionInfo(struct rx_call *acid, char *pname, struct diskPartition64
 
 /* obliterate a volume completely, and slowly. */
 afs_int32
-SAFSVolNukeVolume(struct rx_call *acid, afs_int32 apartID, afs_uint32 avolID)
+SAFSVolNukeVolume(struct rx_call *acid, afs_int32 apartID, VolumeId avolID)
 {
     afs_int32 code;
 
@@ -510,7 +512,7 @@ VolNukeVolume(struct rx_call *acid, afs_int32 apartID, afs_uint32 avolID)
  */
 afs_int32
 SAFSVolCreateVolume(struct rx_call *acid, afs_int32 apart, char *aname,
-                   afs_int32 atype, afs_uint32 aparent, afs_uint32 *avolid,
+                   afs_int32 atype, VolumeId aparent, VolumeId *avolid,
                    afs_int32 *atrans)
 {
     afs_int32 code;
@@ -642,14 +644,15 @@ VolDeleteVolume(struct rx_call *acid, afs_int32 atrans)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: Delete: volume %u already deleted \n", tt->volid);
+       Log("1 Volser: Delete: volume %" AFS_VOLID_FMT " already deleted \n",
+           afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
     if (DoLogging) {
        char buffer[16];
-       Log("%s on %s is executing Delete Volume %u\n", caller,
-           callerAddress(acid, buffer), tt->volid);
+       Log("%s on %s is executing Delete Volume %" AFS_VOLID_FMT "\n", caller,
+           callerAddress(acid, buffer), afs_printable_VolumeId_lu(tt->volid));
     }
     TSetRxCall(tt, acid, "DeleteVolume");
     VPurgeVolume(&error, tt->volume);  /* don't check error code, it is not set! */
@@ -664,7 +667,8 @@ VolDeleteVolume(struct rx_call *acid, afs_int32 atrans)
     if (TRELE(tt))
        return VOLSERTRELE_ERROR;
 
-    Log("1 Volser: Delete: volume %u deleted \n", tt->volid);
+    Log("1 Volser: Delete: volume %" AFS_VOLID_FMT " deleted \n",
+       afs_printable_VolumeId_lu(tt->volid));
     return 0;                  /* vpurgevolume doesn't set an error code */
 }
 
@@ -680,11 +684,10 @@ VolDeleteVolume(struct rx_call *acid, afs_int32 atrans)
  */
 /* for efficiency reasons, sometimes faster to piggyback a purge here */
 afs_int32
-SAFSVolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
-            afs_int32 newType, char *newName, afs_uint32 *newNumber)
+SAFSVolClone(struct rx_call *acid, afs_int32 atrans, VolumeId purgeId,
+            afs_int32 newType, char *newName, VolumeId *newNumber)
 {
     afs_int32 code;
-
     code = VolClone(acid, atrans, purgeId, newType, newName, newNumber);
     osi_auditU(acid, VS_CloneEvent, code, AUD_LONG, atrans, AUD_LONG, purgeId,
               AUD_STR, newName, AUD_LONG, newType, AUD_LONG, *newNumber,
@@ -693,10 +696,10 @@ SAFSVolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
 }
 
 static afs_int32
-VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
-            afs_int32 newType, char *newName, afs_uint32 *newNumber)
+VolClone(struct rx_call *acid, afs_int32 atrans, VolumeId purgeId,
+            afs_int32 newType, char *newName, VolumeId *newNumber)
 {
-    afs_uint32 newId;
+    VolumeId newId;
     struct Volume *originalvp, *purgevp, *newvp;
     Error error, code;
     struct volser_trans *tt, *ttc;
@@ -715,7 +718,6 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
            callerAddress(acid, buffer), newName);
     }
     error = 0;
-    originalvp = (Volume *) 0;
     purgevp = (Volume *) 0;
     newvp = (Volume *) 0;
     tt = ttc = (struct volser_trans *)0;
@@ -730,7 +732,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: Clone: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: Clone: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -745,7 +747,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
     if (purgeId) {
        purgevp = VAttachVolume_retry(&error, purgeId, V_VOLUPD);
        if (error) {
-           Log("1 Volser: Clone: Could not attach 'purge' volume %u; clone aborted\n", purgeId);
+           Log("1 Volser: Clone: Could not attach 'purge' volume %" AFS_VOLID_FMT "; clone aborted\n", afs_printable_VolumeId_lu(purgeId));
            goto fail;
        }
     } else {
@@ -753,14 +755,14 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
     }
     originalvp = tt->volume;
     if ((V_destroyMe(originalvp) == DESTROY_ME) || !V_inService(originalvp)) {
-       Log("1 Volser: Clone: Volume %d is offline and cannot be cloned\n",
-           V_id(originalvp));
+       Log("1 Volser: Clone: Volume %" AFS_VOLID_FMT " is offline and cannot be cloned\n",
+           afs_printable_VolumeId_lu(V_id(originalvp)));
        error = VOFFLINE;
        goto fail;
     }
     if (purgevp) {
        if (originalvp->device != purgevp->device) {
-           Log("1 Volser: Clone: Volumes %u and %u are on different devices\n", tt->volid, purgeId);
+           Log("1 Volser: Clone: Volumes %" AFS_VOLID_FMT " and %" AFS_VOLID_FMT " are on different devices\n", afs_printable_VolumeId_lu(tt->volid), afs_printable_VolumeId_lu(purgeId));
            error = EXDEV;
            goto fail;
        }
@@ -770,7 +772,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
            goto fail;
        }
        if (V_parentId(originalvp) != V_parentId(purgevp)) {
-           Log("1 Volser: Clone: Volume %u and volume %u were not originally cloned from the same parent; aborted\n", purgeId, tt->volid);
+           Log("1 Volser: Clone: Volume %" AFS_VOLID_FMT " and volume %" AFS_VOLID_FMT " were not originally cloned from the same parent; aborted\n", afs_printable_VolumeId_lu(purgeId), afs_printable_VolumeId_lu(tt->volid));
            error = EXDEV;
            goto fail;
        }
@@ -795,10 +797,10 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
     }
     if (newType == readonlyVolume)
        V_cloneId(originalvp) = newId;
-    Log("1 Volser: Clone: Cloning volume %u to new volume %u\n", tt->volid,
-       newId);
+    Log("1 Volser: Clone: Cloning volume %" AFS_VOLID_FMT " to new volume %" AFS_VOLID_FMT "\n", afs_printable_VolumeId_lu(tt->volid),
+       afs_printable_VolumeId_lu(newId));
     if (purgevp)
-       Log("1 Volser: Clone: Purging old read only volume %u\n", purgeId);
+       Log("1 Volser: Clone: Purging old read only volume %" AFS_VOLID_FMT "\n", afs_printable_VolumeId_lu(purgeId));
     CloneVolume(&error, originalvp, newvp, purgevp);
     purgevp = NULL;            /* clone releases it, maybe even if error */
     if (error) {
@@ -814,7 +816,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
        V_type(newvp) = backupVolume;
        V_backupId(originalvp) = newId;
     }
-    strcpy(newvp->header->diskstuff.name, newName);
+    strcpy(V_name(newvp), newName);
     V_creationDate(newvp) = V_copyDate(newvp);
     ClearVolumeStats(&V_disk(newvp));
     V_destroyMe(newvp) = DESTROY_ME;
@@ -871,7 +873,7 @@ VolClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 purgeId,
 
 /* reclone this volume into the specified id */
 afs_int32
-SAFSVolReClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 cloneId)
+SAFSVolReClone(struct rx_call *acid, afs_int32 atrans, VolumeId cloneId)
 {
     afs_int32 code;
 
@@ -882,7 +884,7 @@ SAFSVolReClone(struct rx_call *acid, afs_int32 atrans, afs_uint32 cloneId)
 }
 
 static afs_int32
-VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
+VolReClone(struct rx_call *acid, afs_int32 atrans, VolumeId cloneId)
 {
     struct Volume *originalvp, *clonevp;
     Error error, code;
@@ -896,18 +898,17 @@ VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
        return VOLSERBAD_ACCESS;
     if (DoLogging) {
        char buffer[16];
-       Log("%s on %s is executing Reclone Volume %u\n", caller,
-           callerAddress(acid, buffer), cloneId);
+       Log("%s on %s is executing Reclone Volume %" AFS_VOLID_FMT "\n", caller,
+           callerAddress(acid, buffer), afs_printable_VolumeId_lu(cloneId));
     }
     error = 0;
     clonevp = originalvp = (Volume *) 0;
-    tt = (struct volser_trans *)0;
 
     tt = FindTrans(atrans);
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolReClone: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolReClone: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -920,28 +921,28 @@ VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
 
     originalvp = tt->volume;
     if ((V_destroyMe(originalvp) == DESTROY_ME) || !V_inService(originalvp)) {
-       Log("1 Volser: Clone: Volume %d is offline and cannot be cloned\n",
-           V_id(originalvp));
+       Log("1 Volser: Clone: Volume %" AFS_VOLID_FMT " is offline and cannot be cloned\n",
+           afs_printable_VolumeId_lu(V_id(originalvp)));
        error = VOFFLINE;
        goto fail;
     }
 
     clonevp = VAttachVolume_retry(&error, cloneId, V_VOLUPD);
     if (error) {
-       Log("1 Volser: can't attach clone %d\n", cloneId);
+       Log("1 Volser: can't attach clone %" AFS_VOLID_FMT "\n", afs_printable_VolumeId_lu(cloneId));
        goto fail;
     }
 
     newType = V_type(clonevp); /* type of the new volume */
 
     if (originalvp->device != clonevp->device) {
-       Log("1 Volser: Clone: Volumes %u and %u are on different devices\n",
-           tt->volid, cloneId);
+       Log("1 Volser: Clone: Volumes %" AFS_VOLID_FMT " and %" AFS_VOLID_FMT " are on different devices\n",
+           afs_printable_VolumeId_lu(tt->volid), afs_printable_VolumeId_lu(cloneId));
        error = EXDEV;
        goto fail;
     }
     if (V_parentId(originalvp) != V_parentId(clonevp)) {
-       Log("1 Volser: Clone: Volume %u was not originally cloned from volume %u; aborted\n", cloneId, tt->volid);
+       Log("1 Volser: Clone: Volume %" AFS_VOLID_FMT " was not originally cloned from volume %" AFS_VOLID_FMT "; aborted\n", afs_printable_VolumeId_lu(cloneId), afs_printable_VolumeId_lu(tt->volid));
        error = EXDEV;
        goto fail;
     }
@@ -951,8 +952,8 @@ VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
     }
 
     error = 0;
-    Log("1 Volser: Clone: Recloning volume %u to volume %u\n", tt->volid,
-       cloneId);
+    Log("1 Volser: Clone: Recloning volume %" AFS_VOLID_FMT " to volume %" AFS_VOLID_FMT "\n", afs_printable_VolumeId_lu(tt->volid),
+       afs_printable_VolumeId_lu(cloneId));
     CloneVolume(&error, originalvp, clonevp, clonevp);
     if (error) {
        Log("1 Volser: Clone: reclone operation failed with code %d\n",
@@ -1039,7 +1040,7 @@ VolReClone(struct rx_call *acid, afs_int32 atrans, afs_int32 cloneId)
  * See volser.h for definition of iflags (the constants are named IT*).
  */
 afs_int32
-SAFSVolTransCreate(struct rx_call *acid, afs_uint32 volume, afs_int32 partition,
+SAFSVolTransCreate(struct rx_call *acid, VolumeId volume, afs_int32 partition,
                   afs_int32 iflags, afs_int32 *ttid)
 {
     afs_int32 code;
@@ -1051,7 +1052,7 @@ SAFSVolTransCreate(struct rx_call *acid, afs_uint32 volume, afs_int32 partition,
 }
 
 static afs_int32
-VolTransCreate(struct rx_call *acid, afs_uint32 volume, afs_int32 partition,
+VolTransCreate(struct rx_call *acid, VolumeId volume, afs_int32 partition,
                   afs_int32 iflags, afs_int32 *ttid)
 {
     struct volser_trans *tt;
@@ -1108,7 +1109,7 @@ VolTransCreate(struct rx_call *acid, afs_uint32 volume, afs_int32 partition,
  * Both the volume number and partition number (one-based) are returned.
  */
 afs_int32
-SAFSVolGetNthVolume(struct rx_call *acid, afs_int32 aindex, afs_uint32 *avolume,
+SAFSVolGetNthVolume(struct rx_call *acid, afs_int32 aindex, VolumeId *avolume,
                    afs_int32 *apart)
 {
     afs_int32 code;
@@ -1148,8 +1149,8 @@ VolGetFlags(struct rx_call *acid, afs_int32 atid, afs_int32 *aflags)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolGetFlags: volume %u has been deleted \n",
-           tt->volid);
+       Log("1 Volser: VolGetFlags: volume %" AFS_VOLID_FMT " has been deleted \n",
+           afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1192,8 +1193,8 @@ VolSetFlags(struct rx_call *acid, afs_int32 atid, afs_int32 aflags)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolSetFlags: volume %u has been deleted \n",
-           tt->volid);
+       Log("1 Volser: VolSetFlags: volume %" AFS_VOLID_FMT " has been deleted \n",
+           afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1263,16 +1264,13 @@ VolForward(struct rx_call *acid, afs_int32 fromTrans, afs_int32 fromDate,
 
     if (!afsconf_SuperUser(tdir, acid, caller))
        return VOLSERBAD_ACCESS;        /*not a super user */
-    /* initialize things */
-    tcon = (struct rx_connection *)0;
-    tt = (struct volser_trans *)0;
 
     /* find the local transaction */
     tt = FindTrans(fromTrans);
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolForward: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolForward: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1371,7 +1369,7 @@ SAFSVolForwardMultiple(struct rx_call *acid, afs_int32 fromTrans, afs_int32
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolForward: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolForward: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1494,7 +1492,7 @@ VolDump(struct rx_call *acid, afs_int32 fromTrans, afs_int32 fromDate,
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolDump: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolDump: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1542,10 +1540,15 @@ VolRestore(struct rx_call *acid, afs_int32 atrans, afs_int32 aflags,
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolRestore: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolRestore: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
+    if (DoLogging) {
+       char buffer[16];
+       Log("%s on %s is executing Restore %" AFS_VOLID_FMT "\n", caller,
+           callerAddress(acid, buffer), afs_printable_VolumeId_lu(tt->volid));
+    }
     TSetRxCall(tt, acid, "Restore");
 
     DFlushVolume(V_parentId(tt->volume)); /* Ensure dir buffers get dropped */
@@ -1611,8 +1614,8 @@ VolSetForwarding(struct rx_call *acid, afs_int32 atid, afs_int32 anewsite)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolSetForwarding: volume %u has been deleted \n",
-           tt->volid);
+       Log("1 Volser: VolSetForwarding: volume %" AFS_VOLID_FMT " has been deleted \n",
+           afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1652,8 +1655,8 @@ VolGetStatus(struct rx_call *acid, afs_int32 atrans,
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolGetStatus: volume %u has been deleted \n",
-           tt->volid);
+       Log("1 Volser: VolGetStatus: volume %" AFS_VOLID_FMT " has been deleted \n",
+           afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1665,7 +1668,7 @@ VolGetStatus(struct rx_call *acid, afs_int32 atrans,
        return ENOENT;
     }
 
-    td = &tv->header->diskstuff;
+    td = &(V_disk(tv));
     astatus->volID = td->id;
     astatus->nextUnique = td->uniquifier;
     astatus->type = td->type;
@@ -1716,7 +1719,7 @@ VolSetInfo(struct rx_call *acid, afs_int32 atrans,
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolSetInfo: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolSetInfo: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1728,7 +1731,7 @@ VolSetInfo(struct rx_call *acid, afs_int32 atrans,
        return ENOENT;
     }
 
-    td = &tv->header->diskstuff;
+    td = &(V_disk(tv));
     /*
      * Add more fields as necessary
      */
@@ -1776,7 +1779,7 @@ VolGetName(struct rx_call *acid, afs_int32 atrans, char **aname)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolGetName: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolGetName: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -1788,7 +1791,7 @@ VolGetName(struct rx_call *acid, afs_int32 atrans, char **aname)
        return ENOENT;
     }
 
-    td = &tv->header->diskstuff;
+    td = &(V_disk(tv));
     len = strlen(td->name) + 1;        /* don't forget the null */
     if (len >= SIZE) {
         TClearRxCall(tt);
@@ -1808,7 +1811,7 @@ VolGetName(struct rx_call *acid, afs_int32 atrans, char **aname)
  * - a noop now !*/
 afs_int32
 SAFSVolSignalRestore(struct rx_call *acid, char volname[], int volType,
-                    afs_uint32 parentId, afs_uint32 cloneId)
+                    VolumeId parentId, VolumeId cloneId)
 {
     return 0;
 }
@@ -1891,7 +1894,7 @@ XVolListPartitions(struct rx_call *acid, struct partEntries *pEntries)
        pEntries->partEntries_val = malloc(j * sizeof(int));
        if (!pEntries->partEntries_val)
            return ENOMEM;
-       memcpy((char *)pEntries->partEntries_val, (char *)&partList,
+       memcpy(pEntries->partEntries_val, partList.partId,
                j * sizeof(int));
        pEntries->partEntries_len = j;
     } else {
@@ -1912,14 +1915,14 @@ XVolListPartitions(struct rx_call *acid, struct partEntries *pEntries)
  *  false if we got to the end of the directory
  */
 static int
-GetNextVol(DIR *dirp, char *volname, afs_uint32 *volid)
+GetNextVol(DIR *dirp, char *volname, VolumeId *volid)
 {
     struct dirent *dp;
 
     while ((dp = readdir(dirp)) != NULL) {
        /* could be optimized on platforms with dp->d_namlen */
        if (dp->d_name[0] == 'V' && strlen(dp->d_name) == VHDRNAMELEN
-               && strcmp(&(dp->d_name[11]), VHDREXT) == 0) {
+               && strcmp(&(dp->d_name[VFORMATDIGITS + 1]), VHDREXT) == 0) {
            *volid = VolumeNumber(dp->d_name);
            strcpy(volname, dp->d_name);
            return 1;
@@ -1988,7 +1991,7 @@ static int
 FillVolInfo(Volume * vp, volint_info_handle_t * handle)
 {
     unsigned int numStatBytes, now;
-    struct VolumeDiskData *hdr = &vp->header->diskstuff;
+    struct VolumeDiskData *hdr = &(V_disk(vp));
 
     /*read in the relevant info */
     strcpy((char *)VOLINT_INFO_PTR(handle, name), hdr->name);
@@ -2131,7 +2134,7 @@ FillVolInfo(Volume * vp, volint_info_handle_t * handle)
  * @internal
  */
 static int
-GetVolObject(afs_uint32 volumeId, char * pname, Volume ** vp)
+GetVolObject(VolumeId volumeId, char * pname, Volume ** vp)
 {
     int code;
     SYNC_response res;
@@ -2187,7 +2190,7 @@ typedef enum {
  */
 static int
 GetVolInfo(afs_uint32 partId,
-          afs_uint32 volumeId,
+          VolumeId volumeId,
           char * pname,
           char * volname,
           volint_info_handle_t * handle,
@@ -2212,7 +2215,7 @@ GetVolInfo(afs_uint32 partId,
     ttc = NewTrans(volumeId, partId);
     if (!ttc) {
        code = -3;
-       VOLINT_INFO_STORE(handle, status, VOLSERVOLBUSY);
+       VOLINT_INFO_STORE(handle, status, VBUSY);
        VOLINT_INFO_STORE(handle, volid, volumeId);
        goto drop;
     }
@@ -2220,11 +2223,18 @@ GetVolInfo(afs_uint32 partId,
     /* Get volume from volserver */
     if (mode == VOL_INFO_LIST_MULTIPLE)
        tv = VAttachVolumeByName(&error, pname, volname, V_PEEK);
-    else
-       tv = VAttachVolumeByName_retry(&error, pname, volname, V_PEEK);
+    else {
+#ifdef AFS_DEMAND_ATTACH_FS
+       int mode = V_PEEK;
+#else
+       int mode = V_READONLY;   /* informs the fileserver to update the volume headers. */
+#endif
+       tv = VAttachVolumeByName_retry(&error, pname, volname, mode);
+    }
+
     if (error) {
-       Log("1 Volser: GetVolInfo: Could not attach volume %u (%s:%s) error=%d\n",
-           volumeId, pname, volname, error);
+       Log("1 Volser: GetVolInfo: Could not attach volume %" AFS_VOLID_FMT " (%s:%s) error=%d\n",
+           afs_printable_VolumeId_lu(volumeId), pname, volname, error);
        goto drop;
     }
 
@@ -2235,25 +2245,25 @@ GetVolInfo(afs_uint32 partId,
      *   -- tkeiser 11/28/2007
      */
 
-    if (tv->header->diskstuff.destroyMe == DESTROY_ME) {
+    if (V_destroyMe(tv) == DESTROY_ME) {
        switch (mode) {
        case VOL_INFO_LIST_MULTIPLE:
            code = -2;
            goto drop;
 
        case VOL_INFO_LIST_SINGLE:
-           Log("1 Volser: GetVolInfo: Volume %u (%s:%s) will be destroyed on next salvage\n",
-               volumeId, pname, volname);
+           Log("1 Volser: GetVolInfo: Volume %" AFS_VOLID_FMT " (%s:%s) will be destroyed on next salvage\n",
+               afs_printable_VolumeId_lu(volumeId), pname, volname);
 
        default:
            goto drop;
        }
     }
 
-    if (tv->header->diskstuff.needsSalvaged) {
+    if (V_needsSalvaged(tv)) {
        /*this volume will be salvaged */
-       Log("1 Volser: GetVolInfo: Volume %u (%s:%s) needs to be salvaged\n",
-           volumeId, pname, volname);
+       Log("1 Volser: GetVolInfo: Volume %" AFS_VOLID_FMT " (%s:%s) needs to be salvaged\n",
+           afs_printable_VolumeId_lu(volumeId), pname, volname);
     }
 
 #ifdef AFS_DEMAND_ATTACH_FS
@@ -2297,8 +2307,8 @@ GetVolInfo(afs_uint32 partId,
        if (error) {
            VOLINT_INFO_STORE(handle, status, 0);
            strcpy((char *)VOLINT_INFO_PTR(handle, name), volname);
-           Log("1 Volser: GetVolInfo: Could not detach volume %u (%s:%s)\n",
-               volumeId, pname, volname);
+           Log("1 Volser: GetVolInfo: Could not detach volume %" AFS_VOLID_FMT " (%s:%s)\n",
+               afs_printable_VolumeId_lu(volumeId), pname, volname);
        }
     }
     if (ttc) {
@@ -2312,7 +2322,7 @@ GetVolInfo(afs_uint32 partId,
 /*return the header information about the <volid> */
 afs_int32
 SAFSVolListOneVolume(struct rx_call *acid, afs_int32 partid,
-                     afs_uint32 volumeId, volEntries *volumeInfo)
+                     VolumeId volumeId, volEntries *volumeInfo)
 {
     afs_int32 code;
 
@@ -2323,14 +2333,13 @@ SAFSVolListOneVolume(struct rx_call *acid, afs_int32 partid,
 
 static afs_int32
 VolListOneVolume(struct rx_call *acid, afs_int32 partid,
-                 afs_uint32 volumeId, volEntries *volumeInfo)
+                 VolumeId volumeId, volEntries *volumeInfo)
 {
     struct DiskPartition64 *partP;
     char pname[9], volname[20];
     DIR *dirp;
-    afs_uint32 volid;
+    VolumeId volid;
     int found = 0;
-    int code;
     volint_info_handle_t handle;
 
     volumeInfo->volEntries_val = calloc(1, sizeof(volintInfo));
@@ -2361,19 +2370,20 @@ VolListOneVolume(struct rx_call *acid, afs_int32 partid,
        handle.volinfo_type = VOLINT_INFO_TYPE_BASE;
        handle.volinfo_ptr.base = volumeInfo->volEntries_val;
 
-       code = GetVolInfo(partid,
-                         volid,
-                         pname,
-                         volname,
-                         &handle,
-                         VOL_INFO_LIST_SINGLE);
+       /* The return code from GetVolInfo is ignored; there is no error from
+        * it that results in the whole call being aborted. Any volume
+        * attachment failures are reported in 'status' field in the
+        * volumeInfo payload. */
+       GetVolInfo(partid,
+                  volid,
+                  pname,
+                  volname,
+                  &handle,
+                  VOL_INFO_LIST_SINGLE);
     }
 
     closedir(dirp);
-    if (found)
-        return code ? ENODEV: 0;
-    else
-        return ENODEV;
+    return (found) ? 0 : ENODEV;
 }
 
 /*------------------------------------------------------------------------
@@ -2401,7 +2411,7 @@ VolListOneVolume(struct rx_call *acid, afs_int32 partid,
 
 afs_int32
 SAFSVolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
-                     afs_uint32 a_volID, volXEntries *a_volumeXInfoP)
+                     VolumeId a_volID, volXEntries *a_volumeXInfoP)
 {
     afs_int32 code;
 
@@ -2412,15 +2422,14 @@ SAFSVolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
 
 static afs_int32
 VolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
-                  afs_uint32 a_volID, volXEntries *a_volumeXInfoP)
+                  VolumeId a_volID, volXEntries *a_volumeXInfoP)
 {                              /*SAFSVolXListOneVolume */
 
     struct DiskPartition64 *partP;     /*Ptr to partition */
     char pname[9], volname[20];        /*Partition, volume names */
     DIR *dirp;                 /*Partition directory ptr */
-    afs_uint32 currVolID;              /*Current volume ID */
+    VolumeId currVolID;                /*Current volume ID */
     int found = 0;             /*Did we find the volume we need? */
-    int code;
     volint_info_handle_t handle;
 
     /*
@@ -2432,7 +2441,6 @@ VolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
        return ENOMEM;
 
     a_volumeXInfoP->volXEntries_len = 1;
-    code = ENODEV;
 
     /*
      * If the partition name we've been given is bad, bogue out.
@@ -2476,13 +2484,16 @@ VolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
        handle.volinfo_type = VOLINT_INFO_TYPE_EXT;
        handle.volinfo_ptr.ext = a_volumeXInfoP->volXEntries_val;
 
-       code = GetVolInfo(a_partID,
-                         a_volID,
-                         pname,
-                         volname,
-                         &handle,
-                         VOL_INFO_LIST_SINGLE);
-
+       /* The return code from GetVolInfo is ignored; there is no error from
+        * it that results in the whole call being aborted. Any volume
+        * attachment failures are reported in 'status' field in the
+        * volumeInfo payload. */
+       GetVolInfo(a_partID,
+                  a_volID,
+                  pname,
+                  volname,
+                  &handle,
+                  VOL_INFO_LIST_SINGLE);
     }
 
     /*
@@ -2490,10 +2501,7 @@ VolXListOneVolume(struct rx_call *a_rxCidP, afs_int32 a_partID,
      * return the proper value.
      */
     closedir(dirp);
-    if (found)
-        return code ? ENODEV: 0;
-    else
-        return ENODEV;
+    return (found) ? 0 : ENODEV;
 }                              /*SAFSVolXListOneVolume */
 
 /*returns all the volumes on partition partid. If flags = 1 then all the
@@ -2518,7 +2526,7 @@ VolListVolumes(struct rx_call *acid, afs_int32 partid, afs_int32 flags,
     afs_int32 allocSize = 1000;        /*to be changed to a larger figure */
     char pname[9], volname[20];
     DIR *dirp;
-    afs_uint32 volid;
+    VolumeId volid;
     int code;
     volint_info_handle_t handle;
 
@@ -2628,7 +2636,7 @@ VolXListVolumes(struct rx_call *a_rxCidP, afs_int32 a_partID,
     afs_int32 allocSize = 1000;        /*To be changed to a larger figure */
     char pname[9], volname[20];        /*Partition, volume names */
     DIR *dirp;                 /*Partition directory ptr */
-    afs_uint32 volid;          /*Current volume ID */
+    VolumeId volid;            /*Current volume ID */
     int code;
     volint_info_handle_t handle;
 
@@ -2805,8 +2813,8 @@ done:
 
 afs_int32
 SAFSVolSetIdsTypes(struct rx_call *acid, afs_int32 atid, char name[],
-                  afs_int32 type, afs_uint32 pId, afs_uint32 cloneId,
-                  afs_uint32 backupId)
+                  afs_int32 type, afs_uint32 pId, VolumeId cloneId,
+                  VolumeId backupId)
 {
     afs_int32 code;
 
@@ -2819,8 +2827,8 @@ SAFSVolSetIdsTypes(struct rx_call *acid, afs_int32 atid, char name[],
 
 static afs_int32
 VolSetIdsTypes(struct rx_call *acid, afs_int32 atid, char name[],
-              afs_int32 type, afs_uint32 pId, afs_uint32 cloneId,
-              afs_uint32 backupId)
+              afs_int32 type, VolumeId pId, VolumeId cloneId,
+              VolumeId backupId)
 {
     struct Volume *tv;
     Error error = 0;
@@ -2836,7 +2844,7 @@ VolSetIdsTypes(struct rx_call *acid, afs_int32 atid, char name[],
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolSetIds: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolSetIds: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -2892,7 +2900,7 @@ VolSetDate(struct rx_call *acid, afs_int32 atid, afs_int32 cdate)
     if (!tt)
        return ENOENT;
     if (tt->vflags & VTDeleted) {
-       Log("1 Volser: VolSetDate: volume %u has been deleted \n", tt->volid);
+       Log("1 Volser: VolSetDate: volume %" AFS_VOLID_FMT " has been deleted \n", afs_printable_VolumeId_lu(tt->volid));
        TRELE(tt);
        return ENOENT;
     }
@@ -2920,7 +2928,7 @@ VolSetDate(struct rx_call *acid, afs_int32 atid, afs_int32 cdate)
 
 afs_int32
 SAFSVolConvertROtoRWvolume(struct rx_call *acid, afs_int32 partId,
-                          afs_uint32 volumeId)
+                          VolumeId volumeId)
 {
 #ifdef AFS_NT40_ENV
     return EXDEV;
@@ -2931,7 +2939,7 @@ SAFSVolConvertROtoRWvolume(struct rx_call *acid, afs_int32 partId,
     char pname[16], volname[20];
     struct DiskPartition64 *partP;
     afs_int32 ret = ENODEV;
-    afs_uint32 volid;
+    VolumeId volid;
 
     if (!afsconf_SuperUser(tdir, acid, caller))
        return VOLSERBAD_ACCESS;        /*not a super user */
@@ -2962,10 +2970,8 @@ SAFSVolConvertROtoRWvolume(struct rx_call *acid, afs_int32 partId,
        }
     }
 
-    if (ttc) {
+    if (ttc)
         DeleteTrans(ttc, 1);
-        ttc = (struct volser_trans *)0;
-    }
 
     closedir(dirp);
     return ret;