2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #include "../afs/param.h" /* Should be always first */
11 #include <afsconfig.h>
15 #include "../afs/stds.h"
16 #include "../afs/sysincludes.h" /* Standard vendor system headers */
17 #include "../afs/afsincludes.h" /* Afs-based standard headers */
18 #include "../afs/afs_stats.h"
24 afs_int32 afs_FirstCSize = AFS_DEFAULTCSIZE;
25 afs_int32 afs_OtherCSize = AFS_DEFAULTCSIZE;
26 afs_int32 afs_LogChunk = AFS_DEFAULTLSIZE;
29 int afs_ChunkOffset(offset)
33 AFS_STATCNT(afs_ChunkOffset);
34 if (offset < afs_FirstCSize)
37 return ((offset - afs_FirstCSize) & (afs_OtherCSize - 1));
44 AFS_STATCNT(afs_Chunk);
45 if (offset < afs_FirstCSize)
48 return (((offset - afs_FirstCSize) >> afs_LogChunk) + 1);
52 int afs_ChunkBase(offset)
55 AFS_STATCNT(afs_ChunkBase);
56 if (offset < afs_FirstCSize)
59 return (((offset - afs_FirstCSize) & ~(afs_OtherCSize - 1)) + afs_FirstCSize);
63 int afs_ChunkSize(offset)
66 AFS_STATCNT(afs_ChunkSize);
67 if (offset < afs_FirstCSize)
68 return afs_FirstCSize;
70 return afs_OtherCSize;
74 int afs_ChunkToBase(chunk)
77 AFS_STATCNT(afs_ChunkToBase);
81 return (afs_FirstCSize + ((chunk - 1) << afs_LogChunk));
85 int afs_ChunkToSize(chunk)
88 AFS_STATCNT(afs_ChunkToSize);
90 return afs_FirstCSize;
92 return afs_OtherCSize;
95 /* sizes are a power of two */
96 int afs_SetChunkSize(chunk)
99 AFS_STATCNT(afs_SetChunkSize);
100 afs_LogChunk = chunk;
101 afs_FirstCSize = afs_OtherCSize = (1 << chunk);