tsilly cache hack, also fix vtfilewritebefore not to be so aggressive. - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit a1882dc1d0eeb8eb15614b28d3c11a3697bcd185
parent 7cb748941ecffdd66630ba463080cf44fcb62161
Author: rsc 
Date:   Thu, 17 Jun 2004 19:17:04 +0000

silly cache hack, also fix vtfilewritebefore not to be so aggressive.

Diffstat:
  M src/libventi/cache.c                |      20 ++++++++++++++++++--
  M src/libventi/file.c                 |      11 +++++++----

2 files changed, 25 insertions(+), 6 deletions(-)
---
diff --git a/src/libventi/cache.c b/src/libventi/cache.c
t@@ -39,6 +39,7 @@ struct VtCache
         int                nblock;
         uchar        *mem;        /* memory for all blocks and data */
         int                mode;
+        int                (*write)(VtConn*, uchar[VtScoreSize], uint, uchar*, int);
 };
 
 static void cachecheck(VtCache*);
t@@ -56,13 +57,13 @@ vtcachealloc(VtConn *z, int blocksize, ulong nblock, int mode)
         c->z = z;
         c->blocksize = (blocksize + 127) & ~127;
         c->nblock = nblock;
-
         c->nhash = nblock;
         c->hash = vtmallocz(nblock*sizeof(VtBlock*));
         c->heap = vtmallocz(nblock*sizeof(VtBlock*));
         c->block = vtmallocz(nblock*sizeof(VtBlock));
         c->mem = vtmallocz(nblock*c->blocksize);
         c->mode = mode;
+        c->write = vtwrite;
 
         p = c->mem;
         for(i=0; iwrite = write;
+}
+
 void
 vtcachefree(VtCache *c)
 {
t@@ -405,6 +419,8 @@ vtcacheglobal(VtCache *c, uchar score[VtScoreSize], int type)
 
         n = vtread(c->z, score, type, b->data, c->blocksize);
         if(n < 0){
+                werrstr("vtread %V: %r", score);
+abort();
                 b->iostate = BioVentiError;
                 vtblockput(b);
                 return nil;
t@@ -494,7 +510,7 @@ vtblockwrite(VtBlock *b)
 
         c = b->c;
         n = vtzerotruncate(b->type, b->data, c->blocksize);
-        if(vtwrite(c->z, score, b->type, b->data, n) < 0)
+        if(c->write(c->z, score, b->type, b->data, n) < 0)
                 return -1;
 
         memmove(b->score, score, VtScoreSize);
diff --git a/src/libventi/file.c b/src/libventi/file.c
t@@ -1222,10 +1222,13 @@ vtfileflushbefore(VtFile *r, u64int offset)
                          * if the rest of the block is already flushed,
                          * we can flush the whole block.
                          */
-                        ok = 1;
-                        for(; jdata+j*VtScoreSize) != NilBlock)
-                                        ok = 0;
+                        ok = 0;
+                        if(index[i] != index1[i]){
+                                ok = 1;
+                                for(; jdata+j*VtScoreSize) != NilBlock)
+                                                ok = 0;
+                        }
                 }
                 if(ok){
                         if(i == depth)