From 3913aa55eed10f9d6316910ef950f5c3242e20d7 Mon Sep 17 00:00:00 2001 From: Rainer Toebbicke Date: Mon, 8 Feb 2010 15:18:04 +0100 Subject: [PATCH] afs_TruncateAllSegments() make sure correct afs_size_t comparison is used when selecting dcache entries for truncation Insure that afs_TruncateAllSegments() uses the correct [64-bit] comparison when deciding whether to truncate chunks: alen - AFS_CHUNKTOBASE(tdc->f.chunk) for a file > 2GB would fail to be recognised negative with an "afs_int32 newSize", even with alen = 0 and big tdc->f.chunk. Change-Id: Id77109fb8238234dae725bd876f70ea0fbd403fc Change-Id: If0120e21a52316e536d03241c83e8f0d36614c13 Reviewed-on: http://gerrit.openafs.org/1252 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_segments.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/afs/afs_segments.c b/src/afs/afs_segments.c index a821d73a0c..1da015db6a 100644 --- a/src/afs/afs_segments.c +++ b/src/afs/afs_segments.c @@ -644,7 +644,7 @@ afs_TruncateAllSegments(register struct vcache *avc, afs_size_t alen, register struct dcache *tdc; register afs_int32 code; register afs_int32 index; - afs_int32 newSize; + afs_size_t newSize; int dcCount, dcPos; struct dcache **tdcArray; @@ -748,12 +748,12 @@ afs_TruncateAllSegments(register struct vcache *avc, afs_size_t alen, if (newSize < 0) newSize = 0; ObtainSharedLock(&tdc->lock, 672); - if (newSize < tdc->f.chunkBytes) { + if (newSize < tdc->f.chunkBytes && newSize < MAX_AFS_UINT32) { UpgradeSToWLock(&tdc->lock, 673); tfile = afs_CFileOpen(&tdc->f.inode); - afs_CFileTruncate(tfile, newSize); + afs_CFileTruncate(tfile, (afs_int32)newSize); afs_CFileClose(tfile); - afs_AdjustSize(tdc, newSize); + afs_AdjustSize(tdc, (afs_int32)newSize); if (alen < tdc->validPos) { if (alen < AFS_CHUNKTOBASE(tdc->f.chunk)) tdc->validPos = 0;