Blame


1 a0d146ed 2005-07-12 devnull #include "stdinc.h"
2 a0d146ed 2005-07-12 devnull #include "dat.h"
3 a0d146ed 2005-07-12 devnull #include "fns.h"
4 a0d146ed 2005-07-12 devnull
5 45ac814c 2007-10-29 rsc static int
6 45ac814c 2007-10-29 rsc syncarenaindex(Arena *arena, u64int a0)
7 a0d146ed 2005-07-12 devnull {
8 45ac814c 2007-10-29 rsc int ok;
9 45ac814c 2007-10-29 rsc u32int clump;
10 45ac814c 2007-10-29 rsc u64int a;
11 45ac814c 2007-10-29 rsc ClumpInfo ci;
12 a0d146ed 2005-07-12 devnull IAddr ia;
13 45ac814c 2007-10-29 rsc AState as;
14 fa325e9b 2020-01-10 cross
15 45ac814c 2007-10-29 rsc if(arena->diskstats.clumps == arena->memstats.clumps)
16 45ac814c 2007-10-29 rsc return 0;
17 fa325e9b 2020-01-10 cross
18 45ac814c 2007-10-29 rsc memset(&as, 0, sizeof as);
19 45ac814c 2007-10-29 rsc as.arena = arena;
20 45ac814c 2007-10-29 rsc as.stats = arena->diskstats;
21 a0d146ed 2005-07-12 devnull
22 a0d146ed 2005-07-12 devnull ok = 0;
23 45ac814c 2007-10-29 rsc a = a0 + arena->diskstats.used;
24 45ac814c 2007-10-29 rsc for(clump=arena->diskstats.clumps; clump < arena->memstats.clumps; clump++){
25 45ac814c 2007-10-29 rsc if(readclumpinfo(arena, clump, &ci) < 0){
26 45ac814c 2007-10-29 rsc fprint(2, "%s: clump %d: cannot read clumpinfo\n",
27 45ac814c 2007-10-29 rsc arena->name, clump);
28 a0d146ed 2005-07-12 devnull ok = -1;
29 a0d146ed 2005-07-12 devnull break;
30 a0d146ed 2005-07-12 devnull }
31 a0d146ed 2005-07-12 devnull
32 45ac814c 2007-10-29 rsc ia.type = ci.type;
33 45ac814c 2007-10-29 rsc ia.size = ci.uncsize;
34 45ac814c 2007-10-29 rsc ia.addr = a;
35 45ac814c 2007-10-29 rsc ia.blocks = (ClumpSize + ci.size + (1 << ABlockLog) - 1) >> ABlockLog;
36 45ac814c 2007-10-29 rsc a += ClumpSize + ci.size;
37 a0d146ed 2005-07-12 devnull
38 45ac814c 2007-10-29 rsc as.stats.used += ClumpSize + ci.size;
39 45ac814c 2007-10-29 rsc as.stats.uncsize += ia.size;
40 45ac814c 2007-10-29 rsc as.stats.clumps++;
41 45ac814c 2007-10-29 rsc if(ci.uncsize > ci.size)
42 45ac814c 2007-10-29 rsc as.stats.cclumps++;
43 45ac814c 2007-10-29 rsc as.aa = a;
44 45ac814c 2007-10-29 rsc insertscore(ci.score, &ia, IEDirty, &as);
45 a0d146ed 2005-07-12 devnull }
46 45ac814c 2007-10-29 rsc flushdcache();
47 a0d146ed 2005-07-12 devnull return ok;
48 a0d146ed 2005-07-12 devnull }
49 a0d146ed 2005-07-12 devnull
50 a0d146ed 2005-07-12 devnull int
51 45ac814c 2007-10-29 rsc syncindex(Index *ix)
52 a0d146ed 2005-07-12 devnull {
53 a0d146ed 2005-07-12 devnull Arena *arena;
54 45ac814c 2007-10-29 rsc int i, e, e1, ok;
55 a0d146ed 2005-07-12 devnull
56 a0d146ed 2005-07-12 devnull ok = 0;
57 a0d146ed 2005-07-12 devnull for(i = 0; i < ix->narenas; i++){
58 a0d146ed 2005-07-12 devnull trace(TraceProc, "syncindex start %d", i);
59 a0d146ed 2005-07-12 devnull arena = ix->arenas[i];
60 45ac814c 2007-10-29 rsc e = syncarena(arena, TWID32, 1, 1);
61 a0d146ed 2005-07-12 devnull e1 = e;
62 45ac814c 2007-10-29 rsc e1 &= ~(SyncHeader|SyncCIZero|SyncCIErr);
63 45ac814c 2007-10-29 rsc if(e & SyncHeader)
64 a0d146ed 2005-07-12 devnull fprint(2, "arena %s: header is out-of-date\n", arena->name);
65 45ac814c 2007-10-29 rsc if(e1){
66 45ac814c 2007-10-29 rsc fprint(2, "arena %s: %x\n", arena->name, e1);
67 a0d146ed 2005-07-12 devnull ok = -1;
68 45ac814c 2007-10-29 rsc continue;
69 45ac814c 2007-10-29 rsc }
70 45ac814c 2007-10-29 rsc flushdcache();
71 fa325e9b 2020-01-10 cross
72 45ac814c 2007-10-29 rsc if(arena->memstats.clumps == arena->diskstats.clumps)
73 45ac814c 2007-10-29 rsc continue;
74 fa325e9b 2020-01-10 cross
75 45ac814c 2007-10-29 rsc fprint(2, "%T %s: indexing %d clumps...\n",
76 45ac814c 2007-10-29 rsc arena->name,
77 45ac814c 2007-10-29 rsc arena->memstats.clumps - arena->diskstats.clumps);
78 28b49df3 2006-07-18 devnull
79 45ac814c 2007-10-29 rsc if(syncarenaindex(arena, ix->amap[i].start) < 0){
80 45ac814c 2007-10-29 rsc fprint(2, "arena %s: syncarenaindex: %r\n", arena->name);
81 45ac814c 2007-10-29 rsc ok = -1;
82 45ac814c 2007-10-29 rsc continue;
83 a0d146ed 2005-07-12 devnull }
84 45ac814c 2007-10-29 rsc if(wbarena(arena) < 0){
85 45ac814c 2007-10-29 rsc fprint(2, "arena %s: wbarena: %r\n", arena->name);
86 45ac814c 2007-10-29 rsc ok = -1;
87 45ac814c 2007-10-29 rsc continue;
88 45ac814c 2007-10-29 rsc }
89 a0d146ed 2005-07-12 devnull flushdcache();
90 45ac814c 2007-10-29 rsc delaykickicache();
91 a0d146ed 2005-07-12 devnull }
92 a0d146ed 2005-07-12 devnull return ok;
93 a0d146ed 2005-07-12 devnull }