viced: set volume sync data in bulk status rpcs
[openafs.git] / src / viced / afsfileprocs.c
index db37522..fb581a5 100644 (file)
@@ -28,8 +28,6 @@
 #include <afsconfig.h>
 #include <afs/param.h>
 
-RCSID
-    ("$Header$");
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -189,8 +187,6 @@ struct afs_FSStats {
 
 struct afs_FSStats afs_fsstats;
 
-void ResetDebug(), SetDebug(), Terminate();
-
 int LogLevel = 0;
 int supported = 1;
 int Console = 0;
@@ -303,8 +299,9 @@ CallPreamble(register struct rx_call *acall, int activecall,
     int retry_flag = 1;
     int code = 0;
     char hoststr[16], hoststr2[16];
+#ifdef AFS_PTHREAD_ENV
     struct ubik_client *uclient;
-
+#endif
     *ahostp = NULL;
 
     if (!tconn) {
@@ -423,7 +420,6 @@ CallPostamble(register struct rx_connection *aconn, afs_int32 ret,
     struct host *thost;
     struct client *tclient;
     int translate = 0;
-    int held;
 
     H_LOCK;
     tclient = h_FindClient_r(aconn);
@@ -433,23 +429,34 @@ CallPostamble(register struct rx_connection *aconn, afs_int32 ret,
     if (thost->hostFlags & HERRORTRANS)
        translate = 1;
     h_ReleaseClient_r(tclient);
-    held = h_Held_r(thost);
-    if (held)
-       h_Release_r(thost);
-    if (ahost && ahost != thost) {
-       char hoststr[16], hoststr2[16]; 
-       ViceLog(0, ("CallPostamble: ahost %s:%d (%x) != thost %s:%d (%x)\n",
-               afs_inet_ntoa_r(ahost->host, hoststr), ntohs(ahost->port),
-               ahost, 
-               afs_inet_ntoa_r(thost->host, hoststr2), ntohs(thost->port),
-               thost));
-       h_Release_r(ahost);
-    } else if (!ahost) {
-       char hoststr[16];       
-       ViceLog(0, ("CallPostamble: null ahost for thost %s:%d (%x)\n",
-               afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port),
-               thost));
+
+    if (ahost) {
+           if (ahost != thost) {
+                   /* host/client recycle */
+                   char hoststr[16], hoststr2[16];
+                   ViceLog(0, ("CallPostamble: ahost %s:%d (%x) != thost "
+                               "%s:%d (%x)\n",
+                               afs_inet_ntoa_r(ahost->host, hoststr),
+                               ntohs(ahost->port),
+                               ahost,
+                               afs_inet_ntoa_r(thost->host, hoststr2),
+                               ntohs(thost->port),
+                               thost));
+           }
+           /* return the reference taken in CallPreamble */
+           h_Release_r(ahost);
+    } else {
+           char hoststr[16];
+           ViceLog(0, ("CallPostamble: null ahost for thost %s:%d (%x)\n",
+                       afs_inet_ntoa_r(thost->host, hoststr),
+                       ntohs(thost->port),
+                       thost));
     }
+
+    /* return the reference taken in local h_FindClient_r--h_ReleaseClient_r
+     * does not decrement refcount on client->host */
+    h_Release_r(thost);
+
  busyout:
     H_UNLOCK;
     return (translate ? sys_error_to_et(ret) : ret);
@@ -463,8 +470,8 @@ CallPostamble(register struct rx_connection *aconn, afs_int32 ret,
 static afs_int32
 CheckVnode(AFSFid * fid, Volume ** volptr, Vnode ** vptr, int lock)
 {
-    int fileCode = 0;
-    afs_int32 local_errorCode, errorCode = -1;
+    Error fileCode = 0;
+    Error local_errorCode, errorCode = -1;
     static struct timeval restartedat = { 0, 0 };
 
     if (fid->Volume == 0 || fid->Vnode == 0)   /* not: || fid->Unique == 0) */
@@ -612,7 +619,7 @@ SetAccessList(Vnode ** targetptr, Volume ** volume,
        assert(Fid != 0);
        while (1) {
            VnodeId parentvnode;
-           int errorCode = 0;
+           Error errorCode = 0;
 
            parentvnode = (*targetptr)->disk.parent;
            VPutVnode(&errorCode, *targetptr);
@@ -749,7 +756,7 @@ GetVolumePackage(struct rx_connection *tcon, AFSFid * Fid, Volume ** volptr,
 {
     struct acl_accessList *aCL;        /* Internal access List */
     int aCLSize;               /* size of the access list */
-    int errorCode = 0;         /* return code to caller */
+    Error errorCode = 0;               /* return code to caller */
 
     if ((errorCode = CheckVnode(Fid, volptr, targetptr, locktype)))
        return (errorCode);
@@ -801,7 +808,7 @@ static void
 PutVolumePackage(Vnode * parentwhentargetnotdir, Vnode * targetptr,
                 Vnode * parentptr, Volume * volptr, struct client **client)
 {
-    int fileCode = 0;          /* Error code returned by the volume package */
+    Error fileCode = 0;                /* Error code returned by the volume package */
 
     if (parentwhentargetnotdir) {
        VPutVnode(&fileCode, parentwhentargetnotdir);
@@ -863,7 +870,7 @@ Check_PermissionRights(Vnode * targetptr, struct client *client,
                       afs_int32 rights, int CallingRoutine,
                       AFSStoreStatus * InStatus)
 {
-    int errorCode = 0;
+    Error errorCode = 0;
 #define OWNSp(client, target) ((client)->ViceId == (target)->disk.owner)
 #define CHOWN(i,t) (((i)->Mask & AFS_SETOWNER) &&((i)->Owner != (t)->disk.owner))
 #define CHGRP(i,t) (((i)->Mask & AFS_SETGROUP) &&((i)->Group != (t)->disk.group))
@@ -1189,7 +1196,7 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_fsize_t off, afs_fsize_t len
         *  error code indicates that the disk is full, we roll-back to
         *  the initial state.
         */
-       if ((rdlen != length) || (wrlen != length))
+       if ((rdlen != length) || (wrlen != length)) {
            if ((wrlen < 0) && (errno == ENOSPC)) {     /* disk full */
                ViceLog(0,
                        ("CopyOnWrite failed: Partition %s containing volume %u is full\n",
@@ -1226,6 +1233,7 @@ CopyOnWrite(Vnode * targetptr, Volume * volptr, afs_fsize_t off, afs_fsize_t len
                VTakeOffline(volptr);
                return EIO;
            }
+       }
 #ifndef AFS_PTHREAD_ENV
        IOMGR_Poll();
 #endif /* !AFS_PTHREAD_ENV */
@@ -1296,7 +1304,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr,
             DirHandle * dir, AFSFid * fileFid, char *Name, int ChkForDir)
 {
     DirHandle childdir;                /* Handle for dir package I/O */
-    int errorCode = 0;
+    Error errorCode = 0;
     int code;
 
     /* watch for invalid names */
@@ -1350,7 +1358,7 @@ DeleteTarget(Vnode * parentptr, Volume * volptr, Vnode ** targetptr,
        SetDirHandle(&childdir, *targetptr);
        if (IsEmpty(&childdir) != 0)
            return (EEXIST);
-       DZap(&childdir);
+       DZap((afs_int32 *) &childdir);
        FidZap(&childdir);
        (*targetptr)->delete = 1;
     } else if ((--(*targetptr)->disk.linkCount) == 0)
@@ -1426,7 +1434,7 @@ Update_ParentVnodeStatus(Vnode * parentptr, Volume * volptr, DirHandle * dir,
 {
     afs_fsize_t newlength;     /* Holds new directory length */
     afs_fsize_t parentLength;
-    int errorCode;
+    Error errorCode;
 #if FS_STATS_DETAILED
     Date currDate;             /*Current date */
     int writeIdx;              /*Write index to bump */
@@ -1664,8 +1672,8 @@ static afs_int32
 AdjustDiskUsage(Volume * volptr, afs_sfsize_t length,
                afs_sfsize_t checkLength)
 {
-    int rc;
-    int nc;
+    Error rc;
+    Error nc;
 
     VAdjustDiskUsage(&rc, volptr, length, checkLength);
     if (rc) {
@@ -1698,8 +1706,8 @@ Alloc_NewVnode(Vnode * parentptr, DirHandle * dir, Volume * volptr,
               Vnode ** targetptr, char *Name, struct AFSFid *OutFid,
               int FileType, afs_sfsize_t BlocksPreallocatedForVnode)
 {
-    int errorCode = 0;         /* Error code returned back */
-    int temp;
+    Error errorCode = 0;               /* Error code returned back */
+    Error temp;
     Inode inode = 0;
     Inode nearInode;           /* hint for inode allocation in solaris */
 
@@ -1993,8 +2001,6 @@ SRXAFS_FsCmd(struct rx_call * acall, struct AFSFid * Fid,
                    struct FsCmdOutputs * Outputs)
 {
     afs_int32 code = 0;
-    struct AFSCallBack callback;
-    struct AFSVolSync sync;
 
     switch (Inputs->command) {
     default:
@@ -2109,8 +2115,8 @@ common_FetchData64(struct rx_call *acall, struct AFSFid *Fid,
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if vptr is a file */
     Vnode tparentwhentargetnotdir;     /* parent vnode for GetStatus */
-    int errorCode = 0;         /* return code to caller */
-    int fileCode = 0;          /* return code from vol package */
+    Error errorCode = 0;               /* return code to caller */
+    Error fileCode = 0;                /* return code from vol package */
     Volume *volptr = 0;                /* pointer to the volume */
     struct client *client = 0; /* pointer to the client data */
     struct rx_connection *tcon;        /* the connection we're part of */
@@ -2374,7 +2380,7 @@ SRXAFS_FetchACL(struct rx_call * acall, struct AFSFid * Fid,
 {
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
-    int errorCode = 0;         /* return error code to caller */
+    Error errorCode = 0;               /* return error code to caller */
     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 */
@@ -2495,7 +2501,7 @@ SAFSS_FetchStatus(struct rx_call *acall, struct AFSFid *Fid,
 {
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
-    int errorCode = 0;         /* return code to caller */
+    Error errorCode = 0;               /* return code to caller */
     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 */
@@ -2570,7 +2576,7 @@ SRXAFS_BulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     afs_int32 nfiles;
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
-    int errorCode = 0;         /* return code to caller */
+    Error errorCode = 0;               /* return code to caller */
     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 */
@@ -2635,7 +2641,7 @@ SRXAFS_BulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                              &rights, &anyrights)))
            goto Bad_BulkStatus;
        /* set volume synchronization information, but only once per call */
-       if (i == nfiles)
+       if (i == 0)
            SetVolumeSync(Sync, volptr);
 
        /* Are we allowed to fetch Fid's status? */
@@ -2719,7 +2725,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     afs_int32 nfiles;
     Vnode *targetptr = 0;      /* pointer to vnode to fetch */
     Vnode *parentwhentargetnotdir = 0; /* parent vnode if targetptr is a file */
-    int errorCode = 0;         /* return code to caller */
+    Error errorCode = 0;               /* return code to caller */
     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 */
@@ -2796,7 +2802,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
        }
 
        /* set volume synchronization information, but only once per call */
-       if (i == nfiles)
+       if (i == 0)
            SetVolumeSync(Sync, volptr);
 
        /* Are we allowed to fetch Fid's status? */
@@ -2948,8 +2954,8 @@ common_StoreData64(struct rx_call *acall, struct AFSFid *Fid,
     Vnode *targetptr = 0;      /* pointer to input fid */
     Vnode *parentwhentargetnotdir = 0; /* parent of Fid to get ACL */
     Vnode tparentwhentargetnotdir;     /* parent vnode for GetStatus */
-    int errorCode = 0;         /* return code for caller */
-    int fileCode = 0;          /* return code from vol package */
+    Error errorCode = 0;               /* return code for caller */
+    Error fileCode = 0;                /* return code from vol package */
     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 */
@@ -3214,7 +3220,7 @@ SRXAFS_StoreACL(struct rx_call * acall, struct AFSFid * Fid,
 {
     Vnode *targetptr = 0;      /* pointer to input fid */
     Vnode *parentwhentargetnotdir = 0; /* parent of Fid to get ACL */
-    int errorCode = 0;         /* return code for caller */
+    Error errorCode = 0;               /* return code for caller */
     struct AFSStoreStatus InStatus;    /* Input status for fid */
     Volume *volptr = 0;                /* pointer to the volume header */
     struct client *client = 0; /* pointer to client structure */
@@ -3335,7 +3341,7 @@ SAFSS_StoreStatus(struct rx_call *acall, struct AFSFid *Fid,
 {
     Vnode *targetptr = 0;      /* pointer to input fid */
     Vnode *parentwhentargetnotdir = 0; /* parent of Fid to get ACL */
-    int errorCode = 0;         /* return code for caller */
+    Error errorCode = 0;               /* return code for caller */
     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 */
@@ -3483,7 +3489,7 @@ SAFSS_RemoveFile(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *targetptr = 0;      /* file to be deleted */
     Volume *volptr = 0;                /* pointer to the volume header */
     AFSFid fileFid;            /* area for Fid from the directory */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     DirHandle dir;             /* Handle for dir package I/O */
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
@@ -3648,7 +3654,7 @@ SAFSS_CreateFile(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *targetptr = 0;      /* vnode of the new file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
     Volume *volptr = 0;                /* pointer to the volume header */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     DirHandle dir;             /* Handle for dir package I/O */
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
@@ -3820,8 +3826,8 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
     Vnode *newfileptr = 0;     /* vnode of the file to delete */
     Vnode *testvptr = 0;       /* used in directory tree walk */
     Vnode *parent = 0;         /* parent for use in SetAccessList */
-    int errorCode = 0;         /* error code */
-    int fileCode = 0;          /* used when writing Vnodes */
+    Error errorCode = 0;               /* error code */
+    Error fileCode = 0;                /* used when writing Vnodes */
     VnodeId testnode;          /* used in directory tree walk */
     AFSFid fileFid;            /* Fid of file to move */
     AFSFid newFileFid;         /* Fid of new file */
@@ -4309,7 +4315,7 @@ SAFSS_Symlink(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *parentptr = 0;      /* vnode of input Directory */
     Vnode *targetptr = 0;      /* vnode of the new link */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     int len, code = 0;
     DirHandle dir;             /* Handle for dir package I/O */
     Volume *volptr = 0;                /* pointer to the volume header */
@@ -4439,18 +4445,15 @@ SAFSS_Symlink(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
 
 
 afs_int32
-SRXAFS_Symlink(acall, DirFid, Name, LinkContents, InStatus, OutFid,
-              OutFidStatus, OutDirStatus, Sync)
-     struct AFSVolSync *Sync;
-     struct rx_call *acall;    /* Rx call */
-     struct AFSFid *DirFid;    /* Parent dir's fid */
-     char *Name;               /* File name to create */
-     char *LinkContents;       /* Contents of the new created file */
-     struct AFSStoreStatus *InStatus;  /* Input status for the new symbolic link */
-     struct AFSFid *OutFid;    /* Fid for newly created symbolic link */
-     struct AFSFetchStatus *OutFidStatus;      /* Output status for new symbolic link */
-     struct AFSFetchStatus *OutDirStatus;      /* Output status for parent dir */
-
+SRXAFS_Symlink(struct rx_call *acall,  /* Rx call */
+              struct AFSFid *DirFid,   /* Parent dir's fid */
+              char *Name,              /* File name to create */
+              char *LinkContents,      /* Contents of the new created file */
+              struct AFSStoreStatus *InStatus, /* Input status for the new symbolic link */
+              struct AFSFid *OutFid,   /* Fid for newly created symbolic link */
+              struct AFSFetchStatus *OutFidStatus,     /* Output status for new symbolic link */
+              struct AFSFetchStatus *OutDirStatus,     /* Output status for parent dir */
+              struct AFSVolSync *Sync)
 {
     afs_int32 code;
     struct rx_connection *tcon;
@@ -4524,7 +4527,7 @@ SAFSS_Link(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *targetptr = 0;      /* vnode of the new file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
     Volume *volptr = 0;                /* pointer to the volume header */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     DirHandle dir;             /* Handle for dir package I/O */
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
@@ -4727,7 +4730,7 @@ SAFSS_MakeDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *targetptr = 0;      /* vnode of the new file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
     Volume *volptr = 0;                /* pointer to the volume header */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     struct acl_accessList *newACL;     /* Access list */
     int newACLSize;            /* Size of access list */
     DirHandle dir;             /* Handle for dir package I/O */
@@ -4817,7 +4820,7 @@ SAFSS_MakeDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
 
     /* Actually create the New directory in the directory package */
     SetDirHandle(&dir, targetptr);
-    assert(!(MakeDir(&dir, OutFid, DirFid)));
+    assert(!(MakeDir(&dir, (afs_int32 *)OutFid, (afs_int32 *)DirFid)));
     DFlush();
     VN_SET_LEN(targetptr, (afs_fsize_t) Length(&dir));
 
@@ -4924,7 +4927,7 @@ SAFSS_RemoveDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
     Vnode *targetptr = 0;      /* file to be deleted */
     AFSFid fileFid;            /* area for Fid from the directory */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     DirHandle dir;             /* Handle for dir package I/O */
     Volume *volptr = 0;                /* pointer to the volume header */
     struct client *client = 0; /* pointer to client structure */
@@ -5083,7 +5086,7 @@ SAFSS_SetLock(struct rx_call *acall, struct AFSFid *Fid, ViceLockType type,
 {
     Vnode *targetptr = 0;      /* vnode of input file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     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 */
@@ -5214,7 +5217,7 @@ SAFSS_ExtendLock(struct rx_call *acall, struct AFSFid *Fid,
 {
     Vnode *targetptr = 0;      /* vnode of input file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     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 */
@@ -5341,7 +5344,7 @@ SAFSS_ReleaseLock(struct rx_call *acall, struct AFSFid *Fid,
 {
     Vnode *targetptr = 0;      /* vnode of input file */
     Vnode *parentwhentargetnotdir = 0; /* parent for use in SetAccessList */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     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 */
@@ -6265,7 +6268,7 @@ SRXAFS_GetCapabilities(struct rx_call * acall, Capabilities * capabilities)
     afs_int32 code;
     struct rx_connection *tcon;
     struct host *thost;
-    afs_int32 *dataBuffP;
+    afs_uint32 *dataBuffP;
     afs_int32 dataBytes;
 
     FS_LOCK;
@@ -6278,7 +6281,7 @@ SRXAFS_GetCapabilities(struct rx_call * acall, Capabilities * capabilities)
        goto Bad_GetCaps;
 
     dataBytes = 1 * sizeof(afs_int32);
-    dataBuffP = (afs_int32 *) malloc(dataBytes);
+    dataBuffP = (afs_uint32 *) malloc(dataBytes);
     dataBuffP[0] = VICED_CAPABILITY_ERRORTRANS | VICED_CAPABILITY_WRITELOCKACL;
 #if defined(AFS_64BIT_ENV) && defined(AFS_LARGEFILE_ENV)
     dataBuffP[0] |= VICED_CAPABILITY_64BITFILES;
@@ -6304,9 +6307,8 @@ SRXAFS_FlushCPS(struct rx_call * acall, struct ViceIds * vids,
     int i;
     afs_int32 nids, naddrs;
     afs_int32 *vd, *addr;
-    int errorCode = 0;         /* return code to caller */
+    Error errorCode = 0;               /* return code to caller */
     struct client *client = 0;
-    struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     ViceLog(1, ("SRXAFS_FlushCPS\n"));
     FS_LOCK;
@@ -6544,7 +6546,7 @@ SRXAFS_GetVolumeStatus(struct rx_call * acall, afs_int32 avolid,
 {
     Vnode *targetptr = 0;      /* vnode of the new file */
     Vnode *parentwhentargetnotdir = 0; /* vnode of parent */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     Volume *volptr = 0;                /* pointer to the volume header */
     struct client *client = 0; /* pointer to client entry */
     afs_int32 rights, anyrights;       /* rights for this and any user */
@@ -6649,7 +6651,7 @@ SRXAFS_SetVolumeStatus(struct rx_call * acall, afs_int32 avolid,
 {
     Vnode *targetptr = 0;      /* vnode of the new file */
     Vnode *parentwhentargetnotdir = 0; /* vnode of parent */
-    int errorCode = 0;         /* error code */
+    Error errorCode = 0;               /* error code */
     Volume *volptr = 0;                /* pointer to the volume header */
     struct client *client = 0; /* pointer to client entry */
     afs_int32 rights, anyrights;       /* rights for this and any user */
@@ -6749,8 +6751,8 @@ SRXAFS_GetRootVolume(struct rx_call * acall, char **VolumeName)
     char *temp;
     struct rx_connection *tcon;
     struct host *thost;
+    Error errorCode = 0;
 #endif
-    int errorCode = 0;
 #if FS_STATS_DETAILED
     struct fs_stats_opTimingData *opP; /* Ptr to this op's timing struct */
     struct timeval opStartTime;        /* Start time for RPC op */
@@ -6975,7 +6977,7 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
     )
 {
     struct timeval StartTime, StopTime;        /* used to calculate file  transfer rates */
-    int errorCode = 0;         /* Returned error code to caller */
+    Error errorCode = 0;               /* Returned error code to caller */
     IHandle_t *ihP;
     FdHandle_t *fdP;
 #ifdef AFS_NT40_ENV
@@ -7035,8 +7037,9 @@ FetchData_RXStyle(Volume * volptr, Vnode * targetptr,
        Len = 0;
     }
 
-    if (Pos + Len > tlen)
-       Len = tlen - Pos;       /* get length we should send */
+    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;
@@ -7201,7 +7204,7 @@ 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 */
-    int errorCode = 0;         /* Returned error code to caller */
+    Error errorCode = 0;               /* Returned error code to caller */
 #ifdef AFS_NT40_ENV
     register char *tbuffer;    /* data copying buffer */
 #else /* AFS_NT40_ENV */
@@ -7646,7 +7649,7 @@ SRXAFS_CallBackRxConnAddr (struct rx_call * acall, afs_int32 *addr)
     struct rx_connection *conn;
 #endif
     
-    if (errorCode = CallPreamble(acall, ACTIVECALL, &tcon, &tcallhost))
+    if ((errorCode = CallPreamble(acall, ACTIVECALL, &tcon, &tcallhost)))
            goto Bad_CallBackRxConnAddr1;
     
 #ifndef __EXPERIMENTAL_CALLBACK_CONN_MOVING
@@ -7723,7 +7726,7 @@ sys_error_to_et(afs_int32 in)
        return 0;
     if (in < 0 || in > 511)
        return in;
-    if (in >= VICE_SPECIAL_ERRORS && in <= VIO || in == VRESTRICTED)
+    if ((in >= VICE_SPECIAL_ERRORS && in <= VIO) || in == VRESTRICTED)
        return in;
     if (sys2et[in] != 0)
        return sys2et[in];