linux: defer vcache evictions when sleep would be needed
[openafs.git] / src / afs / afs_vcache.c
index 2d99644..d96bfc0 100644 (file)
@@ -77,7 +77,7 @@ afs_int32 afs_bulkStatsLost;
 int afs_norefpanic = 0;
 
 
-/* Disk backed vcache definitions 
+/* Disk backed vcache definitions
  * Both protected by xvcache */
 static int afs_nextVcacheSlot = 0;
 static struct afs_slotlist *afs_freeSlotList = NULL;
@@ -87,7 +87,7 @@ static afs_int32 afs_QueueVCB(struct vcache *avc);
 
 /*!
  * Generate an index into the hash table for a given Fid.
- * \param fid 
+ * \param fid
  * \return The hash value.
  */
 static int
@@ -205,7 +205,8 @@ afs_FlushVCache(struct vcache *avc, int *slept)
     vn_reinit(AFSTOV(avc));
 #endif
     afs_FreeAllAxs(&(avc->Access));
-    afs_QueueVCB(avc);
+    if (!afs_shuttingdown)
+       afs_QueueVCB(avc);
     ObtainWriteLock(&afs_xcbhash, 460);
     afs_DequeueCallback(avc);  /* remove it from queued callbacks list */
     avc->f.states &= ~(CStatd | CUnique);
@@ -258,7 +259,7 @@ afs_FlushVCache(struct vcache *avc, int *slept)
 /*!
  *  The core of the inactive vnode op for all but IRIX.
  *
- * \param avc 
+ * \param avc
  * \param acred
  */
 void
