summaryrefslogtreecommitdiffstats
path: root/src/cmd/venti/syncarena.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-18 05:25:09 +0000
committerrsc <devnull@localhost>2005-01-18 05:25:09 +0000
commitadbb83845c5d3cb02343d7613cfb8385aa909909 (patch)
tree6f2b79ae89f59d014cdbfb6a5bf5ded94bf775fa /src/cmd/venti/syncarena.c
parentd338028eeb45434dab651466dcd664091517e087 (diff)
downloadplan9port-adbb83845c5d3cb02343d7613cfb8385aa909909.tar.gz
plan9port-adbb83845c5d3cb02343d7613cfb8385aa909909.zip
remove venti for now
Diffstat (limited to 'src/cmd/venti/syncarena.c')
-rw-r--r--src/cmd/venti/syncarena.c165
1 files changed, 0 insertions, 165 deletions
diff --git a/src/cmd/venti/syncarena.c b/src/cmd/venti/syncarena.c
deleted file mode 100644
index 7ba83aa1..00000000
--- a/src/cmd/venti/syncarena.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include "stdinc.h"
-#include "dat.h"
-#include "fns.h"
-
-static int writeclumphead(Arena *arena, u64int aa, Clump *cl);
-static int writeclumpmagic(Arena *arena, u64int aa, u32int magic);
-
-int
-clumpinfocmp(ClumpInfo *c, ClumpInfo *d)
-{
- return c->type != d->type
- || c->size != d->size
- || c->uncsize != d->uncsize
- || scorecmp(c->score, d->score)!=0;
-}
-
-/*
- * synchronize the clump info directory with
- * with the clumps actually stored in the arena.
- * the directory should be at least as up to date
- * as the arena's trailer.
- *
- * checks/updates at most n clumps.
- *
- * returns 0 if ok, flags if error occurred
- */
-int
-syncarena(Arena *arena, u32int n, int zok, int fix)
-{
- ZBlock *lump;
- Clump cl;
- ClumpInfo ci;
- static ClumpInfo zci = { .type = -1 };
- u8int score[VtScoreSize];
- u64int uncsize, used, aa;
- u32int clump, clumps, cclumps, magic;
- int err, flush, broken;
-
- used = arena->used;
- clumps = arena->clumps;
- cclumps = arena->cclumps;
- uncsize = arena->uncsize;
-
- flush = 0;
- err = 0;
- for(; n; n--){
- aa = arena->used;
- clump = arena->clumps;
- magic = clumpmagic(arena, aa);
- if(magic == ClumpFreeMagic)
- break;
- if(magic != ClumpMagic){
- fprint(2, "illegal clump magic number=%#8.8ux at clump=%d\n", magic, clump);
- err |= SyncDataErr;
-//ZZZ write a zero here?
- if(0 && fix && writeclumpmagic(arena, aa, ClumpFreeMagic) < 0){
- fprint(2, "can't write corrected clump free magic: %r");
- err |= SyncFixErr;
- }
- break;
- }
- arena->clumps++;
-
- broken = 0;
- lump = loadclump(arena, aa, 0, &cl, score, 0);
- if(lump == nil){
- fprint(2, "clump=%d failed to read correctly: %r\n", clump);
- err |= SyncDataErr;
- }else if(cl.info.type != VtTypeCorrupt){
- scoremem(score, lump->data, cl.info.uncsize);
- if(scorecmp(cl.info.score, score) != 0){
- fprint(2, "clump=%d has mismatched score\n", clump);
- err |= SyncDataErr;
- broken = 1;
- }else if(vttypevalid(cl.info.type) < 0){
- fprint(2, "clump=%d has invalid type %d", clump, cl.info.type);
- err |= SyncDataErr;
- broken = 1;
- }
- if(broken && fix){
- cl.info.type = VtTypeCorrupt;
- if(writeclumphead(arena, aa, &cl) < 0){
- fprint(2, "can't write corrected clump header: %r");
- err |= SyncFixErr;
- }
- }
- }
- freezblock(lump);
- arena->used += ClumpSize + cl.info.size;
-
- if(!broken && readclumpinfo(arena, clump, &ci)<0){
- fprint(2, "arena directory read failed\n");
- broken = 1;
- }else if(!broken && clumpinfocmp(&ci, &cl.info)!=0){
- if(clumpinfocmp(&ci, &zci) == 0){
- err |= SyncCIZero;
- if(!zok)
- fprint(2, "unwritten clump info for clump=%d\n", clump);
- }else{
- err |= SyncCIErr;
- fprint(2, "bad clump info for clump=%d\n", clump);
- fprint(2, "\texpected score=%V type=%d size=%d uncsize=%d\n",
- cl.info.score, cl.info.type, cl.info.size, cl.info.uncsize);
- fprint(2, "\tfound score=%V type=%d size=%d uncsize=%d\n",
- ci.score, ci.type, ci.size, ci.uncsize);
- }
- broken = 1;
- }
- if(broken && fix){
- flush = 1;
- ci = cl.info;
- if(writeclumpinfo(arena, clump, &ci) < 0){
- fprint(2, "can't write correct clump directory: %r\n");
- err |= SyncFixErr;
- }
- }
-
- arena->uncsize += cl.info.uncsize;
- if(cl.info.size < cl.info.uncsize)
- arena->cclumps++;
- }
-
- if(flush){
- arena->wtime = now();
- if(arena->ctime == 0 && arena->clumps)
- arena->ctime = arena->wtime;
- if(flushciblocks(arena) < 0){
- fprint(2, "can't flush arena directory cache: %r");
- err |= SyncFixErr;
- }
- flushdcache();
- }
-
- if(used != arena->used
- || clumps != arena->clumps
- || cclumps != arena->cclumps
- || uncsize != arena->uncsize)
- err |= SyncHeader;
-
- return err;
-}
-
-static int
-writeclumphead(Arena *arena, u64int aa, Clump *cl)
-{
- ZBlock *zb;
- int bad;
-
- zb = alloczblock(ClumpSize, 0);
- if(zb == nil)
- return -1;
- bad = packclump(cl, zb->data)<0
- || writearena(arena, aa, zb->data, ClumpSize) != ClumpSize;
- freezblock(zb);
- return bad ? -1 : 0;
-}
-
-static int
-writeclumpmagic(Arena *arena, u64int aa, u32int magic)
-{
- u8int buf[U32Size];
-
- packmagic(magic, buf);
- return writearena(arena, aa, buf, U32Size) == U32Size;
-}