mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 06:50:12 +00:00
STABLE14-dynamic-vcache-allocation-20090319
LICENSE IPL10
FIXES 124334
add dynamic allocation of vcaches when possible (currently just for linux)
(cherry picked from commit e59b81c984
)
This commit is contained in:
parent
d6fc723d56
commit
157e3374bb
@ -29,6 +29,7 @@ B<afsd> [B<-afsdb>] [B<-backuptree>]
|
||||
[B<-settime>] [B<-shutdown>]
|
||||
S<<< [B<-splitcache> <I<RW/RO ratio>>] >>>
|
||||
S<<< [B<-stat> <I<number of stat entries>>] >>> [B<-verbose>]
|
||||
[B<-disable-dynamic-vcaches>]
|
||||
S<<< [B<-volumes> <I<number of volume entries>>] >>>
|
||||
[B<-waitclose>]
|
||||
|
||||
@ -669,6 +670,13 @@ standard output stream.
|
||||
Specifies the number of memory structures to allocate for storing volume
|
||||
location information. The default value is C<50>.
|
||||
|
||||
=item B<-disable-dynamic-vcaches>
|
||||
|
||||
By default, dynamic vcache overrides the B<-stat> option by using the value of
|
||||
B<-stat> (or the default) as the initial size of the stat (or vcache) pool and
|
||||
increases the pool dynamically as needed on supported platforms. This flag will
|
||||
disable this new functionality and honor the '-stat' setting.
|
||||
|
||||
=item B<-waitclose>
|
||||
|
||||
Has no effect on the operation of the Cache Manager. The behavior it
|
||||
|
@ -825,7 +825,8 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
|
||||
afs_CacheInit(cparms.cacheScaches, cparms.cacheFiles,
|
||||
cparms.cacheBlocks, cparms.cacheDcaches,
|
||||
cparms.cacheVolumes, cparms.chunkSize,
|
||||
cparms.memCacheFlag, cparms.inodes, cparms.users);
|
||||
cparms.memCacheFlag, cparms.inodes, cparms.users,
|
||||
cparms.dynamic_vcaches);
|
||||
|
||||
} else if (parm == AFSOP_CACHEINODE) {
|
||||
ino_t ainode = parm2;
|
||||
|
@ -180,7 +180,7 @@ afs_DequeueCallback(struct vcache *avc)
|
||||
*/
|
||||
|
||||
/* Sanity check on the callback queue. Allow for slop in the computation. */
|
||||
#ifdef AFS_OSF_ENV
|
||||
#if defined(AFS_OSF_ENV) || defined(AFS_LINUX22_ENV)
|
||||
#define CBQ_LIMIT (afs_maxvcount + 10)
|
||||
#else
|
||||
#define CBQ_LIMIT (afs_cacheStats + afs_stats_cmperf.vcacheXAllocs + 10)
|
||||
|
@ -40,6 +40,8 @@ static int rxepoch_checked = 0;
|
||||
#define afs_CheckRXEpoch() {if (rxepoch_checked == 0 && rxkad_EpochWasSet) { \
|
||||
rxepoch_checked = 1; afs_GCUserData(/* force flag */ 1); } }
|
||||
|
||||
extern int afsd_dynamic_vcaches;
|
||||
|
||||
/* PAG garbage collection */
|
||||
/* We induce a compile error if param.h does not define AFS_GCPAGS */
|
||||
afs_int32 afs_gcpags = AFS_GCPAGS;
|
||||
@ -116,13 +118,13 @@ afs_Daemon(void)
|
||||
struct afs_exporter *exporter;
|
||||
afs_int32 now;
|
||||
afs_int32 last3MinCheck, last10MinCheck, last60MinCheck, lastNMinCheck;
|
||||
afs_int32 last1MinCheck;
|
||||
afs_int32 last1MinCheck, last5MinCheck;
|
||||
afs_uint32 lastCBSlotBump;
|
||||
char cs_warned = 0;
|
||||
|
||||
AFS_STATCNT(afs_Daemon);
|
||||
last1MinCheck = last3MinCheck = last60MinCheck = last10MinCheck =
|
||||
lastNMinCheck = 0;
|
||||
last5MinCheck = lastNMinCheck = 0;
|
||||
|
||||
afs_rootFid.Fid.Volume = 0;
|
||||
while (afs_initState < 101)
|
||||
@ -150,6 +152,7 @@ afs_Daemon(void)
|
||||
last3MinCheck = now - 90 + ((afs_random() & 0x7fffffff) % 180);
|
||||
last60MinCheck = now - 1800 + ((afs_random() & 0x7fffffff) % 3600);
|
||||
last10MinCheck = now - 300 + ((afs_random() & 0x7fffffff) % 600);
|
||||
last5MinCheck = now - 150 + ((afs_random() & 0x7fffffff) % 300);
|
||||
lastNMinCheck = now - 90 + ((afs_random() & 0x7fffffff) % 180);
|
||||
|
||||
/* start off with afs_initState >= 101 (basic init done) */
|
||||
@ -191,6 +194,19 @@ afs_Daemon(void)
|
||||
* tickets */
|
||||
last3MinCheck = now;
|
||||
}
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
if (afsd_dynamic_vcaches && (last5MinCheck + 300 < now)) {
|
||||
/* start with trying to drop us back to our base usage */
|
||||
int anumber;
|
||||
if (afs_maxvcount <= afs_cacheStats)
|
||||
anumber = VCACHE_FREE;
|
||||
else
|
||||
anumber = VCACHE_FREE + (afs_maxvcount - afs_cacheStats);
|
||||
|
||||
afs_ShakeLooseVCaches(anumber);
|
||||
last5MinCheck = now;
|
||||
}
|
||||
#endif
|
||||
if (!afs_CheckServerDaemonStarted) {
|
||||
/* Do the check here if the correct afsd is not installed. */
|
||||
if (!cs_warned) {
|
||||
|
@ -45,6 +45,9 @@ int afs_memvolumes = 0;
|
||||
static struct vnode *volumeVnode;
|
||||
#endif
|
||||
|
||||
/* This is the kernel side of the dynamic vcache setting */
|
||||
int afsd_dynamic_vcaches = 0; /* Enable dynamic-vcache support */
|
||||
|
||||
/*
|
||||
* Initialization order is important. Must first call afs_CacheInit,
|
||||
* then cache file and volume file initialization routines. Next, the
|
||||
@ -81,7 +84,7 @@ static int afs_cacheinit_flag = 0;
|
||||
int
|
||||
afs_CacheInit(afs_int32 astatSize, afs_int32 afiles, afs_int32 ablocks,
|
||||
afs_int32 aDentries, afs_int32 aVolumes, afs_int32 achunk,
|
||||
afs_int32 aflags, afs_int32 ninodes, afs_int32 nusers)
|
||||
afs_int32 aflags, afs_int32 ninodes, afs_int32 nusers, afs_int32 dynamic_vcaches)
|
||||
{
|
||||
register afs_int32 i;
|
||||
register struct volume *tv;
|
||||
@ -98,6 +101,13 @@ afs_CacheInit(afs_int32 astatSize, afs_int32 afiles, afs_int32 ablocks,
|
||||
afs_stats_cmperf.sysName_ID = SYS_NAME_ID_UNDEFINED;
|
||||
#endif /* SYS_NAME_ID */
|
||||
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
afsd_dynamic_vcaches = dynamic_vcaches;
|
||||
printf("%s dynamically allocated vcaches\n", ( afsd_dynamic_vcaches ? "enabling" : "disabling" ));
|
||||
#else
|
||||
afsd_dynamic_vcaches = 0;
|
||||
#endif
|
||||
|
||||
printf("Starting AFS cache scan...");
|
||||
if (afs_cacheinit_flag)
|
||||
return 0;
|
||||
|
@ -376,7 +376,7 @@ extern int afs_CacheInit(afs_int32 astatSize, afs_int32 afiles,
|
||||
afs_int32 ablocks, afs_int32 aDentries,
|
||||
afs_int32 aVolumes, afs_int32 achunk,
|
||||
afs_int32 aflags, afs_int32 ninodes,
|
||||
afs_int32 nusers);
|
||||
afs_int32 nusers, afs_int32 dynamic_vcaches);
|
||||
extern void afs_ComputeCacheParms(void);
|
||||
extern int afs_InitCacheInfo(register char *afile);
|
||||
extern int afs_InitVolumeInfo(char *afile);
|
||||
|
@ -77,6 +77,7 @@ struct afs_q afs_vhashTV[VCSIZE];
|
||||
static struct afs_cbr *afs_cbrHashT[CBRSIZE];
|
||||
afs_int32 afs_bulkStatsLost;
|
||||
int afs_norefpanic = 0;
|
||||
extern int afsd_dynamic_vcaches;
|
||||
|
||||
/* Forward declarations */
|
||||
static afs_int32 afs_QueueVCB(struct vcache *avc);
|
||||
@ -253,6 +254,7 @@ afs_FlushVCache(struct vcache *avc, int *slept)
|
||||
VN_UNLOCK(AFSTOV(avc));
|
||||
#endif
|
||||
AFS_RELE(AFSTOV(avc));
|
||||
afs_stats_cmperf.vcacheXAllocs--;
|
||||
} else {
|
||||
if (afs_norefpanic) {
|
||||
printf("flush vc refcnt < 1");
|
||||
@ -621,54 +623,29 @@ afs_FlushReclaimedVcaches(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* afs_NewVCache
|
||||
*
|
||||
* Description:
|
||||
* This routine is responsible for allocating a new cache entry
|
||||
* from the free list. It formats the cache entry and inserts it
|
||||
* into the appropriate hash tables. It must be called with
|
||||
* afs_xvcache write-locked so as to prevent several processes from
|
||||
* trying to create a new cache entry simultaneously.
|
||||
*
|
||||
* Parameters:
|
||||
* afid : The file id of the file whose cache entry is being
|
||||
* created.
|
||||
*/
|
||||
/* LOCK: afs_NewVCache afs_xvcache W */
|
||||
struct vcache *
|
||||
afs_NewVCache(struct VenusFid *afid, struct server *serverp)
|
||||
static int
|
||||
afs_ShakeLooseVCaches(afs_int32 anumber)
|
||||
{
|
||||
struct vcache *tvc;
|
||||
#if defined(AFS_OSF_ENV) || defined(AFS_LINUX22_ENV)
|
||||
afs_int32 i, j;
|
||||
afs_int32 anumber = VCACHE_FREE;
|
||||
#ifdef AFS_AIX_ENV
|
||||
struct gnode *gnodepnt;
|
||||
#endif
|
||||
#ifdef AFS_OSF_ENV
|
||||
struct vcache *nvc;
|
||||
#endif /* AFS_OSF_ENV */
|
||||
struct vcache *tvc;
|
||||
struct afs_q *tq, *uq;
|
||||
int code, fv_slept;
|
||||
afs_int32 target = anumber;
|
||||
int haveGlock = 1;
|
||||
|
||||
AFS_STATCNT(afs_NewVCache);
|
||||
/* Should probably deal better */
|
||||
if (!ISAFS_GLOCK()) {
|
||||
haveGlock = 0;
|
||||
AFS_GLOCK();
|
||||
}
|
||||
|
||||
afs_FlushReclaimedVcaches();
|
||||
|
||||
#if defined(AFS_OSF_ENV) || defined(AFS_LINUX22_ENV)
|
||||
#if defined(AFS_OSF30_ENV) || defined(AFS_LINUX22_ENV)
|
||||
if (afs_vcount >= afs_maxvcount)
|
||||
#else
|
||||
/*
|
||||
* If we are using > 33 % of the total system vnodes for AFS vcache
|
||||
* entries or we are using the maximum number of vcache entries,
|
||||
* then free some. (if our usage is > 33% we should free some, if
|
||||
* our usage is > afs_maxvcount, set elsewhere to 0.5*nvnode,
|
||||
* we _must_ free some -- no choice).
|
||||
*/
|
||||
if (((3 * afs_vcount) > nvnode) || (afs_vcount >= afs_maxvcount))
|
||||
if (
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
afsd_dynamic_vcaches || /* Always run if dynamic vcaches are enabled. */
|
||||
#endif
|
||||
{
|
||||
afs_vcount >= afs_maxvcount
|
||||
) {
|
||||
int i;
|
||||
char *panicstr;
|
||||
|
||||
@ -678,7 +655,11 @@ afs_NewVCache(struct VenusFid *afid, struct server *serverp)
|
||||
uq = QPrev(tq);
|
||||
if (tvc->states & CVFlushed) {
|
||||
refpanic("CVFlushed on VLRU");
|
||||
} else if (i++ > afs_maxvcount) {
|
||||
} else if (
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
! afsd_dynamic_vcaches &&
|
||||
#endif
|
||||
i++ > afs_maxvcount) {
|
||||
refpanic("Exceeded pool of AFS vnodes(VLRU cycle?)");
|
||||
} else if (QNext(uq) != tq) {
|
||||
refpanic("VLRU inconsistent");
|
||||
@ -744,24 +725,48 @@ restart:
|
||||
if (tq == uq)
|
||||
break;
|
||||
}
|
||||
if (anumber == VCACHE_FREE) {
|
||||
printf("afs_NewVCache: warning none freed, using %d of %d\n",
|
||||
if (
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
!afsd_dynamic_vcaches &&
|
||||
#endif
|
||||
anumber == target) {
|
||||
printf("afs_ShakeLooseVCaches: warning none freed, using %d of %d\n",
|
||||
afs_vcount, afs_maxvcount);
|
||||
if (afs_vcount >= afs_maxvcount) {
|
||||
printf("afs_NewVCache - none freed\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
printf("recycled %d entries\n", target-anumber);
|
||||
*/
|
||||
if (!haveGlock)
|
||||
AFS_GUNLOCK();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(AFS_LINUX22_ENV)
|
||||
|
||||
static struct vcache *
|
||||
afs_AllocVCache(void)
|
||||
{
|
||||
struct vcache *tvc;
|
||||
#if defined(AFS_OSF30_ENV)
|
||||
struct vcache *nvc;
|
||||
AFS_GUNLOCK();
|
||||
if (getnewvnode(MOUNT_AFS, &Afs_vnodeops, &nvc)) {
|
||||
/* What should we do ???? */
|
||||
osi_Panic("afs_AllocVCache: no more vnodes");
|
||||
}
|
||||
AFS_GLOCK();
|
||||
|
||||
tvc = nvc;
|
||||
tvc->nextfree = NULL;
|
||||
afs_vcount++;
|
||||
#elif defined(AFS_LINUX22_ENV)
|
||||
struct inode *ip;
|
||||
|
||||
AFS_GUNLOCK();
|
||||
ip = new_inode(afs_globalVFS);
|
||||
if (!ip)
|
||||
osi_Panic("afs_NewVCache: no more inodes");
|
||||
osi_Panic("afs_AllocVCache: no more inodes");
|
||||
AFS_GLOCK();
|
||||
#if defined(STRUCT_SUPER_HAS_ALLOC_INODE)
|
||||
tvc = VTOAFS(ip);
|
||||
@ -770,19 +775,90 @@ restart:
|
||||
ip->u.generic_ip = tvc;
|
||||
tvc->v = ip;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
AFS_GUNLOCK();
|
||||
if (getnewvnode(MOUNT_AFS, &Afs_vnodeops, &nvc)) {
|
||||
/* What should we do ???? */
|
||||
osi_Panic("afs_NewVCache: no more vnodes");
|
||||
}
|
||||
AFS_GLOCK();
|
||||
|
||||
tvc = nvc;
|
||||
tvc->nextfree = NULL;
|
||||
#endif
|
||||
afs_vcount++;
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
/* track the peak */
|
||||
if (afsd_dynamic_vcaches && afs_maxvcount < afs_vcount) {
|
||||
afs_maxvcount = afs_vcount;
|
||||
printf("peak vnodes: %d\n", afs_maxvcount);
|
||||
}
|
||||
#endif
|
||||
afs_stats_cmperf.vcacheXAllocs++; /* count in case we have a leak */
|
||||
#else
|
||||
/* none free, making one is better than a panic */
|
||||
afs_stats_cmperf.vcacheXAllocs++; /* count in case we have a leak */
|
||||
tvc = (struct vcache *)afs_osi_Alloc(sizeof(struct vcache));
|
||||
#if defined(AFS_DARWIN_ENV) && !defined(UKERNEL)
|
||||
tvc->v = NULL; /* important to clean this, or use memset 0 */
|
||||
#endif
|
||||
#ifdef KERNEL_HAVE_PIN
|
||||
pin((char *)tvc, sizeof(struct vcache)); /* XXX */
|
||||
#endif
|
||||
#if defined(AFS_SGI_ENV)
|
||||
{
|
||||
char name[METER_NAMSZ];
|
||||
memset(tvc, 0, sizeof(struct vcache));
|
||||
tvc->v.v_number = ++afsvnumbers;
|
||||
tvc->vc_rwlockid = OSI_NO_LOCKID;
|
||||
initnsema(&tvc->vc_rwlock, 1,
|
||||
makesname(name, "vrw", tvc->v.v_number));
|
||||
#ifndef AFS_SGI53_ENV
|
||||
initnsema(&tvc->v.v_sync, 0,
|
||||
makesname(name, "vsy", tvc->v.v_number));
|
||||
#endif
|
||||
#ifndef AFS_SGI62_ENV
|
||||
initnlock(&tvc->v.v_lock,
|
||||
makesname(name, "vlk", tvc->v.v_number));
|
||||
#endif
|
||||
}
|
||||
#endif /* AFS_SGI_ENV */
|
||||
#endif
|
||||
return tvc;
|
||||
}
|
||||
|
||||
/*!
|
||||
* This routine is responsible for allocating a new cache entry
|
||||
* from the free list. It formats the cache entry and inserts it
|
||||
* into the appropriate hash tables. It must be called with
|
||||
* afs_xvcache write-locked so as to prevent several processes from
|
||||
* trying to create a new cache entry simultaneously.
|
||||
*
|
||||
* LOCK: afs_NewVCache afs_xvcache W
|
||||
*
|
||||
* \param afid The file id of the file whose cache entry is being created.
|
||||
*
|
||||
* \return The new vcache struct.
|
||||
*/
|
||||
struct vcache *
|
||||
afs_NewVCache(struct VenusFid *afid, struct server *serverp)
|
||||
{
|
||||
struct vcache *tvc;
|
||||
afs_int32 i, j;
|
||||
afs_int32 anumber = VCACHE_FREE;
|
||||
#ifdef AFS_AIX_ENV
|
||||
struct gnode *gnodepnt;
|
||||
#endif
|
||||
struct afs_q *tq, *uq;
|
||||
int code, fv_slept;
|
||||
|
||||
AFS_STATCNT(afs_NewVCache);
|
||||
|
||||
afs_FlushReclaimedVcaches();
|
||||
|
||||
#if defined(AFS_OSF_ENV) || defined(AFS_LINUX22_ENV)
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
if(!afsd_dynamic_vcaches) {
|
||||
#endif
|
||||
afs_ShakeLooseVCaches(anumber);
|
||||
if (afs_vcount >= afs_maxvcount) {
|
||||
printf("afs_NewVCache - none freed\n");
|
||||
return NULL;
|
||||
}
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
}
|
||||
#endif
|
||||
tvc = afs_AllocVCache();
|
||||
#else /* AFS_OSF_ENV */
|
||||
/* pull out a free cache entry */
|
||||
if (!freeVCList) {
|
||||
@ -870,33 +946,7 @@ restart:
|
||||
}
|
||||
}
|
||||
if (!freeVCList) {
|
||||
/* none free, making one is better than a panic */
|
||||
afs_stats_cmperf.vcacheXAllocs++; /* count in case we have a leak */
|
||||
tvc = (struct vcache *)afs_osi_Alloc(sizeof(struct vcache));
|
||||
#if defined(AFS_DARWIN_ENV) && !defined(UKERNEL)
|
||||
tvc->v = NULL; /* important to clean this, or use memset 0 */
|
||||
#endif
|
||||
#ifdef KERNEL_HAVE_PIN
|
||||
pin((char *)tvc, sizeof(struct vcache)); /* XXX */
|
||||
#endif
|
||||
#if defined(AFS_SGI_ENV)
|
||||
{
|
||||
char name[METER_NAMSZ];
|
||||
memset(tvc, 0, sizeof(struct vcache));
|
||||
tvc->v.v_number = ++afsvnumbers;
|
||||
tvc->vc_rwlockid = OSI_NO_LOCKID;
|
||||
initnsema(&tvc->vc_rwlock, 1,
|
||||
makesname(name, "vrw", tvc->v.v_number));
|
||||
#ifndef AFS_SGI53_ENV
|
||||
initnsema(&tvc->v.v_sync, 0,
|
||||
makesname(name, "vsy", tvc->v.v_number));
|
||||
#endif
|
||||
#ifndef AFS_SGI62_ENV
|
||||
initnlock(&tvc->v.v_lock,
|
||||
makesname(name, "vlk", tvc->v.v_number));
|
||||
#endif
|
||||
}
|
||||
#endif /* AFS_SGI_ENV */
|
||||
tvc = afs_AllocVCache();
|
||||
} else {
|
||||
tvc = freeVCList; /* take from free list */
|
||||
freeVCList = tvc->nextfree;
|
||||
@ -1769,7 +1819,7 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
|
||||
newvcache = 1;
|
||||
|
||||
ConvertWToSLock(&afs_xvcache);
|
||||
if (!tvc)
|
||||
if (tvc == NULL)
|
||||
{
|
||||
ReleaseSharedLock(&afs_xvcache);
|
||||
return NULL;
|
||||
|
@ -32,6 +32,9 @@
|
||||
* -nosettime Don't keep checking the time to avoid drift (default).
|
||||
* -settime Keep checking the time to avoid drift.
|
||||
* -verbose Be chatty.
|
||||
* -disable-dynamic-vcaches Disable the use of -stat value as the starting size of
|
||||
* the size of the vcache/stat cache pool,
|
||||
* but increase that pool dynamically as needed.
|
||||
* -debug Print out additional debugging info.
|
||||
* -kerndev [OBSOLETE] The kernel device for AFS.
|
||||
* -dontfork [OBSOLETE] Don't fork off as a new process.
|
||||
@ -312,6 +315,7 @@ static int enable_nomount = 0; /* do not mount */
|
||||
#ifdef notdef
|
||||
static int inodes = 60; /* VERY conservative, but has to be */
|
||||
#endif
|
||||
int afsd_dynamic_vcaches = 0; /* Enable dynamic-vcache support */
|
||||
int afsd_verbose = 0; /*Are we being chatty? */
|
||||
int afsd_debug = 0; /*Are we printing debugging info? */
|
||||
int afsd_CloseSynch = 0; /*Are closes synchronous or not? */
|
||||
@ -1736,6 +1740,25 @@ mainproc(struct cmd_syndesc *as, void *arock)
|
||||
}
|
||||
}
|
||||
|
||||
if (as->parms[34].items) {
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
/* -disable-dynamic-vcaches */
|
||||
afsd_dynamic_vcaches = FALSE;
|
||||
#else
|
||||
printf("afsd: Error toggling flag, dynamically allocated vcaches not supported on your platform\n");
|
||||
exit(1);
|
||||
#endif
|
||||
}
|
||||
#ifdef AFS_MAXVCOUNT_ENV
|
||||
else {
|
||||
/* -dynamic-vcaches */
|
||||
afsd_dynamic_vcaches = TRUE;
|
||||
}
|
||||
|
||||
if (afsd_verbose)
|
||||
printf("afsd: %s dynamically allocated vcaches\n", ( afsd_dynamic_vcaches ? "enabling" : "disabling" ));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Pull out all the configuration info for the workstation's AFS cache and
|
||||
* the cellular community we're willing to let our users see.
|
||||
@ -2073,6 +2096,7 @@ mainproc(struct cmd_syndesc *as, void *arock)
|
||||
cparams.chunkSize = chunkSize;
|
||||
cparams.setTimeFlag = cacheSetTime;
|
||||
cparams.memCacheFlag = cacheFlags;
|
||||
cparams.dynamic_vcaches = afsd_dynamic_vcaches;
|
||||
#ifdef notdef
|
||||
cparams.inodes = inodes;
|
||||
#endif
|
||||
@ -2445,6 +2469,7 @@ main(int argc, char **argv)
|
||||
cmd_AddParm(ts, "-settime", CMD_FLAG, CMD_OPTIONAL,
|
||||
"set the time");
|
||||
cmd_AddParm(ts, "-rxpck", CMD_SINGLE, CMD_OPTIONAL, "set rx_extraPackets to this value");
|
||||
cmd_AddParm(ts, "-disable-dynamic-vcaches", CMD_FLAG, CMD_OPTIONAL, "disable stat/vcache cache growing as needed");
|
||||
return (cmd_Dispatch(argc, argv));
|
||||
}
|
||||
|
||||
|
@ -141,6 +141,7 @@ struct afs_cacheParams {
|
||||
afs_int32 memCacheFlag;
|
||||
afs_int32 inodes;
|
||||
afs_int32 users;
|
||||
afs_int32 dynamic_vcaches;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -33,7 +33,7 @@
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits */
|
||||
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#define AFS_SYSCALL 137
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -25,6 +25,7 @@
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
@ -32,6 +32,7 @@
|
||||
#define AFS_SYSCALL 137
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -28,6 +28,7 @@
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#ifdef AFS_LARGEFILE_ENV
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_64BIT_ENV 1
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -41,6 +41,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#include <linux/init.h>
|
||||
|
@ -23,6 +23,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#define AFS_SYSCALL 137
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -25,6 +25,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#define AFS_SYSCALL 137
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -35,6 +35,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -37,6 +37,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
#define AFS_64BIT_KERNEL 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
#define AFS_LINUX_64BIT_KERNEL 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */
|
||||
#define AFS_32BIT_USR_ENV 1 /* user level processes are 32bit */
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -39,6 +39,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_32BIT_USR_ENV 1
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -41,6 +41,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_32BIT_USR_ENV 1
|
||||
#define AFS_64BITPOINTER_ENV 1 /* pointers are 64 bits. */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#define AFS_SYSCALL 227
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -34,6 +34,7 @@
|
||||
#define AFS_64BIT_CLIENT 1
|
||||
#define AFS_64BIT_IOPS_ENV 1
|
||||
#define AFS_NAMEI_ENV 1 /* User space interface to file system */
|
||||
#define AFS_MAXVCOUNT_ENV 1
|
||||
|
||||
#if defined(__KERNEL__) && !defined(KDUMP_KERNEL)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user