STABLE14-dynamic-vcache-allocation-20090319
authorDerrick Brashear <shadow@dementia.org>
Fri, 20 Mar 2009 02:32:56 +0000 (02:32 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 20 Mar 2009 02:32:56 +0000 (02:32 +0000)
LICENSE IPL10
FIXES 124334

add dynamic allocation of vcaches when possible (currently just for linux)

(cherry picked from commit e59b81c984652f7570708831d8b36bdd42f98cf8)

38 files changed:
doc/man-pages/pod8/afsd.pod
src/afs/afs_call.c
src/afs/afs_cbqueue.c
src/afs/afs_daemons.c
src/afs/afs_init.c
src/afs/afs_prototypes.h
src/afs/afs_vcache.c
src/afsd/afsd.c
src/config/afs_args.h
src/config/param.alpha_linux_22.h
src/config/param.alpha_linux_24.h
src/config/param.alpha_linux_26.h
src/config/param.amd64_linux24.h
src/config/param.amd64_linux26.h
src/config/param.i386_linux22.h
src/config/param.i386_linux24.h
src/config/param.i386_linux26.h
src/config/param.i386_umlinux22.h
src/config/param.i386_umlinux24.h
src/config/param.i386_umlinux26.h
src/config/param.ia64_linux24.h
src/config/param.ia64_linux26.h
src/config/param.parisc_linux24.h
src/config/param.ppc64_linux24.h
src/config/param.ppc64_linux26.h
src/config/param.ppc_linux22.h
src/config/param.ppc_linux24.h
src/config/param.ppc_linux26.h
src/config/param.s390_linux22.h
src/config/param.s390_linux24.h
src/config/param.s390_linux26.h
src/config/param.s390x_linux24.h
src/config/param.s390x_linux26.h
src/config/param.sparc64_linux22.h
src/config/param.sparc64_linux24.h
src/config/param.sparc64_linux26.h
src/config/param.sparc_linux22.h
src/config/param.sparc_linux24.h

index 8d0f54e..d46c35e 100644 (file)
@@ -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
index 57b1b8a..0e4c4d7 100644 (file)
@@ -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;
index 87cb5bc..810afab 100644 (file)
@@ -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)
index 9e042fd..97112fa 100644 (file)
@@ -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) {
index cfbace7..45638d4 100644 (file)
@@ -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;
index f83484b..210599b 100644 (file)
@@ -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);
index 6b11d1a..515a0dd 100644 (file)
@@ -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);
-
-    afs_FlushReclaimedVcaches();
+    /* Should probably deal better */
+    if (!ISAFS_GLOCK()) {
+       haveGlock = 0;
+       AFS_GLOCK();
+    }
 
-#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
-}
+
+    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
-    AFS_GUNLOCK();
-    if (getnewvnode(MOUNT_AFS, &Afs_vnodeops, &nvc)) {
-       /* What should we do ???? */
-       osi_Panic("afs_NewVCache: no more vnodes");
+    /* 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
     }
-    AFS_GLOCK();
+#endif /* AFS_SGI_ENV */
+#endif
+    return tvc;
+}
 
-    tvc = nvc;
-    tvc->nextfree = NULL;
+/*!
+ *   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
-    afs_vcount++;
+    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;
index fbf0d5f..d1ffc4c 100644 (file)
@@ -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));
 }
 
index d124efc..d3a06be 100644 (file)
@@ -141,6 +141,7 @@ struct afs_cacheParams {
     afs_int32 memCacheFlag;
     afs_int32 inodes;
     afs_int32 users;
+    afs_int32 dynamic_vcaches;
 };
 
 /*
index 2039895..e41b513 100644 (file)
@@ -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
index 4a565a6..0af6c66 100644 (file)
@@ -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
index f8213aa..f28ef67 100644 (file)
@@ -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)
 
index a2fd9c6..ea7a632 100644 (file)
@@ -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)
 
index 9d417c0..bda5542 100644 (file)
@@ -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)
 
index 686f957..00b6480 100644 (file)
@@ -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
index 4c31183..470d0fe 100644 (file)
@@ -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)
 
index 0f59404..a14c1b1 100644 (file)
@@ -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)
index 1193b94..8aa2617 100644 (file)
@@ -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
index 77e312e..8fc475d 100644 (file)
@@ -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
index 3a158ea..67491bc 100644 (file)
@@ -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)
 
index 47c3698..5a86649 100644 (file)
@@ -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)
 
index d534f06..579db61 100644 (file)
@@ -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>
index ad7506f..ae5d967 100644 (file)
@@ -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)
 
index 5222500..1b6f03a 100644 (file)
@@ -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)
 
index 97737ef..941eb7c 100644 (file)
@@ -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)
 
index bb0b72f..a3bbdea 100644 (file)
@@ -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
index 71da510..1883249 100644 (file)
@@ -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)
 
index efa4f2a..e7ad8f6 100644 (file)
@@ -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)
 
index 6d97e62..92cb7ef 100644 (file)
@@ -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
index 69130a7..aaaad85 100644 (file)
@@ -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)
 
index cf3ebf7..c9e7d40 100644 (file)
@@ -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)
 
index 49c7d93..616f3c1 100644 (file)
@@ -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)
 
index bb3bc85..3b112cd 100644 (file)
@@ -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)
 
index b7c0811..f50e619 100644 (file)
@@ -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
index 469ba18..3b2c066 100644 (file)
@@ -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)
 
index 438709d..d205554 100644 (file)
@@ -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)
 
index a1f3d97..f1189d0 100644 (file)
@@ -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
index 97585d7..0cb6c2a 100644 (file)
@@ -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)