rx: Make statistics interface use Atomics
[openafs.git] / src / viced / afsfileprocs.c
index b064464..b2a134e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2000, International Business Machines Corporation and others.
  * All Rights Reserved.
- * 
+ *
  * This software has been released under the terms of the IBM Public
  * License.  For details, see the LICENSE file in the top-level source
  * directory or online at http://www.openafs.org/dl/license10.html
 /*                                                                      */
 /* ********************************************************************** */
 
-/* 
- * in Check_PermissionRights, certain privileges are afforded to the owner 
- * of the volume, or the owner of a file.  Are these considered "use of 
- * privilege"? 
+/*
+ * in Check_PermissionRights, certain privileges are afforded to the owner
+ * of the volume, or the owner of a file.  Are these considered "use of
+ * privilege"?
  */
 
 #include <afsconfig.h>
 #include <afs/afsutil.h>
 #include <afs/dir.h>
 
-extern void SetDirHandle(register DirHandle * dir, register Vnode * vnode);
+extern void SetDirHandle(DirHandle * dir, Vnode * vnode);
 extern void FidZap(DirHandle * file);
 extern void FidZero(DirHandle * file);
 
@@ -208,7 +208,7 @@ extern int CEs, CEBlocks;
 extern int HTs, HTBlocks;
 
 afs_int32 FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
-                           register struct rx_call *Call, afs_sfsize_t Pos,
+                           struct rx_call *Call, afs_sfsize_t Pos,
                            afs_sfsize_t Len, afs_int32 Int64Mode,
 #if FS_STATS_DETAILED
                            afs_sfsize_t * a_bytesToFetchP,
