Use afs_foff_t for file offsets
authorAndrew Deason <adeason@sinenomine.net>
Wed, 10 Nov 2010 15:11:47 +0000 (09:11 -0600)
committerDerrick Brashear <shadow@dementia.org>
Tue, 16 Nov 2010 16:27:08 +0000 (08:27 -0800)
Some callers in vol and volser were not using afs_foff_t for file
offsets for calls to STREAM_ASEEK, FDH_TRUNC, FDH_PREAD, or
FDH_PWRITE. Most notably, in code for volume cloning, purging, and
dumping operations. Fix them to use afs_foff_t to prevent errors when
dealing with large special files.

Change-Id: I531fa8cb3070007a9c03e5e19c70d546f272a12c
Reviewed-on: http://gerrit.openafs.org/3289
Tested-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/vol/clone.c
src/vol/listinodes.c
src/vol/purge.c
src/vol/vol-info.c
src/volser/dumpstuff.c
src/volser/vol-dump.c
src/volser/vol_split.c

index 7dbd3ec..945253a 100644 (file)
@@ -167,7 +167,7 @@ DoCloneIndex(Volume * rwvp, Volume * clvp, VnodeClass class, int reclone)
     Inode clinode;
     struct clone_head decHead;
     struct clone_rock decRock;
-    afs_int32 offset = 0;
+    afs_foff_t offset = 0;
     afs_int32 dircloned, inodeinced;
     afs_int32 filecount = 0, diskused = 0;
     afs_ino_str_t stmp;
index 326f264..47000a0 100644 (file)
@@ -1396,7 +1396,7 @@ inode_ConvertROtoRWvolume(char *pname, afs_uint32 volumeId)
     struct VolumeDiskHeader h;
     IHandle_t *ih, *ih2;
     FdHandle_t *fdP, *fdP2;
-    ssize_t offset;
+    afs_foff_t offset;
     char wpath[100];
     char tmpDevName[100];
     char buffer[128];
index 5644f09..783e5d9 100644 (file)
@@ -52,7 +52,7 @@
 
 /* forward declarations */
 static int ObliterateRegion(Volume * avp, VnodeClass aclass, StreamHandle_t * afile,
-                           afs_int32 * aoffset);
+                           afs_foff_t * aoffset);
 #if 0
 static void PurgeIndex(Volume * vp, VnodeClass class);
 static void PurgeHeader(Volume * vp);
