8 checkarena(Arena *arena, int scan, int fix)
13 if(verbose && arena->memstats.clumps)
16 old = arena->memstats;
19 arena->memstats.used = 0;
20 arena->memstats.clumps = 0;
21 arena->memstats.cclumps = 0;
22 arena->memstats.uncsize = 0;
27 e = syncarena(arena, 0, 1000, 0, fix);
31 if(verbose && arena->memstats.clumps)
34 if(verbose && arena->memstats.clumps)
38 if(arena->memstats.used != old.used
39 || arena->memstats.clumps != old.clumps
40 || arena->memstats.cclumps != old.cclumps
41 || arena->memstats.uncsize != old.uncsize){
42 fprint(2, "%s: incorrect arena header fields\n", arena->name);
50 fprint(2, "%s: writing fixed arena header fields\n", arena->name);
51 arena->diskstats = arena->memstats;
52 if(wbarena(arena) < 0)
53 fprint(2, "arena header write failed: %r\n");
60 fprint(2, "usage: checkarenas [-afv] file [arenaname...]\n");
65 should(char *name, int argc, char **argv)
72 if(strcmp(name, argv[i]) == 0)
78 threadmain(int argc, char *argv[])
113 part = initpart(file, ORDWR|ODIRECT);
115 sysfatal("can't open partition %s: %r", file);
117 ap = initarenapart(part);
119 sysfatal("can't initialize arena partition in %s: %r", file);
122 printarenapart(2, ap);
126 initdcache(8 * MaxDiskBlock);
128 for(i = 0; i < ap->narenas; i++)
129 if(should(ap->arenas[i]->name, argc, argv))
130 checkarena(ap->arenas[i], scan, fix);