aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/venti/srv/syncindex0.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/venti/srv/syncindex0.c')
-rw-r--r--src/cmd/venti/srv/syncindex0.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/cmd/venti/srv/syncindex0.c b/src/cmd/venti/srv/syncindex0.c
index 12b69ed2..e214d712 100644
--- a/src/cmd/venti/srv/syncindex0.c
+++ b/src/cmd/venti/srv/syncindex0.c
@@ -121,6 +121,7 @@ int
syncindex(Index *ix, int fix, int mustflush, int check)
{
Arena *arena;
+ AState as;
u64int a;
u32int clump;
int i, e, e1, ok, ok1, flush;
@@ -130,7 +131,12 @@ syncindex(Index *ix, int fix, int mustflush, int check)
for(i = 0; i < ix->narenas; i++){
trace(TraceProc, "syncindex start %d", i);
arena = ix->arenas[i];
- clump = arena->memstats.clumps;
+ /*
+ * Syncarena will scan through the arena looking for blocks
+ * that have been forgotten. It will update arena->memstats.used,
+ * so save the currenct copy as the place to start the
+ * syncarenaindex scan.
+ */
a = arena->memstats.used;
e = syncarena(arena, ix->amap[i].start, TWID32, fix, fix);
e1 = e;
@@ -138,15 +144,23 @@ syncindex(Index *ix, int fix, int mustflush, int check)
e1 &= ~(SyncHeader|SyncCIZero|SyncCIErr);
if(e1 == SyncHeader)
fprint(2, "arena %s: header is out-of-date\n", arena->name);
+ clump = arena->diskstats.clumps;
if(e1)
ok = -1;
else{
ok1 = syncarenaindex(ix, arena, clump, a + ix->amap[i].start, fix, &flush, check);
if(ok1 < 0)
fprint(2, "syncarenaindex: %r\n");
+fprint(2, "arena %s: wbarena in syncindex\n", arena->name);
if(fix && ok1==0 && (e & SyncHeader) && wbarena(arena) < 0)
fprint(2, "arena=%s header write failed: %r\n", arena->name);
ok |= ok1;
+
+fprint(2, "arena %s: setdcachestate\n", arena->name);
+ as.arena = arena;
+ as.aa = ix->amap[i].start + arena->memstats.used;
+ as.stats = arena->memstats;
+ setdcachestate(&as);
}
}
if(missing || wrong)