@@ -297,7 +298,7 @@ static struct afs_cbr *afs_cbrHeads[16];
 struct afs_cbr *
 afs_AllocCBR(void)
 {
-    register struct afs_cbr *tsp;
+    struct afs_cbr *tsp;
     int i;
 
     if (!afs_cbrSpace) {
@@ -311,9 +312,8 @@ afs_AllocCBR(void)
            afs_stats_cmperf.CallBackFlushes++;
        } else {
            /* try allocating */
-           tsp =
-               (struct afs_cbr *)afs_osi_Alloc(AFS_NCBRS *
-                                               sizeof(struct afs_cbr));
+           tsp = afs_osi_Alloc(AFS_NCBRS * sizeof(struct afs_cbr));
+           osi_Assert(tsp != NULL);
            for (i = 0; i < AFS_NCBRS - 1; i++) {
                tsp[i].next = &tsp[i + 1];
                tsp[i].dynalloc = 0;
@@ -341,7 +341,7 @@ afs_AllocCBR(void)
  * \rerurn 0
  */
 int
-afs_FreeCBR(register struct afs_cbr *asp)
+afs_FreeCBR(struct afs_cbr *asp)
 {
     *(asp->pprev) = asp->next;
     if (asp->next)
@@ -360,6 +360,39 @@ afs_FreeCBR(register struct afs_cbr *asp)
     return 0;
 }
 
+static void
+FlushAllVCBs(struct rx_connection **rxconns, int nconns, int nservers,
+            struct afs_conn **conns, struct srvAddr **addrs)
+{
+    afs_int32 *results;
+    afs_int32 i;
+
+    results = afs_osi_Alloc(nservers * sizeof (afs_int32));
+    osi_Assert(results != NULL);
+
+    AFS_GUNLOCK();
+    multi_Rx(rxconns,nconns)
+    {
+        multi_RXAFS_GiveUpAllCallBacks();
+        results[multi_i] = multi_error;
+    } multi_End;
+    AFS_GLOCK();
+
+    /*
+     * Freeing the CBR will unlink it from the server's CBR list
+     * do it here, not in the loop, because a dynamic CBR will call
+     * into the memory management routines.
+     */
+    for ( i = 0 ; i < nconns ; i++ ) {
+       if (results[i] == 0) {
+           /* Unchain all of them */
+           while (addrs[i]->server->cbrs)
+               afs_FreeCBR(addrs[i]->server->cbrs);
+       }
+    }
+    afs_osi_Free(results, nservers * sizeof(afs_int32));
+}
+
 /*!
  *   Flush all queued callbacks to all servers.
  *
@@ -384,13 +417,27 @@ afs_FlushVCBs(afs_int32 lockit)
     struct afs_conn *tc;
     int safety1, safety2, safety3;
     XSTATS_DECLS;
+
+    if (AFS_IS_DISCONNECTED)
+       return ENETDOWN;
+
     if ((code = afs_InitReq(&treq, afs_osi_credp)))
        return code;
     treq.flags |= O_NONBLOCK;
     tfids = afs_osi_Alloc(sizeof(struct AFSFid) * AFS_MAXCBRSCALL);
+    osi_Assert(tfids != NULL);
 
     if (lockit)
        ObtainWriteLock(&afs_xvcb, 273);
+    /*
+     * Shutting down.
+     * First, attempt a multi across everything, all addresses
+     * for all servers we know of.
+     */
+
+    if (lockit == 2)
+       afs_LoopServers(2, NULL, 0, FlushAllVCBs, NULL);
+
     ObtainReadLock(&afs_xserver);
     for (i = 0; i < NSERVERS; i++) {
        for (safety1 = 0, tsp = afs_servers[i];
@@ -574,13 +621,13 @@ afs_RemoveVCB(struct VenusFid *afid)
     ReleaseWriteLock(&afs_xvcb);
 }
 
-void 
+void
 afs_FlushReclaimedVcaches(void)
 {
 #if !defined(AFS_LINUX22_ENV)
     struct vcache *tvc;
     int code, fv_slept;
-    struct vcache *tmpReclaimedVCList = NULL;  
+    struct vcache *tmpReclaimedVCList = NULL;
 
     ObtainWriteLock(&afs_xvreclaim, 76);
     while (ReclaimedVCList) {
@@ -611,7 +658,7 @@ afs_FlushReclaimedVcaches(void)
           afs_osi_Wakeup(&tvc->f.states);
        }
     }
-    if (tmpReclaimedVCList) 
+    if (tmpReclaimedVCList)
        ReclaimedVCList = tmpReclaimedVCList;
 
     ReleaseWriteLock(&afs_xvreclaim);
@@ -651,7 +698,7 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
     afs_int32 i, loop;
     struct vcache *tvc;
     struct afs_q *tq, *uq;
-    int fv_slept;
+    int fv_slept, defersleep = 0;
     afs_int32 target = anumber;
 
     i = 0;
@@ -671,7 +718,7 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
        }
 
        fv_slept = 0;
-       if (osi_TryEvictVCache(tvc, &fv_slept))
+       if (osi_TryEvictVCache(tvc, &fv_slept, defersleep))
            anumber--;
 
        if (fv_slept) {
@@ -681,8 +728,14 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
            i = 0;
            continue;   /* start over - may have raced. */
        }
-       if (tq == uq)
+       if (tq == uq) {
+           if (anumber && !defersleep) {
+               defersleep = 1;
+               tq = VLRU.prev;
+               continue;
+           }
            break;
+       }
     }
     if (!afsd_dynamic_vcaches && anumber == target) {
        afs_warn("afs_ShakeLooseVCaches: warning none freed, using %d of %d\n",
@@ -695,7 +748,7 @@ afs_ShakeLooseVCaches(afs_int32 anumber)
 /* Alloc new vnode. */
 
 static struct vcache *
-afs_AllocVCache(void) 
+afs_AllocVCache(void)
 {
     struct vcache *tvc;
 
@@ -716,7 +769,7 @@ afs_AllocVCache(void)
      */
     if (afs_freeSlotList != NULL) {
        struct afs_slotlist *tmp;
-   
+
        tvc->diskSlot = afs_freeSlotList->slot;
        tmp = afs_freeSlotList;
        afs_freeSlotList = tmp->next;
@@ -797,7 +850,7 @@ afs_NewVCache_int(struct VenusFid *afid, struct server *serverp, int seq)
     afs_FlushReclaimedVcaches();
 
 #if defined(AFS_LINUX22_ENV)
-    if(!afsd_dynamic_vcaches) {
+    if(!afsd_dynamic_vcaches && afs_vcount >= afs_maxvcount) {
        afs_ShakeLooseVCaches(anumber);
        if (afs_vcount >= afs_maxvcount) {
            afs_warn("afs_NewVCache - none freed\n");
@@ -817,6 +870,7 @@ afs_NewVCache_int(struct VenusFid *afid, struct server *serverp, int seq)
        tvc = freeVCList;       /* take from free list */
        freeVCList = tvc->nextfree;
        tvc->nextfree = NULL;
+       afs_vcount++; /* balanced by FlushVCache */
     } /* end of if (!freeVCList) */
 
 #endif /* AFS_LINUX22_ENV */
@@ -837,7 +891,7 @@ afs_NewVCache_int(struct VenusFid *afid, struct server *serverp, int seq)
     tvc->hnext = afs_vhashT[i];
     afs_vhashT[i] = tvc;
     QAdd(&afs_vhashTV[j], &tvc->vhashq);
-    
+
     if ((VLRU.next->prev != &VLRU) || (VLRU.prev->next != &VLRU)) {
         refpanic("NewVCache VLRU inconsistent");
     }
@@ -897,12 +951,12 @@ afs_NewBulkVCache(struct VenusFid *afid, struct server *serverp, int seq)
  * \param doflocks : Do we handle flocks?
  */
 void
-afs_FlushActiveVcaches(register afs_int32 doflocks)
+afs_FlushActiveVcaches(afs_int32 doflocks)
 {
-    register struct vcache *tvc;
-    register int i;
-    register struct afs_conn *tc;
-    register afs_int32 code;
+    struct vcache *tvc;
+    int i;
+    struct afs_conn *tc;
+    afs_int32 code;
     afs_ucred_t *cred = NULL;
     struct vrequest treq, ureq;
     struct AFSVolSync tsync;
@@ -1058,9 +1112,9 @@ afs_FlushActiveVcaches(register afs_int32 doflocks)
  */
 
 /*!
- * 
+ *
  *   Make sure a cache entry is up-to-date status-wise.
- *   
+ *
  *   NOTE: everywhere that calls this can potentially be sped up
  *       by checking CStatd first, and avoiding doing the InitReq
  *       if this is up-to-date.
@@ -1076,7 +1130,7 @@ afs_FlushActiveVcaches(register afs_int32 doflocks)
 int
 afs_VerifyVCache2(struct vcache *avc, struct vrequest *areq)
 {
-    register struct vcache *tvc;
+    struct vcache *tvc;
 
     AFS_STATCNT(afs_VerifyVCache);
 
@@ -1124,8 +1178,8 @@ afs_VerifyVCache2(struct vcache *avc, struct vrequest *areq)
  *
  */
 static void
-afs_SimpleVStat(register struct vcache *avc,
-               register struct AFSFetchStatus *astat, struct vrequest *areq)
+afs_SimpleVStat(struct vcache *avc,
+               struct AFSFetchStatus *astat, struct vrequest *areq)
 {
     afs_size_t length;
     AFS_STATCNT(afs_SimpleVStat);
@@ -1217,8 +1271,8 @@ afs_SimpleVStat(register struct vcache *avc,
  */
 
 int
-afs_WriteVCache(register struct vcache *avc,
-               register struct AFSStoreStatus *astatus,
+afs_WriteVCache(struct vcache *avc,
+               struct AFSStoreStatus *astatus,
                struct vrequest *areq)
 {
     afs_int32 code;
@@ -1280,8 +1334,8 @@ afs_WriteVCache(register struct vcache *avc,
  * \note Must be called with a shared lock on the vnode
  */
 int
-afs_WriteVCacheDiscon(register struct vcache *avc,
-                     register struct AFSStoreStatus *astatus,
+afs_WriteVCacheDiscon(struct vcache *avc,
+                     struct AFSStoreStatus *astatus,
                      struct vattr *attrs)
 {
     afs_int32 code = 0;
@@ -1351,7 +1405,7 @@ afs_WriteVCacheDiscon(register struct vcache *avc,
  * Copy astat block into vcache info
  *
  * \note This code may get dataversion and length out of sync if the file has
- * been modified.  This is less than ideal.  I haven't thought about it sufficiently 
+ * been modified.  This is less than ideal.  I haven't thought about it sufficiently
  * to be certain that it is adequate.
  *
  * \note Environment: Must be called under a write lock
@@ -1361,8 +1415,8 @@ afs_WriteVCacheDiscon(register struct vcache *avc,
  * \param areq Ptr to associated request.
  */
 void
-afs_ProcessFS(register struct vcache *avc,
-             register struct AFSFetchStatus *astat, struct vrequest *areq)
+afs_ProcessFS(struct vcache *avc,
+             struct AFSFetchStatus *astat, struct vrequest *areq)
 {
     afs_size_t length;
     AFS_STATCNT(afs_ProcessFS);
@@ -1447,18 +1501,18 @@ afs_ProcessFS(register struct vcache *avc,
 /*!
  * Get fid from server.
  *
- * \param afid 
+ * \param afid
  * \param areq Request to be passed on.
  * \param name Name of ?? to lookup.
  * \param OutStatus Fetch status.
- * \param CallBackp 
+ * \param CallBackp
  * \param serverp
  * \param tsyncp
  *
  * \return Success status of operation.
  */
 int
-afs_RemoteLookup(register struct VenusFid *afid, struct vrequest *areq,
+afs_RemoteLookup(struct VenusFid *afid, struct vrequest *areq,
                 char *name, struct VenusFid *nfid,
                 struct AFSFetchStatus *OutStatusp,
                 struct AFSCallBack *CallBackp, struct server **serverp,
@@ -1466,16 +1520,16 @@ afs_RemoteLookup(register struct VenusFid *afid, struct vrequest *areq,
 {
     afs_int32 code;
     afs_uint32 start;
-    register struct afs_conn *tc;
+    struct afs_conn *tc;
     struct AFSFetchStatus OutDirStatus;
     XSTATS_DECLS;
     if (!name)
-       name = "";              /* XXX */    
+       name = "";              /* XXX */
     do {
        tc = afs_Conn(afid, areq, SHARED_LOCK);
        if (tc) {
            if (serverp)
-               *serverp = tc->srvr->server;
+               *serverp = tc->parent->srvr->server;
            start = osi_Time();
            XSTATS_START_TIME(AFS_STATS_FS_RPCIDX_XLOOKUP);
            RX_AFS_GUNLOCK();
@@ -1523,19 +1577,19 @@ afs_RemoteLookup(register struct VenusFid *afid, struct vrequest *areq,
  *     of a parent dir cache entry, given a file (to check its access
  *     control list).  It also allows renames to be handled easily by
  *     locking directories in a constant order.
- * 
+ *
  * \note NB.  NewVCache -> FlushVCache presently (4/10/95) drops the xvcache lock.
  *
  * \note Might have a vcache structure already, which must
- *  already be held by the caller 
+ *  already be held by the caller
  */
 struct vcache *
-afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
+afs_GetVCache(struct VenusFid *afid, struct vrequest *areq,
              afs_int32 * cached, struct vcache *avc)
 {
 
     afs_int32 code, newvcache = 0;
-    register struct vcache *tvc;
+    struct vcache *tvc;
     struct volume *tvp;
     afs_int32 retry;
 
@@ -1617,12 +1671,12 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
        if (!iheldthelock)
            vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, current_proc());
        /* this is messy. we can call fsync which will try to reobtain this */
-       if (VTOAFS(vp) == tvc) 
+       if (VTOAFS(vp) == tvc)
          ReleaseWriteLock(&tvc->lock);
        if (UBCINFOEXISTS(vp)) {
          vinvalbuf(vp, V_SAVE, &afs_osi_cred, current_proc(), PINOD, 0);
        }
-       if (VTOAFS(vp) == tvc) 
+       if (VTOAFS(vp) == tvc)
          ObtainWriteLock(&tvc->lock, 954);
        if (!iheldthelock)
            VOP_UNLOCK(vp, LK_EXCLUSIVE, current_proc());
@@ -1644,7 +1698,9 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
        iheldthelock = VOP_ISLOCKED(vp, curthread);
        if (!iheldthelock)
            vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread);
+       AFS_GUNLOCK();
        vinvalbuf(vp, V_SAVE, curthread, PINOD, 0);
+       AFS_GLOCK();
        if (!iheldthelock)
            VOP_UNLOCK(vp, LK_EXCLUSIVE, curthread);
 #elif defined(AFS_FBSD_ENV)
@@ -1764,9 +1820,9 @@ afs_GetVCache(register struct VenusFid *afid, struct vrequest *areq,
  * Lookup a vcache by fid. Look inside the cache first, if not
  * there, lookup the file on the server, and then get it's fresh
  * cache entry.
- * 
+ *
  * \param afid
- * \param areq 
+ * \param areq
  * \param cached Is element cached? If NULL, don't answer.
  * \param adp
  * \param aname
@@ -1779,7 +1835,7 @@ afs_LookupVCache(struct VenusFid *afid, struct vrequest *areq,
 {
     afs_int32 code, now, newvcache = 0;
     struct VenusFid nfid;
-    register struct vcache *tvc;
+    struct vcache *tvc;
     struct volume *tvp;
     struct AFSFetchStatus OutStatus;
     struct AFSCallBack CallBack;
@@ -1829,13 +1885,13 @@ afs_LookupVCache(struct VenusFid *afid, struct vrequest *areq,
     nfid = *afid;
     now = osi_Time();
     origCBs = afs_allCBs;      /* if anything changes, we don't have a cb */
-    
+
     if (AFS_IS_DISCONNECTED) {
        /* printf("Network is down in afs_LookupVcache\n"); */
         code = ENETDOWN;
-    } else 
+    } else
         code =
-           afs_RemoteLookup(&adp->f.fid, areq, aname, &nfid, &OutStatus, 
+           afs_RemoteLookup(&adp->f.fid, areq, aname, &nfid, &OutStatus,
                             &CallBack, &serverp, &tsync);
 
 #if    defined(AFS_SGI_ENV) && !defined(AFS_SGI53_ENV)
@@ -1953,7 +2009,7 @@ afs_GetRootVCache(struct VenusFid *afid, struct vrequest *areq,
     afs_int32 getNewFid = 0;
     afs_uint32 start;
     struct VenusFid nfid;
-    register struct vcache *tvc;
+    struct vcache *tvc;
     struct server *serverp = 0;
     struct AFSFetchStatus OutStatus;
     struct AFSCallBack CallBack;
@@ -2250,7 +2306,7 @@ afs_FetchStatus(struct vcache * avc, struct VenusFid * afid,
 {
     int code;
     afs_uint32 start = 0;
-    register struct afs_conn *tc;
+    struct afs_conn *tc;
     struct AFSCallBack CallBack;
     struct AFSVolSync tsync;
     XSTATS_DECLS;
@@ -2258,7 +2314,7 @@ afs_FetchStatus(struct vcache * avc, struct VenusFid * afid,
        tc = afs_Conn(afid, areq, SHARED_LOCK);
        avc->dchint = NULL;     /* invalidate hints */
        if (tc) {
-           avc->callback = tc->srvr->server;
+           avc->callback = tc->parent->srvr->server;
            start = osi_Time();
            XSTATS_START_TIME(AFS_STATS_FS_RPCIDX_FETCHSTATUS);
            RX_AFS_GUNLOCK();
@@ -2313,13 +2369,13 @@ afs_FetchStatus(struct vcache * avc, struct VenusFid * afid,
  *     Nothing interesting.
  */
 void
-afs_StuffVcache(register struct VenusFid *afid,
+afs_StuffVcache(struct VenusFid *afid,
                struct AFSFetchStatus *OutStatus,
-               struct AFSCallBack *CallBack, register struct afs_conn *tc,
+               struct AFSCallBack *CallBack, struct afs_conn *tc,
                struct vrequest *areq)
 {
-    register afs_int32 code, i, newvcache = 0;
-    register struct vcache *tvc;
+    afs_int32 code, i, newvcache = 0;
+    struct vcache *tvc;
     struct AFSVolSync tsync;
     struct volume *tvp;
     struct axscache *ac;
@@ -2447,7 +2503,7 @@ afs_StuffVcache(register struct VenusFid *afid,
  * \note Environment: Nothing interesting.
  */
 void
-afs_PutVCache(register struct vcache *avc)
+afs_PutVCache(struct vcache *avc)
 {
     AFS_STATCNT(afs_PutVCache);
 #ifdef AFS_DARWIN80_ENV
@@ -2467,9 +2523,9 @@ afs_PutVCache(register struct vcache *avc)
 /*!
  * Reset a vcache entry, so local contents are ignored, and the
  * server will be reconsulted next time the vcache is used
- * 
+ *
  * \param avc Pointer to the cache entry to reset
- * \param acred 
+ * \param acred
  *
  * \note avc must be write locked on entry
  */
@@ -2496,7 +2552,7 @@ afs_ResetVCache(struct vcache *avc, afs_ucred_t *acred)
  * \param vcache Enter sleep state.
  * \param flag Determines what locks to use.
  *
- * \return 
+ * \return
  */
 static void
 findvc_sleep(struct vcache *avc, int flag)
@@ -2588,7 +2644,7 @@ struct vcache *
 afs_FindVCache(struct VenusFid *afid, afs_int32 * retry, afs_int32 flag)
 {
 
-    register struct vcache *tvc;
+    struct vcache *tvc;
     afs_int32 i;
 #ifdef AFS_DARWIN80_ENV
     vnode_t tvp;
@@ -2716,7 +2772,7 @@ int afs_duplicate_nfs_fids = 0;
 afs_int32
 afs_NFSFindVCache(struct vcache **avcp, struct VenusFid *afid)
 {
-    register struct vcache *tvc;
+    struct vcache *tvc;
     afs_int32 i;
     afs_int32 count = 0;
     struct vcache *found_tvc = NULL;
@@ -2788,6 +2844,7 @@ afs_NFSFindVCache(struct vcache **avcp, struct VenusFid *afid)
     tvc = found_tvc;
     /* should I have a read lock on the vnode here? */
     if (tvc) {
+#ifndef AFS_DARWIN80_ENV
 #if defined(AFS_SGI_ENV) && !defined(AFS_SGI53_ENV)
        afs_int32 retry = 0;
        osi_vnhold(tvc, &retry);
@@ -2801,6 +2858,7 @@ afs_NFSFindVCache(struct vcache **avcp, struct VenusFid *afid)
 #else
        osi_vnhold(tvc, (int *)0);      /* already held, above */
 #endif
+#endif
        /*
         * We obtained the xvcache lock above.
         */
@@ -2857,7 +2915,7 @@ void
 afs_vcacheInit(int astatSize)
 {
 #if !defined(AFS_LINUX22_ENV)
-    register struct vcache *tvp;
+    struct vcache *tvp;
 #endif
     int i;
     if (!afs_maxvcount) {
@@ -2872,7 +2930,8 @@ afs_vcacheInit(int astatSize)
 
 #if !defined(AFS_LINUX22_ENV)
     /* Allocate and thread the struct vcache entries */
-    tvp = (struct vcache *)afs_osi_Alloc(astatSize * sizeof(struct vcache));
+    tvp = afs_osi_Alloc(astatSize * sizeof(struct vcache));
+    osi_Assert(tvp != NULL);
     memset(tvp, 0, sizeof(struct vcache) * astatSize);
 
     Initial_freeVCList = tvp;
@@ -2924,8 +2983,8 @@ shutdown_vcache(void)
      */
 
     {
-       register struct afs_q *tq, *uq = NULL;
-       register struct vcache *tvc;
+       struct afs_q *tq, *uq = NULL;
+       struct vcache *tvc;
        for (tq = VLRU.prev; tq != &VLRU; tq = uq) {
            tvc = QTOV(tq);
            uq = QPrev(tq);
@@ -3018,9 +3077,9 @@ afs_DisconGiveUpCallbacks(void)
     int i;
     struct vcache *tvc;
     int nq=0;
-            
+
     ObtainWriteLock(&afs_xvcache, 1002); /* XXX - should be a unique number */
-    
+
     /* Somehow, walk the set of vcaches, with each one coming out as tvc */
     for (i = 0; i < VCSIZE; i++) {
         for (tvc = afs_vhashT[i]; tvc; tvc = tvc->hnext) {
@@ -3033,14 +3092,14 @@ afs_DisconGiveUpCallbacks(void)
 
     ReleaseWriteLock(&afs_xvcache);
 
-    afs_FlushVCBs(1);
+    afs_FlushVCBs(2);
 }
 
 /*!
  *
  * Clear the Statd flag from all vcaches
  *
- * This function removes the Statd flag from all vcaches. It's used by 
+ * This function removes the Statd flag from all vcaches. It's used by
  * disconnected mode to tidy up during reconnection
  *
  */
@@ -3049,7 +3108,7 @@ afs_ClearAllStatdFlag(void)
 {
     int i;
     struct vcache *tvc;
-   
+
     ObtainWriteLock(&afs_xvcache, 715);
 
     for (i = 0; i < VCSIZE; i++) {