@@ -218,7 +218,7 @@ afs_int32 FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
 
 afs_int32 StoreData_RXStyle(Volume * volptr, Vnode * targetptr,
                            struct AFSFid *Fid, struct client *client,
-                           register struct rx_call *Call, afs_fsize_t Pos,
+                           struct rx_call *Call, afs_fsize_t Pos,
                            afs_fsize_t Length, afs_fsize_t FileLength,
                            int sync,
 #if FS_STATS_DETAILED
@@ -244,7 +244,7 @@ GetLinkCount(Volume * avp, struct stat *astat)
 afs_int32
 SpareComp(Volume * avolp)
 {
-    register afs_int32 temp;
+    afs_int32 temp;
 
     FS_LOCK;
     if (PctSpare) {
@@ -269,7 +269,7 @@ SpareComp(Volume * avolp)
  * the Cache Manager knows that the volume must be purged from the stat cache.
  */
 static void
-SetVolumeSync(register struct AFSVolSync *async, register Volume * avol)
+SetVolumeSync(struct AFSVolSync *async, Volume * avol)
 {
     FS_LOCK;
     /* date volume instance was created */
@@ -293,7 +293,7 @@ SetVolumeSync(register struct AFSVolSync *async, register Volume * avol)
  * Call returns rx connection in passed in *tconn
  */
 static int
-CallPreamble(register struct rx_call *acall, int activecall,
+CallPreamble(struct rx_call *acall, int activecall,
             struct rx_connection **tconn, struct host **ahostp)
 {
     struct host *thost;
@@ -380,7 +380,7 @@ CallPreamble(register struct rx_call *acall, int activecall,
        if (BreakDelayedCallBacks_r(thost)) {
            ViceLog(0,
                    ("BreakDelayedCallbacks FAILED for host %s:%d which IS UP.  Connection from %s:%d.  Possible network or routing failure.\n",
-                    afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2), 
+                    afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2),
                     ntohs(rxr_PortOf(*tconn))));
            if (MultiProbeAlternateAddress_r(thost)) {
                ViceLog(0,
@@ -396,7 +396,7 @@ CallPreamble(register struct rx_call *acall, int activecall,
                if (BreakDelayedCallBacks_r(thost)) {
                    ViceLog(0,
                            ("BreakDelayedCallbacks FAILED AGAIN for host %s:%d which IS UP.  Connection from %s:%d.  Possible network or routing failure.\n",
-                             afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2), 
+                             afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2),
                              ntohs(rxr_PortOf(*tconn))));
                    code = -1;
                }
@@ -416,7 +416,7 @@ CallPreamble(register struct rx_call *acall, int activecall,
 
 
 static afs_int32
-CallPostamble(register struct rx_connection *aconn, afs_int32 ret,
+CallPostamble(struct rx_connection *aconn, afs_int32 ret,
              struct host *ahost)
 {
     struct host *thost;
@@ -425,7 +425,7 @@ CallPostamble(register struct rx_connection *aconn, afs_int32 ret,
 
     H_LOCK;
     tclient = h_FindClient_r(aconn);
-    if (!tclient) 
+    if (!tclient)
        goto busyout;
     thost = tclient->host;
     if (thost->hostFlags & HERRORTRANS)
@@ -482,7 +482,7 @@ CheckVnode(AFSFid * fid, Volume ** volptr, Vnode ** vptr, int lock)
        extern int VInit;
 
        while (1) {
-           int restarting = 
+           int restarting =
 #ifdef AFS_DEMAND_ATTACH_FS
                VSALVAGE
 #else
@@ -491,7 +491,7 @@ CheckVnode(AFSFid * fid, Volume ** volptr, Vnode ** vptr, int lock)
                ;
 
            errorCode = 0;
-           *volptr = VGetVolume(&local_errorCode, &errorCode, (afs_int32) fid->Volume);
+           *volptr = VGetVolumeNoWait(&local_errorCode, &errorCode, (afs_int32) fid->Volume);
            if (!errorCode) {
                assert(*volptr);
                break;
@@ -499,35 +499,35 @@ CheckVnode(AFSFid * fid, Volume ** volptr, Vnode ** vptr, int lock)
            if ((errorCode == VOFFLINE) && (VInit < 2)) {
                /* The volume we want may not be attached yet because
                 * the volume initialization is not yet complete.
-                * We can do several things: 
+                * We can do several things:
                 *     1.  return -1, which will cause users to see
                 *         "connection timed out".  This is more or
                 *         less the same as always, except that the servers
                 *         may appear to bounce up and down while they
                 *         are actually restarting.
-                *     2.  return VBUSY which will cause clients to 
+                *     2.  return VBUSY which will cause clients to
                 *         sleep and retry for 6.5 - 15 minutes, depending
                 *         on what version of the CM they are running.  If
-                *         the file server takes longer than that interval 
+                *         the file server takes longer than that interval
                 *         to attach the desired volume, then the application
-                *         will see an ENODEV or EIO.  This approach has 
+                *         will see an ENODEV or EIO.  This approach has
                 *         the advantage that volumes which have been attached
                 *         are immediately available, it keeps the server's
                 *         immediate backlog low, and the call is interruptible
                 *         by the user.  Users see "waiting for busy volume."
                 *     3.  sleep here and retry.  Some people like this approach
-                *         because there is no danger of seeing errors.  However, 
-                *         this approach only works with a bounded number of 
+                *         because there is no danger of seeing errors.  However,
+                *         this approach only works with a bounded number of
                 *         clients, since the pending queues will grow without
                 *         stopping.  It might be better to find a way to take
                 *         this call and stick it back on a queue in order to
-                *         recycle this thread for a different request.    
+                *         recycle this thread for a different request.
                 *     4.  Return a new error code, which new cache managers will
                 *         know enough to interpret as "sleep and retry", without
                 *         the upper bound of 6-15 minutes that is imposed by the
                 *         VBUSY handling.  Users will see "waiting for
                 *         busy volume," so they know that something is
-                *         happening.  Old cache managers must be able to do  
+                *         happening.  Old cache managers must be able to do
                 *         something reasonable with this, for instance, mark the
                 *         server down.  Fortunately, any error code < 0
                 *         will elicit that behavior. See #1.
@@ -568,7 +568,7 @@ CheckVnode(AFSFid * fid, Volume ** volptr, Vnode ** vptr, int lock)
                    }
                }
            }
-           /* allow read operations on busy volume. 
+           /* allow read operations on busy volume.
             * must check local_errorCode because demand attach fs
             * can have local_errorCode == VSALVAGING, errorCode == VBUSY */
            else if (local_errorCode == VBUSY && lock == READ_LOCK) {
@@ -649,7 +649,7 @@ SetAccessList(Vnode ** targetptr, Volume ** volume,
 
 /* Must not be called with H_LOCK held */
 static void
-client_CheckRights(struct client *client, struct acl_accessList *ACL, 
+client_CheckRights(struct client *client, struct acl_accessList *ACL,
                   afs_int32 *rights)
 {
     *rights = 0;
@@ -667,7 +667,7 @@ client_HasAsMember(struct client *client, afs_int32 id)
     afs_int32 code = 0;
 
     ObtainReadLock(&client->lock);
-    if (client->CPS.prlist_len > 0 && !client->deleted && 
+    if (client->CPS.prlist_len > 0 && !client->deleted &&
        client->host && !(client->host->hostFlags & HOSTDELETED))
        code = acl_IsAMember(id, &client->CPS);
     ReleaseReadLock(&client->lock);
@@ -714,7 +714,7 @@ GetRights(struct client *client, struct acl_accessList *ACL,
        char hoststr[16];
        ViceLog(5,
                ("CheckRights: len=%u, for host=%s:%d\n",
-                client->host->hcps.prlist_len, 
+                client->host->hcps.prlist_len,
                 afs_inet_ntoa_r(client->host->host, hoststr),
                 ntohs(client->host->port)));
     } else
@@ -833,14 +833,14 @@ PutVolumePackage(Vnode * parentwhentargetnotdir, Vnode * targetptr,
 }                              /*PutVolumePackage */
 
 static int
-VolumeOwner(register struct client *client, register Vnode * targetptr)
+VolumeOwner(struct client *client, Vnode * targetptr)
 {
     afs_int32 owner = V_owner(targetptr->volumePtr);   /* get volume owner */
 
     if (owner >= 0)
        return (client->ViceId == owner);
     else {
-       /* 
+       /*
         * We don't have to check for host's cps since only regular
         * viceid are volume owners.
         */
@@ -863,7 +863,7 @@ VolumeRootVnode(Vnode * targetptr)
  * StoreStatus) related calls
  */
 /* this code should probably just set a "priv" flag where all the audit events
- * are now, and only generate the audit event once at the end of the routine, 
+ * are now, and only generate the audit event once at the end of the routine,
  * thus only generating the event if all the checks succeed, but only because
  * of the privilege       XXX
  */
@@ -1113,7 +1113,8 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
     Inode ino, nearInode;
     ssize_t rdlen;
     ssize_t wrlen;
-    register afs_fsize_t size;
+    afs_fsize_t size;
+    afs_foff_t done;
     size_t length;
     char *buff;
     int rc;                    /* return code */
@@ -1125,9 +1126,9 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
        DFlush();               /* just in case? */
 
     VN_GET_LEN(size, targetptr);
-    if (size > off) 
+    if (size > off)
        size -= off;
-    else 
+    else
        size = 0;
     if (size > len)
        size = len;
@@ -1144,7 +1145,7 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
        ViceLog(0, ("Volume %u now offline, must be salvaged.\n",
                    volptr->hashid));
        return EIO;
-    }    
+    }
     targFdP = IH_OPEN(targetptr->handle);
     if (targFdP == NULL) {
        rc = errno;
@@ -1175,8 +1176,7 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
     newFdP = IH_OPEN(newH);
     assert(newFdP != NULL);
 
-    FDH_SEEK(targFdP, off, SEEK_SET);
-    FDH_SEEK(newFdP, off, SEEK_SET);
+    done = off;
     while (size > 0) {
        if (size > COPYBUFFSIZE) {      /* more than a buffer */
            length = COPYBUFFSIZE;
@@ -1185,10 +1185,11 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
            length = size;
            size = 0;
        }
-       rdlen = FDH_READ(targFdP, buff, length);
-       if (rdlen == length)
-           wrlen = FDH_WRITE(newFdP, buff, length);
-       else
+       rdlen = FDH_PREAD(targFdP, buff, length, done);
+       if (rdlen == length) {
+           wrlen = FDH_PWRITE(newFdP, buff, length, done);
+           done += rdlen;
+       } else
            wrlen = 0;
        /*  Callers of this function are not prepared to recover
         *  from error that put the filesystem in an inconsistent
@@ -1265,16 +1266,14 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_foff_t off, afs_fsize_t len)
 
 static int
 CopyOnWrite2(FdHandle_t *targFdP, FdHandle_t *newFdP, afs_foff_t off,
-             afs_fsize_t size)
+             afs_sfsize_t size)
 {
     char *buff = malloc(COPYBUFFSIZE);
     size_t length;
     ssize_t rdlen;
     ssize_t wrlen;
     int rc = 0;
-
-    FDH_SEEK(targFdP, off, SEEK_SET);
-    FDH_SEEK(newFdP, off, SEEK_SET);
+    afs_foff_t done = off;
 
     if (size > FDH_SIZE(targFdP) - off)
        size = FDH_SIZE(targFdP) - off;
@@ -1287,9 +1286,11 @@ CopyOnWrite2(FdHandle_t *targFdP, FdHandle_t *newFdP, afs_foff_t off,
            length = size;
            size = 0;
        }
-       rdlen = FDH_READ(targFdP, buff, length);
-       if (rdlen == length)
-           wrlen = FDH_WRITE(newFdP, buff, length);
+       rdlen = FDH_PREAD(targFdP, buff, length, done);
+       if (rdlen == length) {
+           wrlen = FDH_PWRITE(newFdP, buff, length, done);
+           done += rdlen;
+       }
        else
            wrlen = 0;
 
@@ -1318,6 +1319,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr,
     DirHandle childdir;                /* Handle for dir package I/O */
     Error errorCode = 0;
     int code;
+    afs_ino_str_t stmp;
 
     /* watch for invalid names */
     if (!strcmp(Name, ".") || !strcmp(Name, ".."))
@@ -1386,7 +1388,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr,
            if (errorCode == -1) {
                ViceLog(0,
                        ("DT: inode=%s, name=%s, errno=%d\n",
-                        PrintInode(NULL, VN_GET_INO(*targetptr)), Name,
+                        PrintInode(stmp, VN_GET_INO(*targetptr)), Name,
                         errno));
                if (errno != ENOENT)
                {
@@ -1455,7 +1457,7 @@ Update_ParentVnodeStatus(Vnode * parentptr, Volume * volptr, DirHandle * dir,
 
     parentptr->disk.dataVersion++;
     newlength = (afs_fsize_t) Length(dir);
-    /* 
+    /*
      * This is a called on both dir removals (i.e. remove, removedir, rename) but also in dir additions
      * (create, symlink, link, makedir) so we need to check if we have enough space
      * XXX But we still don't check the error since we're dealing with dirs here and really the increase
@@ -1722,6 +1724,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr,
     Error temp;
     Inode inode = 0;
     Inode nearInode;           /* hint for inode allocation in solaris */
+    afs_ino_str_t stmp;
 
     if ((errorCode =
         AdjustDiskUsage(volptr, BlocksPreallocatedForVnode,
@@ -1777,7 +1780,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr,
            if (IH_DEC(V_linkHandle(volptr), inode, V_parentId(volptr)))
                ViceLog(0,
                        ("Alloc_NewVnode: partition %s idec %s failed\n",
-                        volptr->partition->name, PrintInode(NULL, inode)));
+                        volptr->partition->name, PrintInode(stmp, inode)));
            IH_RELEASE((*targetptr)->handle);
 
            return errorCode;
@@ -1793,7 +1796,7 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr,
        if (IH_DEC(V_linkHandle(volptr), inode, V_parentId(volptr)))
            ViceLog(0,
                    ("Alloc_NewVnode: partition %s idec %s failed\n",
-                    volptr->partition->name, PrintInode(NULL, inode)));
+                    volptr->partition->name, PrintInode(stmp, inode)));
        IH_RELEASE((*targetptr)->handle);
        return (errorCode);
     }
@@ -1823,7 +1826,7 @@ HandleLocking(Vnode * targetptr, struct client *client, afs_int32 rights, ViceLo
                0;
        Time += AFS_LOCKWAIT;
        if (LockingType == LockRead) {
-           if ( !(rights & PRSFS_LOCK) && 
+           if ( !(rights & PRSFS_LOCK) &&
                  !(rights & PRSFS_WRITE) &&
                  !(OWNSp(client, targetptr) && (rights & PRSFS_INSERT)) )
                     return(EACCES);
@@ -1834,7 +1837,7 @@ HandleLocking(Vnode * targetptr, struct client *client, afs_int32 rights, ViceLo
            } else
                return (EAGAIN);
        } else if (LockingType == LockWrite) {
-           if ( !(rights & PRSFS_WRITE) && 
+           if ( !(rights & PRSFS_WRITE) &&
                 !(OWNSp(client, targetptr) && (rights & PRSFS_INSERT)) )
                return(EACCES);
 
@@ -1974,9 +1977,9 @@ RXGetVolumeStatus(AFSFetchVolumeStatus * status, char **name, char **offMsg,
 
 
 static afs_int32
-FileNameOK(register char *aname)
+FileNameOK(char *aname)
 {
-    register afs_int32 i, tc;
+    afs_int32 i, tc;
     i = strlen(aname);
     if (i >= 4) {
        /* watch for @sys on the right */
@@ -2018,19 +2021,19 @@ SRXAFS_FsCmd(struct rx_call * acall, struct AFSFid * Fid,
     default:
         code = EINVAL;
     }
-    ViceLog(1,("FsCmd: cmd = %d, code=%d\n", 
+    ViceLog(1,("FsCmd: cmd = %d, code=%d\n",
                        Inputs->command, Outputs->code));
     return code;
 }
 
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
 static struct afs_buffer {
     struct afs_buffer *next;
 } *freeBufferList = 0;
 static int afs_buffersAlloced = 0;
 
-static
-FreeSendBuffer(register struct afs_buffer *adata)
+static int
+FreeSendBuffer(struct afs_buffer *adata)
 {
     FS_LOCK;
     afs_buffersAlloced--;
@@ -2043,9 +2046,9 @@ FreeSendBuffer(register struct afs_buffer *adata)
 
 /* allocate space for sender */
 static char *
-AllocSendBuffer()
+AllocSendBuffer(void)
 {
-    register struct afs_buffer *tp;
+    struct afs_buffer *tp;
 
     FS_LOCK;
     afs_buffersAlloced++;
@@ -2065,7 +2068,7 @@ AllocSendBuffer()
     return (char *)tp;
 
 }                              /*AllocSendBuffer */
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
 
 /*
  * This routine returns the status info associated with the targetptr vnode
@@ -2341,7 +2344,7 @@ common_FetchData64(struct rx_call *acall, struct AFSFid *Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, FetchDataEvent, errorCode, 
+    osi_auditU(acall, FetchDataEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return (errorCode);
@@ -2353,7 +2356,7 @@ SRXAFS_FetchData(struct rx_call * acall, struct AFSFid * Fid, afs_int32 Pos,
                 afs_int32 Len, struct AFSFetchStatus * OutStatus,
                 struct AFSCallBack * CallBack, struct AFSVolSync * Sync)
 {
-    return common_FetchData64(acall, Fid, Pos, Len, OutStatus, CallBack, 
+    return common_FetchData64(acall, Fid, Pos, Len, OutStatus, CallBack,
                               Sync, 0);
 }
 
@@ -2489,9 +2492,9 @@ SRXAFS_FetchACL(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, FetchACLEvent, errorCode, 
+    osi_auditU(acall, FetchACLEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
-               AUD_FID, Fid, 
+               AUD_FID, Fid,
                AUD_ACL, AccessList->AFSOpaque_val, AUD_END);
     return errorCode;
 }                              /*SRXAFS_FetchACL */
@@ -2580,7 +2583,7 @@ SRXAFS_BulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                  struct AFSBulkStats * OutStats, struct AFSCBs * CallBacks,
                  struct AFSVolSync * Sync)
 {
-    register int i;
+    int i;
     afs_int32 nfiles;
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
@@ -2588,7 +2591,7 @@ SRXAFS_BulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     Volume *volptr = 0;                /* pointer to the volume */
     struct client *client = 0; /* pointer to the client data */
     afs_int32 rights, anyrights;       /* rights for this and any user */
-    register struct AFSFid *tfid;      /* file id we're dealing with now */
+    struct AFSFid *tfid;       /* file id we're dealing with now */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
     struct host *thost;
     struct client *t_client = NULL;     /* tmp pointer to the client data */
@@ -2716,7 +2719,7 @@ SRXAFS_BulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
 
   Audit_and_Return:
     ViceLog(2, ("SAFS_BulkStatus       returns %d\n", errorCode));
-    osi_auditU(acall, BulkFetchStatusEvent, errorCode, 
+    osi_auditU(acall, BulkFetchStatusEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FIDS, Fids, AUD_END);
     return errorCode;
@@ -2729,7 +2732,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                        struct AFSBulkStats * OutStats,
                        struct AFSCBs * CallBacks, struct AFSVolSync * Sync)
 {
-    register int i;
+    int i;
     afs_int32 nfiles;
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
@@ -2737,7 +2740,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     Volume *volptr = 0;                /* pointer to the volume */
     struct client *client = 0; /* pointer to the client data */
     afs_int32 rights, anyrights;       /* rights for this and any user */
-    register struct AFSFid *tfid;      /* file id we're dealing with now */
+    struct AFSFid *tfid;       /* file id we're dealing with now */
     struct rx_connection *tcon;
     struct host *thost;
     struct client *t_client = NULL;    /* tmp ptr to client data */
@@ -2806,7 +2809,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                              &rights, &anyrights))) {
            tstatus = &OutStats->AFSBulkStats_val[i];
            tstatus->errorCode = errorCode;
-           PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0, 
+           PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0,
                             volptr, &client);
            parentwhentargetnotdir = (Vnode *) 0;
            targetptr = (Vnode *) 0;
@@ -2892,7 +2895,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
 
   Audit_and_Return:
     ViceLog(2, ("SAFS_InlineBulkStatus returns %d\n", errorCode));
-    osi_auditU(acall, InlineBulkFetchStatusEvent, errorCode, 
+    osi_auditU(acall, InlineBulkFetchStatusEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FIDS, Fids, AUD_END);
     return 0;
@@ -2953,7 +2956,7 @@ SRXAFS_FetchStatus(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, FetchStatusEvent, code, 
+    osi_auditU(acall, FetchStatusEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return code;
@@ -3175,7 +3178,7 @@ common_StoreData64(struct rx_call *acall, struct AFSFid *Fid,
        FS_UNLOCK;
     }
 #endif /* FS_STATS_DETAILED */
-    osi_auditU(acall, StoreDataEvent, errorCode, 
+    osi_auditU(acall, StoreDataEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return (errorCode);
@@ -3187,7 +3190,7 @@ SRXAFS_StoreData(struct rx_call * acall, struct AFSFid * Fid,
                 afs_uint32 Length, afs_uint32 FileLength,
                 struct AFSFetchStatus * OutStatus, struct AFSVolSync * Sync)
 {
-    if (FileLength > 0x7fffffff || Pos > 0x7fffffff || 
+    if (FileLength > 0x7fffffff || Pos > 0x7fffffff ||
        (0x7fffffff - Pos) < Length)
         return EFBIG;
 
@@ -3311,7 +3314,7 @@ SRXAFS_StoreACL(struct rx_call * acall, struct AFSFid * Fid,
 
   Bad_StoreACL:
     /* Update and store volume/vnode and parent vnodes back */
-    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0, 
+    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0,
                     volptr, &client);
     ViceLog(2, ("SAFS_StoreACL returns %d\n", errorCode));
     errorCode = CallPostamble(tcon, errorCode, thost);
@@ -3334,7 +3337,7 @@ SRXAFS_StoreACL(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, StoreACLEvent, errorCode, 
+    osi_auditU(acall, StoreACLEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_ACL, AccessList->AFSOpaque_val, AUD_END);
     return errorCode;
@@ -3418,7 +3421,7 @@ SAFSS_StoreStatus(struct rx_call *acall, struct AFSFid *Fid,
 
   Bad_StoreStatus:
     /* Update and store volume/vnode and parent vnodes back */
-    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0, 
+    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0,
                     volptr, &client);
     ViceLog(2, ("SAFS_StoreStatus returns %d\n", errorCode));
     return errorCode;
@@ -3480,7 +3483,7 @@ SRXAFS_StoreStatus(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, StoreStatusEvent, code, 
+    osi_auditU(acall, StoreStatusEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return code;
@@ -3581,7 +3584,7 @@ SAFSS_RemoveFile(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
 
   Bad_RemoveFile:
     /* Update and store volume/vnode and parent vnodes back */
-    PutVolumePackage(parentwhentargetnotdir, targetptr, parentptr, 
+    PutVolumePackage(parentwhentargetnotdir, targetptr, parentptr,
                     volptr, &client);
     FidZap(&dir);
     ViceLog(2, ("SAFS_RemoveFile returns %d\n", errorCode));
@@ -3643,7 +3646,7 @@ SRXAFS_RemoveFile(struct rx_call * acall, struct AFSFid * DirFid, char *Name,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, RemoveFileEvent, code, 
+    osi_auditU(acall, RemoveFileEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name, AUD_END);
     return code;
@@ -3814,7 +3817,7 @@ SRXAFS_CreateFile(struct rx_call * acall, struct AFSFid * DirFid, char *Name,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, CreateFileEvent, code, 
+    osi_auditU(acall, CreateFileEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name, AUD_FID, OutFid, AUD_END);
     return code;
@@ -3859,6 +3862,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
     struct client *t_client;   /* tmp ptr to client data */
     struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
+    afs_ino_str_t stmp;
 
     FidZero(&olddir);
     FidZero(&newdir);
@@ -3941,7 +3945,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
 
     /* The CopyOnWrite might return ENOSPC ( disk full). Even if the second
      *  call to CopyOnWrite returns error, it is not necessary to revert back
-     *  the effects of the first call because the contents of the volume is 
+     *  the effects of the first call because the contents of the volume is
      *  not modified, it is only replicated.
      */
     if (oldvptr->disk.cloned) {
@@ -4147,7 +4151,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
                if (errorCode == -1) {
                    ViceLog(0,
                            ("Del: inode=%s, name=%s, errno=%d\n",
-                            PrintInode(NULL, VN_GET_INO(newfileptr)),
+                            PrintInode(stmp, VN_GET_INO(newfileptr)),
                             NewName, errno));
                    if ((errno != ENOENT) && (errno != EIO)
                        && (errno != ENXIO))
@@ -4270,7 +4274,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
        VPutVnode(&fileCode, newfileptr);
        assert(fileCode == 0);
     }
-    (void)PutVolumePackage(fileptr, (newvptr && newvptr != oldvptr ? 
+    (void)PutVolumePackage(fileptr, (newvptr && newvptr != oldvptr ?
                                     newvptr : 0), oldvptr, volptr, &client);
     FidZap(&olddir);
     FidZap(&newdir);
@@ -4339,9 +4343,9 @@ SRXAFS_Rename(struct rx_call * acall, struct AFSFid * OldDirFid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, RenameFileEvent, code, 
+    osi_auditU(acall, RenameFileEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
-               AUD_FID, OldDirFid, AUD_STR, OldName, 
+               AUD_FID, OldDirFid, AUD_STR, OldName,
                AUD_FID, NewDirFid, AUD_STR, NewName, AUD_END);
     return code;
 
@@ -4460,11 +4464,11 @@ SAFSS_Symlink(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
        ViceLog(0, ("Volume %u now offline, must be salvaged.\n",
                    volptr->hashid));
        return EIO;
-    }    
+    }
     len = strlen((char *) LinkContents);
-    code = (len == FDH_WRITE(fdP, (char *) LinkContents, len)) ? 0 : VDISKFULL;
-    if (code) 
-       ViceLog(0, ("SAFSS_Symlink FDH_WRITE failed for len=%d, Fid=%u.%d.%d\n", (int)len, OutFid->Volume, OutFid->Vnode, OutFid->Unique));
+    code = (len == FDH_PWRITE(fdP, (char *) LinkContents, len, 0)) ? 0 : VDISKFULL;
+    if (code)
+       ViceLog(0, ("SAFSS_Symlink FDH_PWRITE failed for len=%d, Fid=%u.%d.%d\n", (int)len, OutFid->Volume, OutFid->Vnode, OutFid->Unique));
     FDH_CLOSE(fdP);
     /*
      * Set up and return modified status for the parent dir and new symlink
@@ -4552,8 +4556,8 @@ SRXAFS_Symlink(struct rx_call *acall,     /* Rx call */
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, SymlinkEvent, code, 
-               AUD_ID, t_client ? t_client->ViceId : 0, 
+    osi_auditU(acall, SymlinkEvent, code,
+               AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name,
               AUD_FID, OutFid, AUD_STR, LinkContents, AUD_END);
     return code;
@@ -4682,7 +4686,7 @@ SAFSS_Link(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     /* break call back on DirFid */
     BreakCallBack(client->host, DirFid, 0);
     /*
-     * We also need to break the callback for the file that is hard-linked since part 
+     * We also need to break the callback for the file that is hard-linked since part
      * of its status (like linkcount) is changed
      */
     BreakCallBack(client->host, ExistingFid, 0);
@@ -4753,7 +4757,7 @@ SRXAFS_Link(struct rx_call * acall, struct AFSFid * DirFid, char *Name,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, LinkEvent, code, 
+    osi_auditU(acall, LinkEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name,
               AUD_FID, ExistingFid, AUD_END);
@@ -4826,7 +4830,7 @@ SAFSS_MakeDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
      * requires w access for the user to create a directory. this
      * closes a loophole in the current security arrangement, since a
      * user with i access only can create a directory and get the
-     * implcit a access that goes with dir ownership, and proceed to 
+     * implcit a access that goes with dir ownership, and proceed to
      * subvert quota in the volume.
      */
     if ((errorCode = CheckWriteMode(parentptr, rights, PRSFS_INSERT))
@@ -4953,7 +4957,7 @@ SRXAFS_MakeDir(struct rx_call * acall, struct AFSFid * DirFid, char *Name,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, MakeDirEvent, code, 
+    osi_auditU(acall, MakeDirEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name,
               AUD_FID, OutFid, AUD_END);
@@ -4979,7 +4983,6 @@ SAFSS_RemoveDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Volume *volptr = 0;                /* pointer to the volume header */
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
-    Vnode debugvnode1, debugvnode2;
     struct client *t_client;   /* tmp ptr to client data */
     struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
@@ -5006,7 +5009,6 @@ SAFSS_RemoveDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
                          &rights, &anyrights))) {
        goto Bad_RemoveDir;
     }
-    debugvnode1 = *parentptr;
 
     /* set volume synchronization information */
     SetVolumeSync(Sync, volptr);
@@ -5016,7 +5018,6 @@ SAFSS_RemoveDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
        goto Bad_RemoveDir;
     }
 
-    debugvnode2 = *parentptr;
     /* Do the actual delete of the desired (empty) directory, Name */
     if ((errorCode =
         DeleteTarget(parentptr, volptr, &targetptr, &dir, &fileFid, Name,
@@ -5115,7 +5116,7 @@ SRXAFS_RemoveDir(struct rx_call * acall, struct AFSFid * DirFid, char *Name,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, RemoveDirEvent, code, 
+    osi_auditU(acall, RemoveDirEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, DirFid, AUD_STR, Name, AUD_END);
     return code;
@@ -5247,8 +5248,8 @@ SRXAFS_SetLock(struct rx_call * acall, struct AFSFid * Fid, ViceLockType type,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, SetLockEvent, code, 
-               AUD_ID, t_client ? t_client->ViceId : 0, 
+    osi_auditU(acall, SetLockEvent, code,
+               AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_LONG, type, AUD_END);
     return code;
 }                              /*SRXAFS_SetLock */
@@ -5373,7 +5374,7 @@ SRXAFS_ExtendLock(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, ExtendLockEvent, code, 
+    osi_auditU(acall, ExtendLockEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return code;
@@ -5509,8 +5510,8 @@ SRXAFS_ReleaseLock(struct rx_call * acall, struct AFSFid * Fid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, ReleaseLockEvent, code, 
-               AUD_ID, t_client ? t_client->ViceId : 0, 
+    osi_auditU(acall, ReleaseLockEvent, code,
+               AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_FID, Fid, AUD_END);
     return code;
 
@@ -5651,7 +5652,7 @@ SRXAFS_GetStatistics(struct rx_call *acall, struct ViceStatistics *Statistics)
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, GetStatisticsEvent, code, 
+    osi_auditU(acall, GetStatisticsEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0, AUD_END);
     return code;
 }                              /*SRXAFS_GetStatistics */
@@ -5687,7 +5688,7 @@ SRXAFS_GetStatistics64(struct rx_call *acall, afs_int32 statsVersion, ViceStatis
        goto Bad_GetStatistics64;
 
     ViceLog(1, ("SAFS_GetStatistics64 Received\n"));
-    Statistics->ViceStatistics64_val = 
+    Statistics->ViceStatistics64_val =
        malloc(statsVersion*sizeof(afs_int64));
     Statistics->ViceStatistics64_len = statsVersion;
     FS_LOCK;
@@ -5695,43 +5696,43 @@ SRXAFS_GetStatistics64(struct rx_call *acall, afs_int32 statsVersion, ViceStatis
     Statistics->ViceStatistics64_val[STATS64_STARTTIME] = StartTime;
     Statistics->ViceStatistics64_val[STATS64_CURRENTCONNECTIONS] =
        CurrentConnections;
-    Statistics->ViceStatistics64_val[STATS64_TOTALVICECALLS] = 
+    Statistics->ViceStatistics64_val[STATS64_TOTALVICECALLS] =
        AFSCallStats.TotalCalls;
     Statistics->ViceStatistics64_val[STATS64_TOTALFETCHES] =
        AFSCallStats.FetchData + AFSCallStats.FetchACL +
        AFSCallStats.FetchStatus;
-    Statistics->ViceStatistics64_val[STATS64_FETCHDATAS] = 
+    Statistics->ViceStatistics64_val[STATS64_FETCHDATAS] =
        AFSCallStats.FetchData;
-    Statistics->ViceStatistics64_val[STATS64_FETCHEDBYTES] = 
+    Statistics->ViceStatistics64_val[STATS64_FETCHEDBYTES] =
        AFSCallStats.TotalFetchedBytes;
     seconds = AFSCallStats.AccumFetchTime / 1000;
     if (seconds <= 0)
         seconds = 1;
-    Statistics->ViceStatistics64_val[STATS64_FETCHDATARATE] = 
+    Statistics->ViceStatistics64_val[STATS64_FETCHDATARATE] =
        AFSCallStats.TotalFetchedBytes / seconds;
     Statistics->ViceStatistics64_val[STATS64_TOTALSTORES] =
         AFSCallStats.StoreData + AFSCallStats.StoreACL +
         AFSCallStats.StoreStatus;
-    Statistics->ViceStatistics64_val[STATS64_STOREDATAS] = 
+    Statistics->ViceStatistics64_val[STATS64_STOREDATAS] =
        AFSCallStats.StoreData;
-    Statistics->ViceStatistics64_val[STATS64_STOREDBYTES] = 
+    Statistics->ViceStatistics64_val[STATS64_STOREDBYTES] =
        AFSCallStats.TotalStoredBytes;
     seconds = AFSCallStats.AccumStoreTime / 1000;
     if (seconds <= 0)
         seconds = 1;
-    Statistics->ViceStatistics64_val[STATS64_STOREDATARATE] = 
+    Statistics->ViceStatistics64_val[STATS64_STOREDATARATE] =
        AFSCallStats.TotalStoredBytes / seconds;
 #ifdef AFS_NT40_ENV
     Statistics->ViceStatistics64_val[STATS64_PROCESSSIZE] = -1;
 #else
-    Statistics->ViceStatistics64_val[STATS64_PROCESSSIZE] = 
+    Statistics->ViceStatistics64_val[STATS64_PROCESSSIZE] =
        (afs_int32) ((long)sbrk(0) >> 10);
 #endif
     FS_UNLOCK;
-    h_GetWorkStats((int *)&(Statistics->ViceStatistics64_val[STATS64_WORKSTATIONS]),
-                   (int *)&(Statistics->ViceStatistics64_val[STATS64_ACTIVEWORKSTATIONS]), 
-                  (int *)0,
-                   (afs_int32) (FT_ApproxTime()) - (15 * 60));
+    h_GetWorkStats64(&(Statistics->ViceStatistics64_val[STATS64_WORKSTATIONS]),
+                     &(Statistics->ViceStatistics64_val[STATS64_ACTIVEWORKSTATIONS]),
+                    0,
+                     (afs_int32) (FT_ApproxTime()) - (15 * 60));
 
 
 
@@ -5762,7 +5763,7 @@ SRXAFS_GetStatistics64(struct rx_call *acall, afs_int32 statsVersion, ViceStatis
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, GetStatisticsEvent, code, 
+    osi_auditU(acall, GetStatisticsEvent, code,
                AUD_ID, t_client ? t_client->ViceId : 0, AUD_END);
     return code;
 }                              /*SRXAFS_GetStatistics */
@@ -5830,7 +5831,7 @@ SRXAFS_XStatsVersion(struct rx_call * a_call, afs_int32 * a_versionP)
     FS_UNLOCK;
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(a_call, XStatsVersionEvent, 0, 
+    osi_auditU(a_call, XStatsVersionEvent, 0,
                AUD_ID, t_client ? t_client->ViceId : 0, AUD_END);
     return (0);
 }                              /*SRXAFS_XStatsVersion */
@@ -5863,6 +5864,7 @@ FillPerfValues(struct afs_PerfStats *a_perfP)
     int dir_Buffers;           /*# buffers in use by dir package */
     int dir_Calls;             /*# read calls in dir package */
     int dir_IOs;               /*# I/O ops in dir package */
+    struct rx_statistics *stats;
 
     /*
      * Vnode cache section.
@@ -5894,58 +5896,60 @@ FillPerfValues(struct afs_PerfStats *a_perfP)
     /*
      * Rx section.
      */
-    a_perfP->rx_packetRequests = (afs_int32) rx_stats.packetRequests;
+    stats = rx_GetStatistics();
+
+    a_perfP->rx_packetRequests = (afs_int32) stats->packetRequests;
     a_perfP->rx_noPackets_RcvClass =
-       (afs_int32) rx_stats.receivePktAllocFailures;
+       (afs_int32) stats->receivePktAllocFailures;
     a_perfP->rx_noPackets_SendClass =
-       (afs_int32) rx_stats.sendPktAllocFailures;
+       (afs_int32) stats->sendPktAllocFailures;
     a_perfP->rx_noPackets_SpecialClass =
-       (afs_int32) rx_stats.specialPktAllocFailures;
-    a_perfP->rx_socketGreedy = (afs_int32) rx_stats.socketGreedy;
-    a_perfP->rx_bogusPacketOnRead = (afs_int32) rx_stats.bogusPacketOnRead;
-    a_perfP->rx_bogusHost = (afs_int32) rx_stats.bogusHost;
-    a_perfP->rx_noPacketOnRead = (afs_int32) rx_stats.noPacketOnRead;
+       (afs_int32) stats->specialPktAllocFailures;
+    a_perfP->rx_socketGreedy = (afs_int32) stats->socketGreedy;
+    a_perfP->rx_bogusPacketOnRead = (afs_int32) stats->bogusPacketOnRead;
+    a_perfP->rx_bogusHost = (afs_int32) stats->bogusHost;
+    a_perfP->rx_noPacketOnRead = (afs_int32) stats->noPacketOnRead;
     a_perfP->rx_noPacketBuffersOnRead =
-       (afs_int32) rx_stats.noPacketBuffersOnRead;
-    a_perfP->rx_selects = (afs_int32) rx_stats.selects;
-    a_perfP->rx_sendSelects = (afs_int32) rx_stats.sendSelects;
+       (afs_int32) stats->noPacketBuffersOnRead;
+    a_perfP->rx_selects = (afs_int32) stats->selects;
+    a_perfP->rx_sendSelects = (afs_int32) stats->sendSelects;
     a_perfP->rx_packetsRead_RcvClass =
-       (afs_int32) rx_stats.packetsRead[RX_PACKET_CLASS_RECEIVE];
+       (afs_int32) stats->packetsRead[RX_PACKET_CLASS_RECEIVE];
     a_perfP->rx_packetsRead_SendClass =
-       (afs_int32) rx_stats.packetsRead[RX_PACKET_CLASS_SEND];
+       (afs_int32) stats->packetsRead[RX_PACKET_CLASS_SEND];
     a_perfP->rx_packetsRead_SpecialClass =
-       (afs_int32) rx_stats.packetsRead[RX_PACKET_CLASS_SPECIAL];
-    a_perfP->rx_dataPacketsRead = (afs_int32) rx_stats.dataPacketsRead;
-    a_perfP->rx_ackPacketsRead = (afs_int32) rx_stats.ackPacketsRead;
-    a_perfP->rx_dupPacketsRead = (afs_int32) rx_stats.dupPacketsRead;
+       (afs_int32) stats->packetsRead[RX_PACKET_CLASS_SPECIAL];
+    a_perfP->rx_dataPacketsRead = (afs_int32) stats->dataPacketsRead;
+    a_perfP->rx_ackPacketsRead = (afs_int32) stats->ackPacketsRead;
+    a_perfP->rx_dupPacketsRead = (afs_int32) stats->dupPacketsRead;
     a_perfP->rx_spuriousPacketsRead =
-       (afs_int32) rx_stats.spuriousPacketsRead;
+       (afs_int32) stats->spuriousPacketsRead;
     a_perfP->rx_packetsSent_RcvClass =
-       (afs_int32) rx_stats.packetsSent[RX_PACKET_CLASS_RECEIVE];
+       (afs_int32) stats->packetsSent[RX_PACKET_CLASS_RECEIVE];
     a_perfP->rx_packetsSent_SendClass =
-       (afs_int32) rx_stats.packetsSent[RX_PACKET_CLASS_SEND];
+       (afs_int32) stats->packetsSent[RX_PACKET_CLASS_SEND];
     a_perfP->rx_packetsSent_SpecialClass =
-       (afs_int32) rx_stats.packetsSent[RX_PACKET_CLASS_SPECIAL];
-    a_perfP->rx_ackPacketsSent = (afs_int32) rx_stats.ackPacketsSent;
-    a_perfP->rx_pingPacketsSent = (afs_int32) rx_stats.pingPacketsSent;
-    a_perfP->rx_abortPacketsSent = (afs_int32) rx_stats.abortPacketsSent;
-    a_perfP->rx_busyPacketsSent = (afs_int32) rx_stats.busyPacketsSent;
-    a_perfP->rx_dataPacketsSent = (afs_int32) rx_stats.dataPacketsSent;
-    a_perfP->rx_dataPacketsReSent = (afs_int32) rx_stats.dataPacketsReSent;
-    a_perfP->rx_dataPacketsPushed = (afs_int32) rx_stats.dataPacketsPushed;
-    a_perfP->rx_ignoreAckedPacket = (afs_int32) rx_stats.ignoreAckedPacket;
-    a_perfP->rx_totalRtt_Sec = (afs_int32) rx_stats.totalRtt.sec;
-    a_perfP->rx_totalRtt_Usec = (afs_int32) rx_stats.totalRtt.usec;
-    a_perfP->rx_minRtt_Sec = (afs_int32) rx_stats.minRtt.sec;
-    a_perfP->rx_minRtt_Usec = (afs_int32) rx_stats.minRtt.usec;
-    a_perfP->rx_maxRtt_Sec = (afs_int32) rx_stats.maxRtt.sec;
-    a_perfP->rx_maxRtt_Usec = (afs_int32) rx_stats.maxRtt.usec;
-    a_perfP->rx_nRttSamples = (afs_int32) rx_stats.nRttSamples;
-    a_perfP->rx_nServerConns = (afs_int32) rx_stats.nServerConns;
-    a_perfP->rx_nClientConns = (afs_int32) rx_stats.nClientConns;
-    a_perfP->rx_nPeerStructs = (afs_int32) rx_stats.nPeerStructs;
-    a_perfP->rx_nCallStructs = (afs_int32) rx_stats.nCallStructs;
-    a_perfP->rx_nFreeCallStructs = (afs_int32) rx_stats.nFreeCallStructs;
+       (afs_int32) stats->packetsSent[RX_PACKET_CLASS_SPECIAL];
+    a_perfP->rx_ackPacketsSent = (afs_int32) stats->ackPacketsSent;
+    a_perfP->rx_pingPacketsSent = (afs_int32) stats->pingPacketsSent;
+    a_perfP->rx_abortPacketsSent = (afs_int32) stats->abortPacketsSent;
+    a_perfP->rx_busyPacketsSent = (afs_int32) stats->busyPacketsSent;
+    a_perfP->rx_dataPacketsSent = (afs_int32) stats->dataPacketsSent;
+    a_perfP->rx_dataPacketsReSent = (afs_int32) stats->dataPacketsReSent;
+    a_perfP->rx_dataPacketsPushed = (afs_int32) stats->dataPacketsPushed;
+    a_perfP->rx_ignoreAckedPacket = (afs_int32) stats->ignoreAckedPacket;
+    a_perfP->rx_totalRtt_Sec = (afs_int32) stats->totalRtt.sec;
+    a_perfP->rx_totalRtt_Usec = (afs_int32) stats->totalRtt.usec;
+    a_perfP->rx_minRtt_Sec = (afs_int32) stats->minRtt.sec;
+    a_perfP->rx_minRtt_Usec = (afs_int32) stats->minRtt.usec;
+    a_perfP->rx_maxRtt_Sec = (afs_int32) stats->maxRtt.sec;
+    a_perfP->rx_maxRtt_Usec = (afs_int32) stats->maxRtt.usec;
+    a_perfP->rx_nRttSamples = (afs_int32) stats->nRttSamples;
+    a_perfP->rx_nServerConns = (afs_int32) stats->nServerConns;
+    a_perfP->rx_nClientConns = (afs_int32) stats->nClientConns;
+    a_perfP->rx_nPeerStructs = (afs_int32) stats->nPeerStructs;
+    a_perfP->rx_nCallStructs = (afs_int32) stats->nCallStructs;
+    a_perfP->rx_nFreeCallStructs = (afs_int32) stats->nFreeCallStructs;
 
     a_perfP->host_NumHostEntries = HTs;
     a_perfP->host_HostBlocks = HTBlocks;
@@ -5957,8 +5961,9 @@ FillPerfValues(struct afs_PerfStats *a_perfP)
     a_perfP->host_ClientBlocks = CEBlocks;
 
     a_perfP->sysname_ID = afs_perfstats.sysname_ID;
-    a_perfP->rx_nBusies = (afs_int32) rx_stats.nBusies;
+    a_perfP->rx_nBusies = (afs_int32) stats->nBusies;
     a_perfP->fs_nBusies = afs_perfstats.fs_nBusies;
+    rx_FreeStatistics(&stats);
 }                              /*FillPerfValues */
 
 
@@ -5995,7 +6000,7 @@ SRXAFS_GetXStats(struct rx_call *a_call, afs_int32 a_clientVersionNum,
                 afs_int32 * a_timeP, AFS_CollData * a_dataP)
 {                              /*SRXAFS_GetXStats */
 
-    register int code;         /*Return value */
+    int code;          /*Return value */
     afs_int32 *dataBuffP;      /*Ptr to data to be returned */
     afs_int32 dataBytes;       /*Bytes in data buffer */
 #if FS_STATS_DETAILED
@@ -6181,7 +6186,7 @@ common_GiveUpCallBacks(struct rx_call *acall, struct AFSCBFids *FidArray,
                       struct AFSCBs *CallBackArray)
 {
     afs_int32 errorCode = 0;
-    register int i;
+    int i;
     struct client *client = 0;
     struct rx_connection *tcon;
     struct host *thost;
@@ -6237,7 +6242,7 @@ common_GiveUpCallBacks(struct rx_call *acall, struct AFSCBFids *FidArray,
        errorCode = GetClient(tcon, &client);
        if (!errorCode) {
            for (i = 0; i < FidArray->AFSCBFids_len; i++) {
-               register struct AFSFid *fid = &(FidArray->AFSCBFids_val[i]);
+               struct AFSFid *fid = &(FidArray->AFSCBFids_val[i]);
                DeleteCallBack(client->host, fid);
            }
            PutClient(&client);
@@ -6293,7 +6298,7 @@ SRXAFS_NGetVolumeInfo(struct rx_call * acall, char *avolid,
 
 
 /*
- * Dummy routine. Should never be called (the cache manager should only 
+ * Dummy routine. Should never be called (the cache manager should only
  * invoke this interface when communicating with a AFS/DFS Protocol
  * Translator).
  */
@@ -6404,10 +6409,10 @@ SRXAFS_FlushCPS(struct rx_call * acall, struct ViceIds * vids,
 
 /* worthless hack to let CS keep running ancient software */
 static int
-afs_vtoi(register char *aname)
+afs_vtoi(char *aname)
 {
-    register afs_int32 temp;
-    register int tc;
+    afs_int32 temp;
+    int tc;
 
     temp = 0;
     while ((tc = *aname++)) {
@@ -6424,10 +6429,10 @@ afs_vtoi(register char *aname)
  * or backup volumes by name or #
  */
 static afs_int32
-CopyVolumeEntry(char *aname, register struct vldbentry *ave,
-               register struct VolumeInfo *av)
+CopyVolumeEntry(char *aname, struct vldbentry *ave,
+               struct VolumeInfo *av)
 {
-    register int i, j, vol;
+    int i, j, vol;
     afs_int32 mask, whichType;
     afs_uint32 *serverHost, *typePtr;
 
@@ -6492,7 +6497,7 @@ TryLocalVLServer(char *avolid, struct VolumeInfo *avolinfo)
     static afs_int32 lastDownTime = 0;
     struct vldbentry tve;
     struct rx_securityClass *vlSec;
-    register afs_int32 code;
+    afs_int32 code;
 
     if (!vlConn) {
        vlSec = rxnull_NewClientSecurityObject();
@@ -6683,7 +6688,7 @@ SRXAFS_GetVolumeStatus(struct rx_call * acall, afs_int32 avolid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, GetVolumeStatusEvent, errorCode, 
+    osi_auditU(acall, GetVolumeStatusEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_LONG, avolid, AUD_STR, *Name, AUD_END);
     return (errorCode);
@@ -6756,7 +6761,7 @@ SRXAFS_SetVolumeStatus(struct rx_call * acall, afs_int32 avolid,
        RXUpdate_VolumeStatus(volptr, StoreVolStatus, Name, OfflineMsg, Motd);
 
   Bad_SetVolumeStatus:
-    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0, 
+    PutVolumePackage(parentwhentargetnotdir, targetptr, (Vnode *) 0,
                     volptr, &client);
     ViceLog(2, ("SAFS_SetVolumeStatus returns %d\n", errorCode));
     errorCode = CallPostamble(tcon, errorCode, thost);
@@ -6781,7 +6786,7 @@ SRXAFS_SetVolumeStatus(struct rx_call * acall, afs_int32 avolid,
     }
 #endif /* FS_STATS_DETAILED */
 
-    osi_auditU(acall, SetVolumeStatusEvent, errorCode, 
+    osi_auditU(acall, SetVolumeStatusEvent, errorCode,
                AUD_ID, t_client ? t_client->ViceId : 0,
                AUD_LONG, avolid, AUD_STR, Name, AUD_END);
     return (errorCode);
@@ -7015,7 +7020,7 @@ SRXAFS_GetTime(struct rx_call * acall, afs_uint32 * Seconds,
 
 afs_int32
 FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
-                 register struct rx_call * Call, afs_sfsize_t Pos,
+                 struct rx_call * Call, afs_sfsize_t Pos,
                  afs_sfsize_t Len, afs_int32 Int64Mode,
 #if FS_STATS_DETAILED
                  afs_sfsize_t * a_bytesToFetchP,
@@ -7026,12 +7031,12 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
     struct timeval StartTime, StopTime;        /* used to calculate file  transfer rates */
     IHandle_t *ihP;
     FdHandle_t *fdP;
-#ifdef AFS_NT40_ENV
-    register char *tbuffer;
-#else /* AFS_NT40_ENV */
+#ifndef HAVE_PIOV
+    char *tbuffer;
+#else /* HAVE_PIOV */
     struct iovec tiov[RX_MAXIOVECS];
     int tnio;
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     afs_sfsize_t tlen;
     afs_int32 optSize;
 
@@ -7086,7 +7091,6 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
     if (Pos + Len > tlen) /* get length we should send */
        Len = ((tlen - Pos) < 0) ? 0 : tlen - Pos;
 
-    (void)FDH_SEEK(fdP, Pos, 0);
     {
        afs_int32 high, low;
        SplitOffsetOrSize(Len, high, low);
@@ -7101,9 +7105,9 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
 #if FS_STATS_DETAILED
     (*a_bytesToFetchP) = Len;
 #endif /* FS_STATS_DETAILED */
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
     tbuffer = AllocSendBuffer();
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     while (Len > 0) {
        size_t wlen;
        ssize_t nBytes;
@@ -7111,8 +7115,8 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
            wlen = optSize;
        else
            wlen = Len;
-#ifdef AFS_NT40_ENV
-       nBytes = FDH_READ(fdP, tbuffer, wlen);
+#ifndef HAVE_PIOV
+       nBytes = FDH_PREAD(fdP, tbuffer, wlen, Pos);
        if (nBytes != wlen) {
            FDH_CLOSE(fdP);
            FreeSendBuffer((struct afs_buffer *)tbuffer);
@@ -7122,14 +7126,14 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
            return EIO;
        }
        nBytes = rx_Write(Call, tbuffer, wlen);
-#else /* AFS_NT40_ENV */
+#else /* HAVE_PIOV */
        nBytes = rx_WritevAlloc(Call, tiov, &tnio, RX_MAXIOVECS, wlen);
        if (nBytes <= 0) {
            FDH_CLOSE(fdP);
            return EIO;
        }
        wlen = nBytes;
-       nBytes = FDH_READV(fdP, tiov, tnio);
+       nBytes = FDH_PREADV(fdP, tiov, tnio, Pos);
        if (nBytes != wlen) {
            FDH_CLOSE(fdP);
            VTakeOffline(volptr);
@@ -7138,7 +7142,8 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
            return EIO;
        }
        nBytes = rx_Writev(Call, tiov, tnio, wlen);
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
+       Pos += wlen;
 #if FS_STATS_DETAILED
        /*
         * Bump the number of bytes actually sent by the number from this
@@ -7148,16 +7153,16 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
 #endif /* FS_STATS_DETAILED */
        if (nBytes != wlen) {
            FDH_CLOSE(fdP);
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
            FreeSendBuffer((struct afs_buffer *)tbuffer);
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
            return -31;
        }
        Len -= wlen;
     }
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
     FreeSendBuffer((struct afs_buffer *)tbuffer);
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     FDH_CLOSE(fdP);
     FT_GetTimeOfDay(&StopTime, 0);
 
@@ -7240,7 +7245,7 @@ GetLinkCountAndSize(Volume * vp, FdHandle_t * fdP, int *lc,
  */
 afs_int32
 StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
-                 struct client * client, register struct rx_call * Call,
+                 struct client * client, struct rx_call * Call,
                  afs_fsize_t Pos, afs_fsize_t Length, afs_fsize_t FileLength,
                  int sync,
 #if FS_STATS_DETAILED
@@ -7252,12 +7257,12 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
     afs_sfsize_t bytesTransfered;      /* number of bytes actually transfered */
     struct timeval StartTime, StopTime;        /* Used to measure how long the store takes */
     Error errorCode = 0;               /* Returned error code to caller */
-#ifdef AFS_NT40_ENV
-    register char *tbuffer;    /* data copying buffer */
-#else /* AFS_NT40_ENV */
+#ifndef HAVE_PIOV
+    char *tbuffer;     /* data copying buffer */
+#else /* HAVE_PIOV */
     struct iovec tiov[RX_MAXIOVECS];   /* no data copying with iovec */
     int tnio;                  /* temp for iovec size */
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     afs_sfsize_t tlen;         /* temp for xfr length */
     Inode tinode;              /* inode for I/O */
     afs_int32 optSize;         /* optimal transfer size */
@@ -7270,6 +7275,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
     ssize_t nBytes;
     FdHandle_t *fdP, *origfdP = NULL;
     struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
+    afs_ino_str_t stmp;
 
 #if FS_STATS_DETAILED
     /*
@@ -7302,7 +7308,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
         */
        ViceLog(25,
                ("StoreData_RXStyle : Opening inode %s\n",
-                PrintInode(NULL, VN_GET_INO(targetptr))));
+                PrintInode(stmp, VN_GET_INO(targetptr))));
        fdP = IH_OPEN(targetptr->handle);
        if (fdP == NULL)
            return ENOENT;
@@ -7318,7 +7324,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
            afs_fsize_t size;
            ViceLog(25,
                    ("StoreData_RXStyle : inode %s has more than onelink\n",
-                    PrintInode(NULL, VN_GET_INO(targetptr))));
+                    PrintInode(stmp, VN_GET_INO(targetptr))));
            /* other volumes share this data, better copy it first */
 
            /* Adjust the disk block count by the creation of the new inode.
@@ -7412,12 +7418,10 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
     /* truncate the file iff it needs it (ftruncate is slow even when its a noop) */
     if (FileLength < DataLength)
        FDH_TRUNC(fdP, FileLength);
-    if (Pos > 0)
-       FDH_SEEK(fdP, Pos, 0);
     bytesTransfered = 0;
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
     tbuffer = AllocSendBuffer();
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     /* if length == 0, the loop below isn't going to do anything, including
      * extend the length of the inode, which it must do, since the file system
      * assumes that the inode length == vnode's file length.  So, we extend
@@ -7429,7 +7433,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
        /* Set the file's length; we've already done an lseek to the right
         * spot above.
         */
-       nBytes = FDH_WRITE(fdP, &tlen, 1);
+       nBytes = FDH_PWRITE(fdP, &tlen, 1, Pos);
        if (nBytes != 1) {
            errorCode = -1;
            goto done;
@@ -7451,11 +7455,11 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
                rlen = optSize; /* bound by buffer size */
            else
                rlen = (int)tlen;
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
            errorCode = rx_Read(Call, tbuffer, rlen);
-#else /* AFS_NT40_ENV */
+#else /* HAVE_PIOV */
            errorCode = rx_Readv(Call, tiov, &tnio, RX_MAXIOVECS, rlen);
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
            if (errorCode <= 0) {
                errorCode = -32;
                break;
@@ -7464,27 +7468,29 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
            (*a_bytesStoredP) += errorCode;
 #endif /* FS_STATS_DETAILED */
            rlen = errorCode;
-#ifdef AFS_NT40_ENV
-           nBytes = FDH_WRITE(fdP, tbuffer, rlen);
-#else /* AFS_NT40_ENV */
-           nBytes = FDH_WRITEV(fdP, tiov, tnio);
-#endif /* AFS_NT40_ENV */
+#ifndef HAVE_PIOV
+           nBytes = FDH_PWRITE(fdP, tbuffer, rlen, Pos);
+#else /* HAVE_PIOV */
+           nBytes = FDH_PWRITEV(fdP, tiov, tnio, Pos);
+#endif /* HAVE_PIOV */
            if (nBytes != rlen) {
                errorCode = VDISKFULL;
                break;
            }
            bytesTransfered += rlen;
+           Pos += rlen;
        }
     }
   done:
-#ifdef AFS_NT40_ENV
+#ifndef HAVE_PIOV
     FreeSendBuffer((struct afs_buffer *)tbuffer);
-#endif /* AFS_NT40_ENV */
+#endif /* HAVE_PIOV */
     if (sync) {
        FDH_SYNC(fdP);
     }
     if (errorCode) {
-       afs_fsize_t nfSize = (afs_fsize_t) FDH_SIZE(fdP);
+       afs_sfsize_t nfSize = FDH_SIZE(fdP);
+       assert(nfSize >= 0);
        /* something went wrong: adjust size and return */
        VN_SET_LEN(targetptr, nfSize);  /* set new file size. */
        /* changed_newTime is tested in StoreData to detemine if we
@@ -7678,18 +7684,18 @@ init_sys_error_to_et(void)
     sys2et[EIO] = UAEIO;
 }
 
-/* NOTE:  2006-03-01                                                     
- *  SRXAFS_CallBackRxConnAddr should be re-written as follows:           
- *  - pass back the connection, client, and host from CallPreamble       
- *  - keep a ref on the client, which we don't now                       
- *  - keep a hold on the host, which we already do                       
- *  - pass the connection, client, and host down into SAFSS_*, and use   
- *    them instead of independently discovering them via rx_ConnectionOf 
- *    (safe) and rx_GetSpecific (not so safe)                            
+/* NOTE:  2006-03-01
+ *  SRXAFS_CallBackRxConnAddr should be re-written as follows:
+ *  - pass back the connection, client, and host from CallPreamble
+ *  - keep a ref on the client, which we don't now
+ *  - keep a hold on the host, which we already do
+ *  - pass the connection, client, and host down into SAFSS_*, and use
+ *    them instead of independently discovering them via rx_ConnectionOf
+ *    (safe) and rx_GetSpecific (not so safe)
  *  The idea being that we decide what client and host we're going to use
  *  when CallPreamble is called, and stay consistent throughout the call.
- *  This change is too invasive for 1.4.1 but should be made in 1.5.x.   
- */                                                                      
+ *  This change is too invasive for 1.4.1 but should be made in 1.5.x.
+ */
 
 afs_int32
 SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
@@ -7704,10 +7710,10 @@ SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
     int i,j;
     struct rx_connection *conn;
 #endif
-    
+
     if ((errorCode = CallPreamble(acall, ACTIVECALL, &tcon, &tcallhost)))
            goto Bad_CallBackRxConnAddr1;
-    
+
 #ifndef __EXPERIMENTAL_CALLBACK_CONN_MOVING
     errorCode = 1;
 #else
@@ -7718,34 +7724,34 @@ SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
        goto Bad_CallBackRxConnAddr;
     }
     thost = tclient->host;
-    
+
     /* nothing more can be done */
-    if ( !thost->interface ) 
+    if ( !thost->interface )
        goto Bad_CallBackRxConnAddr;
-    
+
     /* the only address is the primary interface */
     /* can't change when there's only 1 address, anyway */
-    if ( thost->interface->numberOfInterfaces <= 1 ) 
+    if ( thost->interface->numberOfInterfaces <= 1 )
        goto Bad_CallBackRxConnAddr;
-    
+
     /* initialise a security object only once */
     if ( !sc )
        sc = (struct rx_securityClass *) rxnull_NewClientSecurityObject();
-    
+
     for ( i=0; i < thost->interface->numberOfInterfaces; i++)
     {
            if ( *addr == thost->interface->addr[i] ) {
                    break;
            }
     }
-    
-    if ( *addr != thost->interface->addr[i] ) 
+
+    if ( *addr != thost->interface->addr[i] )
        goto Bad_CallBackRxConnAddr;
 
     conn = rx_NewConnection (thost->interface->addr[i],
                             thost->port, 1, sc, 0);
-    rx_SetConnDeadTime(conn, 2); 
-    rx_SetConnHardDeadTime(conn, AFS_HARDDEADTIME); 
+    rx_SetConnDeadTime(conn, 2);
+    rx_SetConnHardDeadTime(conn, AFS_HARDDEADTIME);
     H_UNLOCK;
     errorCode = RXAFSCB_Probe(conn);
     H_LOCK;
@@ -7763,7 +7769,7 @@ SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
        return errorCode;
     } else {
        rx_DestroyConnection(conn);
-    }      
+    }
   Bad_CallBackRxConnAddr:
     h_ReleaseClient_r(tclient);
     /* The hold on thost will be released by CallPostamble */