Windows: validate buffer hash tables in cm_MergeStatus
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 14 Sep 2011 21:46:32 +0000 (17:46 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Thu, 15 Sep 2011 02:43:57 +0000 (19:43 -0700)
Change-Id: I1ff76513e9f2ba08bdeb988a19fec992b08310db
Reviewed-on: http://gerrit.openafs.org/5425
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>

src/WINNT/afsd/cm_buf.c
src/WINNT/afsd/cm_scache.c

index 483c0c2..73d64f8 100644 (file)
@@ -888,7 +888,7 @@ void buf_Recycle(cm_buf_t *bp)
 
         i = BUF_HASH(&bp->fid, &bp->offset);
         lbpp = &(cm_data.buf_scacheHashTablepp[i]);
-        for(tbp = *lbpp; tbp; lbpp = &tbp->hashp, tbp = *lbpp) {
+        for(tbp = *lbpp; tbp; lbpp = &tbp->hashp, tbp = tbp->hashp) {
             if (tbp == bp)
                 break;
         }
index db24b4f..687b0cd 100644 (file)
@@ -1646,11 +1646,14 @@ void cm_MergeStatus(cm_scache_t *dscp,
 
                     j = BUF_HASH(&bp->fid, &bp->offset);
                     lbpp = &(cm_data.buf_scacheHashTablepp[j]);
-                    for(tbp = *lbpp; tbp; lbpp = &tbp->hashp, tbp = *lbpp) {
+                    for(tbp = *lbpp; tbp; lbpp = &tbp->hashp, tbp = tbp->hashp) {
                         if (tbp == bp)
                             break;
                     }
 
+                    /* we better find it */
+                    osi_assertx(tbp != NULL, "cm_MergeStatus: buf_scacheHashTablepp table screwup");
+
                     *lbpp = bp->hashp; /* hash out */
                     bp->hashp = NULL;