From 157e3374bbdf025974fa009eba2fd8aa037170ed Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 20 Mar 2009 02:32:56 +0000 Subject: [PATCH] STABLE14-dynamic-vcache-allocation-20090319 LICENSE IPL10 FIXES 124334 add dynamic allocation of vcaches when possible (currently just for linux) (cherry picked from commit e59b81c984652f7570708831d8b36bdd42f98cf8) --- doc/man-pages/pod8/afsd.pod | 8 + src/afs/afs_call.c | 3 +- src/afs/afs_cbqueue.c | 2 +- src/afs/afs_daemons.c | 20 ++- src/afs/afs_init.c | 12 +- src/afs/afs_prototypes.h | 2 +- src/afs/afs_vcache.c | 228 ++++++++++++++++++----------- src/afsd/afsd.c | 25 ++++ src/config/afs_args.h | 1 + src/config/param.alpha_linux_22.h | 1 + src/config/param.alpha_linux_24.h | 1 + src/config/param.alpha_linux_26.h | 2 +- src/config/param.amd64_linux24.h | 1 + src/config/param.amd64_linux26.h | 1 + src/config/param.i386_linux22.h | 1 + src/config/param.i386_linux24.h | 1 + src/config/param.i386_linux26.h | 1 + src/config/param.i386_umlinux22.h | 1 + src/config/param.i386_umlinux24.h | 1 + src/config/param.i386_umlinux26.h | 1 + src/config/param.ia64_linux24.h | 1 + src/config/param.ia64_linux26.h | 1 + src/config/param.parisc_linux24.h | 1 + src/config/param.ppc64_linux24.h | 1 + src/config/param.ppc64_linux26.h | 1 + src/config/param.ppc_linux22.h | 1 + src/config/param.ppc_linux24.h | 1 + src/config/param.ppc_linux26.h | 1 + src/config/param.s390_linux22.h | 1 + src/config/param.s390_linux24.h | 1 + src/config/param.s390_linux26.h | 1 + src/config/param.s390x_linux24.h | 1 + src/config/param.s390x_linux26.h | 1 + src/config/param.sparc64_linux22.h | 1 + src/config/param.sparc64_linux24.h | 1 + src/config/param.sparc64_linux26.h | 1 + src/config/param.sparc_linux22.h | 1 + src/config/param.sparc_linux24.h | 1 + 38 files changed, 235 insertions(+), 96 deletions(-) diff --git a/doc/man-pages/pod8/afsd.pod b/doc/man-pages/pod8/afsd.pod index 8d0f54ebb8..d46c35e2d6 100644 --- a/doc/man-pages/pod8/afsd.pod +++ b/doc/man-pages/pod8/afsd.pod @@ -29,6 +29,7 @@ B [B<-afsdb>] [B<-backuptree>] [B<-settime>] [B<-shutdown>] S<<< [B<-splitcache> >] >>> S<<< [B<-stat> >] >>> [B<-verbose>] + [B<-disable-dynamic-vcaches>] S<<< [B<-volumes> >] >>> [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 diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 57b1b8a9e1..0e4c4d78d6 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -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; diff --git a/src/afs/afs_cbqueue.c b/src/afs/afs_cbqueue.c index 87cb5bc553..810afab885 100644 --- a/src/afs/afs_cbqueue.c +++ b/src/afs/afs_cbqueue.c @@ -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) diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index 9e042fd8b3..97112fa3ed 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -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) { diff --git a/src/afs/afs_init.c b/src/afs/afs_init.c index cfbace7286..45638d4e45 100644 --- a/src/afs/afs_init.c +++ b/src/afs/afs_init.c @@ -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; diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index f83484bb1f..210599bc24 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -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); diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 6b11d1af40..515a0dd36a 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -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; diff --git a/src/afsd/afsd.c b/src/afsd/afsd.c index fbf0d5feea..d1ffc4cac3 100644 --- a/src/afsd/afsd.c +++ b/src/afsd/afsd.c @@ -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)); } diff --git a/src/config/afs_args.h b/src/config/afs_args.h index d124efce78..d3a06be4f9 100644 --- a/src/config/afs_args.h +++ b/src/config/afs_args.h @@ -141,6 +141,7 @@ struct afs_cacheParams { afs_int32 memCacheFlag; afs_int32 inodes; afs_int32 users; + afs_int32 dynamic_vcaches; }; /* diff --git a/src/config/param.alpha_linux_22.h b/src/config/param.alpha_linux_22.h index 20398953c2..e41b513ec4 100644 --- a/src/config/param.alpha_linux_22.h +++ b/src/config/param.alpha_linux_22.h @@ -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 diff --git a/src/config/param.alpha_linux_24.h b/src/config/param.alpha_linux_24.h index 4a565a6abb..0af6c66c6b 100644 --- a/src/config/param.alpha_linux_24.h +++ b/src/config/param.alpha_linux_24.h @@ -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 diff --git a/src/config/param.alpha_linux_26.h b/src/config/param.alpha_linux_26.h index f8213aac2c..f28ef6705b 100644 --- a/src/config/param.alpha_linux_26.h +++ b/src/config/param.alpha_linux_26.h @@ -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) diff --git a/src/config/param.amd64_linux24.h b/src/config/param.amd64_linux24.h index a2fd9c6afe..ea7a6326d2 100644 --- a/src/config/param.amd64_linux24.h +++ b/src/config/param.amd64_linux24.h @@ -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) diff --git a/src/config/param.amd64_linux26.h b/src/config/param.amd64_linux26.h index 9d417c0edd..bda55421bf 100644 --- a/src/config/param.amd64_linux26.h +++ b/src/config/param.amd64_linux26.h @@ -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) diff --git a/src/config/param.i386_linux22.h b/src/config/param.i386_linux22.h index 686f9573ba..00b6480711 100644 --- a/src/config/param.i386_linux22.h +++ b/src/config/param.i386_linux22.h @@ -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 diff --git a/src/config/param.i386_linux24.h b/src/config/param.i386_linux24.h index 4c31183a78..470d0fea86 100644 --- a/src/config/param.i386_linux24.h +++ b/src/config/param.i386_linux24.h @@ -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) diff --git a/src/config/param.i386_linux26.h b/src/config/param.i386_linux26.h index 0f59404ff5..a14c1b1ec4 100644 --- a/src/config/param.i386_linux26.h +++ b/src/config/param.i386_linux26.h @@ -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) diff --git a/src/config/param.i386_umlinux22.h b/src/config/param.i386_umlinux22.h index 1193b94972..8aa2617851 100644 --- a/src/config/param.i386_umlinux22.h +++ b/src/config/param.i386_umlinux22.h @@ -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 diff --git a/src/config/param.i386_umlinux24.h b/src/config/param.i386_umlinux24.h index 77e312e9e8..8fc475d7c9 100644 --- a/src/config/param.i386_umlinux24.h +++ b/src/config/param.i386_umlinux24.h @@ -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 diff --git a/src/config/param.i386_umlinux26.h b/src/config/param.i386_umlinux26.h index 3a158eaff2..67491bce35 100644 --- a/src/config/param.i386_umlinux26.h +++ b/src/config/param.i386_umlinux26.h @@ -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) diff --git a/src/config/param.ia64_linux24.h b/src/config/param.ia64_linux24.h index 47c3698002..5a866493a0 100644 --- a/src/config/param.ia64_linux24.h +++ b/src/config/param.ia64_linux24.h @@ -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) diff --git a/src/config/param.ia64_linux26.h b/src/config/param.ia64_linux26.h index d534f06c39..579db61b39 100644 --- a/src/config/param.ia64_linux26.h +++ b/src/config/param.ia64_linux26.h @@ -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 diff --git a/src/config/param.parisc_linux24.h b/src/config/param.parisc_linux24.h index ad7506f5e5..ae5d967f6c 100644 --- a/src/config/param.parisc_linux24.h +++ b/src/config/param.parisc_linux24.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) diff --git a/src/config/param.ppc64_linux24.h b/src/config/param.ppc64_linux24.h index 5222500b64..1b6f03aded 100644 --- a/src/config/param.ppc64_linux24.h +++ b/src/config/param.ppc64_linux24.h @@ -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) diff --git a/src/config/param.ppc64_linux26.h b/src/config/param.ppc64_linux26.h index 97737ef913..941eb7cdb1 100644 --- a/src/config/param.ppc64_linux26.h +++ b/src/config/param.ppc64_linux26.h @@ -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) diff --git a/src/config/param.ppc_linux22.h b/src/config/param.ppc_linux22.h index bb0b72f3f7..a3bbdea807 100644 --- a/src/config/param.ppc_linux22.h +++ b/src/config/param.ppc_linux22.h @@ -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 diff --git a/src/config/param.ppc_linux24.h b/src/config/param.ppc_linux24.h index 71da510f30..1883249722 100644 --- a/src/config/param.ppc_linux24.h +++ b/src/config/param.ppc_linux24.h @@ -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) diff --git a/src/config/param.ppc_linux26.h b/src/config/param.ppc_linux26.h index efa4f2acdb..e7ad8f6325 100644 --- a/src/config/param.ppc_linux26.h +++ b/src/config/param.ppc_linux26.h @@ -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) diff --git a/src/config/param.s390_linux22.h b/src/config/param.s390_linux22.h index 6d97e62810..92cb7ef27e 100644 --- a/src/config/param.s390_linux22.h +++ b/src/config/param.s390_linux22.h @@ -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 diff --git a/src/config/param.s390_linux24.h b/src/config/param.s390_linux24.h index 69130a7f4b..aaaad85b26 100644 --- a/src/config/param.s390_linux24.h +++ b/src/config/param.s390_linux24.h @@ -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) diff --git a/src/config/param.s390_linux26.h b/src/config/param.s390_linux26.h index cf3ebf7e12..c9e7d40fb8 100644 --- a/src/config/param.s390_linux26.h +++ b/src/config/param.s390_linux26.h @@ -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) diff --git a/src/config/param.s390x_linux24.h b/src/config/param.s390x_linux24.h index 49c7d93afd..616f3c1e65 100644 --- a/src/config/param.s390x_linux24.h +++ b/src/config/param.s390x_linux24.h @@ -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) diff --git a/src/config/param.s390x_linux26.h b/src/config/param.s390x_linux26.h index bb3bc85158..3b112cd966 100644 --- a/src/config/param.s390x_linux26.h +++ b/src/config/param.s390x_linux26.h @@ -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) diff --git a/src/config/param.sparc64_linux22.h b/src/config/param.sparc64_linux22.h index b7c0811085..f50e6199f9 100644 --- a/src/config/param.sparc64_linux22.h +++ b/src/config/param.sparc64_linux22.h @@ -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 diff --git a/src/config/param.sparc64_linux24.h b/src/config/param.sparc64_linux24.h index 469ba1842f..3b2c0662f0 100644 --- a/src/config/param.sparc64_linux24.h +++ b/src/config/param.sparc64_linux24.h @@ -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) diff --git a/src/config/param.sparc64_linux26.h b/src/config/param.sparc64_linux26.h index 438709dca8..d205554240 100644 --- a/src/config/param.sparc64_linux26.h +++ b/src/config/param.sparc64_linux26.h @@ -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) diff --git a/src/config/param.sparc_linux22.h b/src/config/param.sparc_linux22.h index a1f3d97b29..f1189d0297 100644 --- a/src/config/param.sparc_linux22.h +++ b/src/config/param.sparc_linux22.h @@ -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 diff --git a/src/config/param.sparc_linux24.h b/src/config/param.sparc_linux24.h index 97585d7be0..0cb6c2a50f 100644 --- a/src/config/param.sparc_linux24.h +++ b/src/config/param.sparc_linux24.h @@ -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)