@@ -106,12 +106,12 @@ VPurgeVolume(Error * ec, Volume * vp)
    and otherwise doesn't touch it */
 static int
 ObliterateRegion(Volume * avp, VnodeClass aclass, StreamHandle_t * afile,
-                afs_int32 * aoffset)
+                afs_foff_t * aoffset)
 {
     struct VnodeClassInfo *vcp;
     Inode inodes[MAXOBLITATONCE];
     afs_int32 iindex, nscanned;
-    afs_int32 offset;
+    afs_foff_t offset;
     char buf[SIZEOF_LARGEDISKVNODE];
     int hitEOF;
     int i;
@@ -186,7 +186,7 @@ PurgeIndex_r(Volume * vp, VnodeClass class)
 {
     StreamHandle_t *ifile;
     struct VnodeClassInfo *vcp = &VnodeClassInfo[class];
-    afs_int32 offset;
+    afs_foff_t offset;
     afs_int32 code;
     FdHandle_t *fdP;
 
index 0edc296..bf7b1f6 100644 (file)
@@ -92,10 +92,10 @@ struct DiskPartition64 *FindCurrentPartition(void);
 Volume *AttachVolume(struct DiskPartition64 *dp, char *volname,
                     struct VolumeHeader *header);
 #if defined(AFS_NAMEI_ENV)
-void PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
+void PrintVnode(afs_foff_t offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
                Inode ino, Volume * vp);
 #else
-void PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
+void PrintVnode(afs_foff_t offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
                Inode ino);
 #endif
 void PrintVnodes(Volume * vp, VnodeClass class);
@@ -748,7 +748,8 @@ PrintVnodes(Volume * vp, VnodeClass class)
     char buf[SIZEOF_LARGEDISKVNODE];
     struct VnodeDiskObject *vnode = (struct VnodeDiskObject *)buf;
     StreamHandle_t *file;
-    int vnodeIndex, nVnodes, offset = 0;
+    int vnodeIndex, nVnodes;
+    afs_foff_t offset = 0;
     Inode ino;
     IHandle_t *ih = vp->vnodeIndex[class].handle;
     FdHandle_t *fdP;
@@ -862,11 +863,11 @@ PrintVnodes(Volume * vp, VnodeClass class)
 
 #if defined(AFS_NAMEI_ENV)
 void
-PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
+PrintVnode(afs_foff_t offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
           Inode ino, Volume * vp)
 #else
 void
-PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
+PrintVnode(afs_foff_t offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
           Inode ino)
 #endif
 {
@@ -884,8 +885,8 @@ PrintVnode(int offset, VnodeDiskObject * vnode, VnodeId vnodeNumber,
     if (orphaned && (fileLength == 0 || vnode->parent || !offset))
        return;
     printf
-       ("%10d Vnode %u.%u.%u cloned: %u, length: %llu linkCount: %d parent: %u",
-        offset, vnodeNumber, vnode->uniquifier, vnode->dataVersion,
+       ("%10lld Vnode %u.%u.%u cloned: %u, length: %llu linkCount: %d parent: %u",
+        (long long)offset, vnodeNumber, vnode->uniquifier, vnode->dataVersion,
         vnode->cloned, (afs_uintmax_t) fileLength, vnode->linkCount,
         vnode->parent);
     if (DumpInodeNumber)
index 4297d70..f2bd77e 100644 (file)
@@ -75,7 +75,7 @@ static int DumpVnode(struct iod *iodp, struct VnodeDiskObject *v,
                     int volid, int vnodeNumber, int dumpEverything);
 static int ReadDumpHeader(struct iod *iodp, struct DumpHeader *hp);
 static int ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
-                     afs_int32 * Lbuf, afs_int32 s1, afs_int32 * Sbuf,
+                     afs_foff_t * Lbuf, afs_int32 s1, afs_foff_t * Sbuf,
                      afs_int32 s2, afs_int32 delo);
 static afs_fsize_t volser_WriteFile(int vn, struct iod *iodp,
                                    FdHandle_t * handleP, int tag,
@@ -705,7 +705,7 @@ DumpFile(struct iod *iodp, int vnode, FdHandle_t * handleP)
 {
     int code = 0, error = 0;
     afs_int32 pad = 0;
-    afs_int32 offset = 0;
+    afs_foff_t offset = 0;
     afs_sfsize_t nbytes, howBig;
     ssize_t n;
     size_t howMany;
@@ -784,7 +784,7 @@ DumpFile(struct iod *iodp, int vnode, FdHandle_t * handleP)
         * amount that we had null padded.
         */
        if ((n > 0) && pad) {
-           Log("1 Volser: DumpFile: Null padding file %d bytes at offset %u\n", pad, offset);
+           Log("1 Volser: DumpFile: Null padding file %d bytes at offset %lld\n", pad, (long long)offset);
            pad = 0;
        }
 
@@ -824,8 +824,8 @@ DumpFile(struct iod *iodp, int vnode, FdHandle_t * handleP)
     }
 
     if (pad) {                 /* Any padding we hadn't reported yet */
-       Log("1 Volser: DumpFile: Null padding file: %d bytes at offset %u\n",
-           pad, offset);
+       Log("1 Volser: DumpFile: Null padding file: %d bytes at offset %lld\n",
+           pad, (long long)offset);
     }
 
     free(p);
@@ -1102,11 +1102,12 @@ DumpVnode(struct iod *iodp, struct VnodeDiskObject *v, int volid,
 
 
 int
-ProcessIndex(Volume * vp, VnodeClass class, afs_int32 ** Bufp, int *sizep,
+ProcessIndex(Volume * vp, VnodeClass class, afs_foff_t ** Bufp, int *sizep,
             int del)
 {
-    int i, nVnodes, offset, code;
-    afs_int32 *Buf;
+    int i, nVnodes, code;
+    afs_foff_t offset;
+    afs_foff_t *Buf;
     int cnt = 0;
     afs_sfsize_t size;
     StreamHandle_t *afile;
@@ -1163,13 +1164,13 @@ ProcessIndex(Volume * vp, VnodeClass class, afs_int32 ** Bufp, int *sizep,
                Log("RestoreVolume ProcessIndex: Set up %d inodes for volume %d\n",
                    nVnodes, V_id(vp));
            }
-           Buf = (afs_int32 *) malloc(nVnodes * sizeof(afs_int32));
+           Buf = malloc(nVnodes * sizeof(afs_foff_t));
            if (Buf == NULL) {
                STREAM_CLOSE(afile);
                FDH_CLOSE(fdP);
                return -1;
            }
-           memset(Buf, 0, nVnodes * sizeof(afs_int32));
+           memset(Buf, 0, nVnodes * sizeof(afs_foff_t));
            STREAM_ASEEK(afile, offset = vcp->diskSize);
            while (1) {
                code = STREAM_READ(vnode, vcp->diskSize, 1, afile);
@@ -1206,7 +1207,7 @@ RestoreVolume(struct rx_call *call, Volume * avp, int incremental,
     Volume *vp;
     struct iod iod;
     struct iod *iodp = &iod;
-    afs_int32 *b1 = NULL, *b2 = NULL;
+    afs_foff_t *b1 = NULL, *b2 = NULL;
     int s1 = 0, s2 = 0, delo = 0, tdelo;
     int tag;
 
@@ -1300,7 +1301,7 @@ RestoreVolume(struct rx_call *call, Volume * avp, int incremental,
 
 static int
 ReadVnodes(struct iod *iodp, Volume * vp, int incremental,
-          afs_int32 * Lbuf, afs_int32 s1, afs_int32 * Sbuf, afs_int32 s2,
+          afs_foff_t * Lbuf, afs_int32 s1, afs_foff_t * Sbuf, afs_int32 s2,
           afs_int32 delo)
 {
     afs_int32 vnodeNumber;
index d3eca97..5cb057c 100644 (file)
@@ -559,7 +559,7 @@ DumpFile(int dumpfd, int vnode, FdHandle_t * handleP,  struct VnodeDiskObject *v
 {
     int code = 0, failed_seek = 0, failed_write = 0;
     afs_int32 pad = 0;
-    afs_int32 offset = 0;
+    afs_foff_t offset = 0;
     afs_sfsize_t nbytes, howBig;
     ssize_t n;
     size_t howMany;
@@ -636,8 +636,8 @@ DumpFile(int dumpfd, int vnode, FdHandle_t * handleP,  struct VnodeDiskObject *v
         * amount that we had null padded.
         */
        if ((n > 0) && pad) {
-           fprintf(stderr, "Null padding file %d bytes at offset %u\n", pad,
-                   offset);
+           fprintf(stderr, "Null padding file %d bytes at offset %lld\n", pad,
+                   (long long)offset);
            pad = 0;
        }
 
@@ -680,8 +680,8 @@ DumpFile(int dumpfd, int vnode, FdHandle_t * handleP,  struct VnodeDiskObject *v
     }
 
     if (pad) {                 /* Any padding we hadn't reported yet */
-       fprintf(stderr, "Null padding file: %d bytes at offset %u\n", pad,
-               offset);
+       fprintf(stderr, "Null padding file: %d bytes at offset %lld\n", pad,
+               (long long)offset);
     }
 
     free(p);
@@ -773,7 +773,7 @@ DumpVnodeIndex(int dumpfd, Volume * vp, VnodeClass class, afs_int32 fromtime,
     FdHandle_t *fdP;
     afs_sfsize_t size;
     int flag;
-    int offset = 0;
+    afs_foff_t offset = 0;
     int vnodeIndex, nVnodes = 0;
 
     fdP = IH_OPEN(vp->vnodeIndex[class].handle);
@@ -793,9 +793,9 @@ DumpVnodeIndex(int dumpfd, Volume * vp, VnodeClass class, afs_int32 fromtime,
         * a serverModifyTime.  For an epoch dump, this results in 0>=0 test, which
         * does dump the file! */
        if (verbose)
-           fprintf(stderr, "about to dump %s vnode %u (vnode offset = %u)\n",
+           fprintf(stderr, "about to dump %s vnode %u (vnode offset = %lld)\n",
                        class == vSmall ? "vSmall" : "vLarge",
-                   bitNumberToVnodeNumber(vnodeIndex, class), offset);
+                   bitNumberToVnodeNumber(vnodeIndex, class), (long long)offset);
        if (!code)
            code =
                DumpVnode(dumpfd, vnode, V_id(vp),
index c558774..0680efc 100644 (file)
@@ -93,7 +93,7 @@ ExtractVnodes(struct Msg *m, Volume *vol, afs_int32 class,
     struct VnodeClassInfo *vcp = &VnodeClassInfo[class];
     struct VnodeExtract *e;
     afs_sfsize_t size;
-    afs_uint32 offset;
+    afs_foff_t offset;
 
     *length = 0;
     if (parent)