From: Andrew Deason Date: Wed, 10 Nov 2010 15:11:47 +0000 (-0600) Subject: Use afs_foff_t for file offsets X-Git-Tag: upstream/1.6.0.pre2^2~164 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=2da52a3b73ec84aef21284cd217aeaaf330fce00;p=packages%2Fo%2Fopenafs.git Use afs_foff_t for file offsets 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. Reviewed-on: http://gerrit.openafs.org/3289 Tested-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear (cherry picked from commit ef8c3db90ae9ec25705027c609a1bae5f186c4f1) Change-Id: I6f950fd23eba9e00470e424ae49ee6ce9d7ca6f4 Reviewed-on: http://gerrit.openafs.org/3618 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/src/vol/clone.c b/src/vol/clone.c index f6d637917..de7091b1a 100644 --- a/src/vol/clone.c +++ b/src/vol/clone.c @@ -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; diff --git a/src/vol/purge.c b/src/vol/purge.c index 6ced3fbcd..62b0cfa27 100644 --- a/src/vol/purge.c +++ b/src/vol/purge.c @@ -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; diff --git a/src/vol/vol-info.c b/src/vol/vol-info.c index f4c451610..f4eb0168b 100644 --- a/src/vol/vol-info.c +++ b/src/vol/vol-info.c @@ -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 { @@ -888,8 +889,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) diff --git a/src/volser/dumpstuff.c b/src/volser/dumpstuff.c index 30c3c20e2..ba9b664d1 100644 --- a/src/volser/dumpstuff.c +++ b/src/volser/dumpstuff.c @@ -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; @@ -782,7 +782,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; } @@ -832,8 +832,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); @@ -1110,11 +1110,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; @@ -1171,13 +1172,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_SEEK(afile, offset = vcp->diskSize, 0); while (1) { code = STREAM_READ(vnode, vcp->diskSize, 1, afile); @@ -1214,7 +1215,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; @@ -1308,7 +1309,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; diff --git a/src/volser/vol-dump.c b/src/volser/vol-dump.c index cef91bfd8..9a90ffd9f 100644 --- a/src/volser/vol-dump.c +++ b/src/volser/vol-dump.c @@ -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; @@ -633,8 +633,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; } @@ -692,8 +692,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); @@ -784,7 +784,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); @@ -804,9 +804,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), diff --git a/src/volser/vol_split.c b/src/volser/vol_split.c index c4480801c..119549dc2 100644 --- a/src/volser/vol_split.c +++ b/src/volser/vol_split.c @@ -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)