Trivial changes: whitespace and modes.

Remote whitespace at the ends of lines.
Remove blank lines from the ends of files.
Change modes on source files so that they
are not executable.

Signed-off-by: Dan Cross <cross@gajendra.net>
This commit is contained in:
Dan Cross 2020-01-10 14:44:21 +00:00
parent 77a0a5b519
commit fa325e9b42
1021 changed files with 5688 additions and 6193 deletions

View file

@ -53,7 +53,7 @@ static int
havevisited(uchar score[VtScoreSize], int type)
{
ScoreTree a;
if(scoretree == nil)
return 0;
memmove(a.score, score, VtScoreSize);
@ -99,7 +99,7 @@ walk(uchar score[VtScoreSize], uint type, int base, int depth)
if(memcmp(score, vtzeroscore, VtScoreSize) == 0 || memcmp(score, zeroscore, VtScoreSize) == 0)
return;
if(havevisited(score, type)){
nskip++;
return;
@ -145,7 +145,7 @@ walk(uchar score[VtScoreSize], uint type, int base, int depth)
continue;
walk(e.score, e.type, e.type&VtTypeBaseMask, depth+1);
/*
* Don't repack unless we're rewriting -- some old
* Don't repack unless we're rewriting -- some old
* vac files have psize==0 and dsize==0, and these
* get rewritten by vtentryunpack to have less strange
* block sizes. So vtentryunpack; vtentrypack does not
@ -175,7 +175,7 @@ walk(uchar score[VtScoreSize], uint type, int base, int depth)
sysfatal("writing block %V (type %d): %r", score, type);
}
if(!rewrite && memcmp(score, nscore, VtScoreSize) != 0)
sysfatal("not rewriting: wrote %V got %V", score, nscore);
sysfatal("not rewriting: wrote %V got %V", score, nscore);
if((type !=0 || base !=0) && verbose){
n = vtzerotruncate(type, buf, n);
@ -185,7 +185,7 @@ walk(uchar score[VtScoreSize], uint type, int base, int depth)
fprint(2, " ");
fprint(2, "<- %V\n", score);
}
markvisited(score, type);
free(buf);
}

View file

@ -33,7 +33,7 @@ threadmain(int argc, char **argv)
fmtinstall('V', vtscorefmt);
fmtinstall('F', vtfcallfmt);
address = "tcp!*!venti";
ARGBEGIN{
@ -76,4 +76,3 @@ threadmain(int argc, char **argv)
}
threadexitsall(nil);
}

View file

@ -31,7 +31,7 @@ dump(int indent, uchar *score, int type)
uchar *buf;
VtEntry e;
VtRoot root;
if(spaces[0] == 0)
memset(spaces, ' ', sizeof spaces-1);
@ -54,7 +54,7 @@ dump(int indent, uchar *score, int type)
indent*4, spaces, score, root.name, root.type, root.prev, root.blocksize);
dump(indent+1, root.score, VtDirType);
break;
case VtDirType:
Bprint(&bout, "%.*s%V dir n=%d\n", indent*4, spaces, score, n);
for(i=0; i*VtEntrySize<n; i++){
@ -67,7 +67,7 @@ dump(int indent, uchar *score, int type)
dump(indent+2, e.score, e.type);
}
break;
case VtDataType:
Bprint(&bout, "%.*s%V data n=%d", indent*4, spaces, score, n);
for(i=0; i<n; i++){
@ -88,7 +88,7 @@ dump(int indent, uchar *score, int type)
break;
}
out:
free(buf);
free(buf);
}

View file

@ -333,4 +333,3 @@ xxxlrand(void)
return x;
}

View file

@ -50,7 +50,7 @@ parsescore(uchar *score, char *buf, int n)
if((i & 1) == 0)
c <<= 4;
score[i>>1] |= c;
}
return 0;

View file

@ -32,7 +32,7 @@ readthread(void *v)
VtReq *r;
uchar *buf;
int n;
r = v;
buf = vtmalloc(r->tx.count);
if((n=vtread(z, r->tx.score, r->tx.blocktype, buf, r->tx.count)) < 0){
@ -57,10 +57,10 @@ threadmain(int argc, char **argv)
fmtinstall('F', vtfcallfmt);
fmtinstall('V', vtscorefmt);
address = "tcp!*!venti";
ventiaddress = nil;
ARGBEGIN{
case 'v':
verbose++;
@ -109,4 +109,3 @@ threadmain(int argc, char **argv)
}
threadexitsall(nil);
}

View file

@ -401,7 +401,7 @@ atailcmp(ATailStats *a, ATailStats *b)
return -1;
if(a->used > b->used)
return 1;
/* suspect tests - why order this way? (no one cares) */
if(a->clumps < b->clumps)
return -1;
@ -419,7 +419,7 @@ atailcmp(ATailStats *a, ATailStats *b)
return -1;
if(a->sealed > b->sealed)
return 1;
/* everything matches */
return 0;
}
@ -574,7 +574,7 @@ ReadErr:
sha1(b->data, bs-VtScoreSize, nil, &s);
sha1(zeroscore, VtScoreSize, nil, &s);
sha1(nil, 0, score, &s);
/*
* check for no checksum or the same
*/
@ -683,7 +683,7 @@ loadarena(Arena *arena)
|| arena->blocksize != head.blocksize
|| arena->size + 2 * arena->blocksize != head.size){
if(namecmp(arena->name, head.name)!=0)
logerr(ECorrupt, "arena tail name %s head %s",
logerr(ECorrupt, "arena tail name %s head %s",
arena->name, head.name);
else if(arena->clumpmagic != head.clumpmagic)
logerr(ECorrupt, "arena tail clumpmagic 0x%lux head 0x%lux",
@ -780,22 +780,22 @@ putcib(Arena *arena, CIBlock *cib)
/*
* For index entry readahead purposes, the arenas are
* For index entry readahead purposes, the arenas are
* broken into smaller subpieces, called clump info groups
* or cigs. Each cig has ArenaCIGSize clumps (ArenaCIGSize
* is chosen to make the index entries take up about half
* a megabyte). The index entries do not contain enough
* information to determine what the clump index is for
* a given address in an arena. That info is needed both for
* figuring out which clump group an address belongs to
* figuring out which clump group an address belongs to
* and for prefetching a clump group's index entries from
* the arena table of contents. The first time clump groups
* are accessed, we scan the entire arena table of contents
* (which might be 10s of megabytes), recording the data
* (which might be 10s of megabytes), recording the data
* offset of each clump group.
*/
/*
/*
* load clump info group information by scanning entire toc.
*/
static void
@ -811,7 +811,7 @@ loadcig(Arena *arena)
return;
// fprint(2, "loadcig %s\n", arena->name);
ncig = (arena->memstats.clumps+ArenaCIGSize-1) / ArenaCIGSize;
if(ncig == 0){
arena->cig = vtmalloc(1);
@ -839,7 +839,7 @@ loadcig(Arena *arena)
}
}
vtfree(ci);
arena->ncig = ncig;
arena->cig = cig;
@ -900,7 +900,7 @@ asumload(Arena *arena, int g, IEntry *entries, int nentries)
fprint(2, "asking for too few entries\n");
return -1;
}
qlock(&arena->lock);
if(arena->cig == nil)
loadcig(arena);
@ -908,7 +908,7 @@ asumload(Arena *arena, int g, IEntry *entries, int nentries)
qunlock(&arena->lock);
return -1;
}
addr = 0;
base = g*ArenaCIGSize;
limit = base + ArenaCIGSize;

View file

@ -1,6 +1,6 @@
/*
* Bloom filter tracking which scores are present in our arenas
* and (more importantly) which are not.
* and (more importantly) which are not.
*/
#include "stdinc.h"
@ -13,19 +13,19 @@ int
bloominit(Bloom *b, vlong vsize, u8int *data)
{
ulong size;
size = vsize;
if(size != vsize){ /* truncation */
werrstr("bloom data too big");
return -1;
}
b->size = size;
b->nhash = 32; /* will be fixed by caller on initialization */
if(data != nil)
if(unpackbloomhead(b, data) < 0)
return -1;
b->bitmask = (b->size<<3) - 1;
b->data = data;
return 0;
@ -42,7 +42,7 @@ readbloom(Part *p)
{
uchar buf[512];
Bloom *b;
b = vtmallocz(sizeof *b);
if(readpart(p, 0, buf, sizeof buf) < 0)
return nil;
@ -75,7 +75,7 @@ int
resetbloom(Bloom *b)
{
uchar *data;
data = vtmallocz(b->size);
b->data = data;
if(b->size == MaxBloomSize) /* 2^32 overflows ulong */
@ -92,7 +92,7 @@ loadbloom(Bloom *b)
uint ones;
uchar *data;
u32int *a;
data = vtmallocz(b->size);
if(readpart(b->part, 0, data, b->size) < 0){
vtfree(b);
@ -105,14 +105,14 @@ loadbloom(Bloom *b)
n = b->size/4;
ones = 0;
for(i=0; i<n; i++)
ones += countbits(a[i]);
ones += countbits(a[i]);
addstat(StatBloomOnes, ones);
if(b->size == MaxBloomSize) /* 2^32 overflows ulong */
addstat(StatBloomBits, b->size*8-1);
else
addstat(StatBloomBits, b->size*8);
return 0;
}
@ -204,7 +204,7 @@ inbloomfilter(Bloom *b, u8int *score)
if(ignorebloom)
return 1;
rlock(&b->lk);
r = _inbloomfilter(b, score);
runlock(&b->lk);
@ -236,7 +236,7 @@ markbloomfiltern(Bloom *b, u8int score[][20], int n)
if(b == nil || b->data == nil)
return;
rlock(&b->lk);
qlock(&b->mod);
for(i=0; i<n; i++)
@ -251,7 +251,7 @@ bloomwriteproc(void *v)
int ret;
Bloom *b;
threadsetname("bloomwriteproc");
threadsetname("bloomwriteproc");
b = v;
for(;;){
recv(b->writechan, 0);
@ -268,5 +268,5 @@ startbloomproc(Bloom *b)
{
b->writechan = chancreate(sizeof(void*), 0);
b->writedonechan = chancreate(sizeof(ulong), 0);
vtproc(bloomwriteproc, b);
vtproc(bloomwriteproc, b);
}

View file

@ -12,7 +12,7 @@ enum
};
typedef struct IEntryBuf IEntryBuf;
struct IEntryBuf
struct IEntryBuf
{
IEntry ie[100];
int nie;
@ -61,7 +61,7 @@ threadmain(int argc, char *argv[])
u32int bcmem, imem;
Config conf;
Part *p;
maxdisks = 100000;
ventifmtinstall();
imem = 256*1024*1024;
@ -116,18 +116,18 @@ threadmain(int argc, char *argv[])
close(fd);
}
}
/*
* need a block for every arena
*/
bcmem = maxblocksize * (mainindex->narenas + 16);
if(0) fprint(2, "initialize %d bytes of disk block cache\n", bcmem);
initdcache(bcmem);
totalclumps = 0;
for(i=0; i<ix->narenas; i++)
totalclumps += ix->arenas[i]->diskstats.clumps;
totalbuckets = 0;
for(i=0; i<ix->nsects; i++)
totalbuckets += ix->sects[i]->blocks;
@ -142,7 +142,7 @@ threadmain(int argc, char *argv[])
vtproc(isectproc, ix->sects[i]);
}
}
for(i=0; i<nisect; i++)
if(isect[i])
fprint(2, "warning: did not find index section %s\n", isect[i]);
@ -180,7 +180,7 @@ threadmain(int argc, char *argv[])
if(ix->bloom && writebloom(ix->bloom) < 0)
fprint(2, "writing bloom filter: %r\n");
fprint(2, "%T done arenaentries=%,lld indexed=%,lld (nskip=%,lld)\n",
fprint(2, "%T done arenaentries=%,lld indexed=%,lld (nskip=%,lld)\n",
arenaentries, indexentries, skipentries);
threadexitsall(nil);
}
@ -189,7 +189,7 @@ static int
shouldprocess(ISect *is)
{
int i;
if(nisect == 0)
return 1;
@ -205,7 +205,7 @@ static void
add(u64int *a, u64int n)
{
static Lock l;
lock(&l);
*a += n;
unlock(&l);
@ -233,7 +233,7 @@ arenapartproc(void *v)
IEntryBuf *buf, *b;
uchar *score;
ScoreBuf sb;
p = v;
threadsetname("arenaproc %s", p->name);
buf = MKNZ(IEntryBuf, ix->nsects);
@ -247,10 +247,10 @@ arenapartproc(void *v)
if(a->part != p)
continue;
if(a->memstats.clumps)
fprint(2, "%T arena %s: %d entries\n",
fprint(2, "%T arena %s: %d entries\n",
a->name, a->memstats.clumps);
/*
* Running the loop backwards accesses the
* Running the loop backwards accesses the
* clump info blocks forwards, since they are
* stored in reverse order at the end of the arena.
* This speeds things slightly.
@ -304,7 +304,7 @@ arenapartproc(void *v)
}
add(&arenaentries, tot);
add(&skipentries, nskip);
for(i=0; i<ix->nsects; i++)
if(ix->sects[i]->writechan && buf[i].nie > 0)
send(ix->sects[i]->writechan, &buf[i]);
@ -323,7 +323,7 @@ static u32int
score2bucket(ISect *is, uchar *score)
{
u32int b;
b = hashbits(score, 32)/ix->div;
if(b < is->start || b >= is->stop){
fprint(2, "score2bucket: score=%V div=%d b=%ud start=%ud stop=%ud\n",
@ -340,7 +340,7 @@ static u32int
offset2bucket(ISect *is, u64int offset)
{
u32int b;
assert(is->blockbase <= offset);
offset -= is->blockbase;
b = offset/is->blocksize;
@ -358,7 +358,7 @@ bucket2offset(ISect *is, u32int b)
return is->blockbase + (u64int)b*is->blocksize;
}
/*
/*
* IEntry buffers to hold initial round of spraying.
*/
typedef struct Buf Buf;
@ -378,7 +378,7 @@ static void
bflush(Buf *buf)
{
u32int bufsize;
if(buf->woffset >= buf->eoffset)
sysfatal("buf index chunk overflow - need bigger index");
bufsize = buf->ep - buf->bp;
@ -420,11 +420,11 @@ struct Minibuf
};
/*
* Index entry pool. Used when trying to shuffle around
* Index entry pool. Used when trying to shuffle around
* the entries in a big buffer into the corresponding M minibuffers.
* Sized to hold M*EntriesPerBlock entries, so that there will always
* either be room in the pool for another block worth of entries
* or there will be an entire block worth of sorted entries to
* or there will be an entire block worth of sorted entries to
* write out.
*/
typedef struct IEntryLink IEntryLink;
@ -461,7 +461,7 @@ countsokay(IPool *p)
{
int i;
u64int n;
n = 0;
for(i=0; i<p->nmbuf; i++)
n += p->mcount[i];
@ -477,21 +477,21 @@ countsokay(IPool *p)
*/
static IPool*
mkipool(ISect *isect, Minibuf *mbuf, u32int nmbuf,
mkipool(ISect *isect, Minibuf *mbuf, u32int nmbuf,
u32int mbufbuckets, u32int bufsize)
{
u32int i, nentry;
uchar *data;
IPool *p;
IEntryLink *l;
nentry = (nmbuf+1)*bufsize / IEntrySize;
p = ezmalloc(sizeof(IPool)
+nentry*sizeof(IEntry)
+nmbuf*sizeof(IEntryLink*)
+nmbuf*sizeof(u32int)
+3*bufsize);
p->isect = isect;
p->mbufbuckets = mbufbuckets;
p->bufsize = bufsize;
@ -516,7 +516,7 @@ mkipool(ISect *isect, Minibuf *mbuf, u32int nmbuf,
return p;
}
/*
/*
* Add the index entry ie to the pool p.
* Caller must know there is room.
*/
@ -543,7 +543,7 @@ ipoolinsert(IPool *p, uchar *ie)
l->next = p->mlist[x];
p->mlist[x] = l;
p->mcount[x]++;
}
}
/*
* Pull out a block containing as many
@ -555,7 +555,7 @@ ipoolgetbuf(IPool *p, u32int x)
uchar *bp, *ep, *wp;
IEntryLink *l;
u32int n;
bp = p->wbuf;
ep = p->wbuf + p->bufsize;
n = 0;
@ -582,7 +582,7 @@ static void
ipoolloadblock(IPool *p, Minibuf *mb)
{
u32int i, n;
assert(mb->nentry > 0);
assert(mb->roffset >= mb->woffset);
assert(mb->roffset < mb->eoffset);
@ -609,14 +609,14 @@ ipoolflush0(IPool *pool, u32int x)
{
u32int bufsize;
Minibuf *mb;
mb = pool->mbuf+x;
bufsize = pool->bufsize;
mb->nwentry += ipoolgetbuf(pool, x);
if(mb->nentry > 0 && mb->roffset == mb->woffset){
assert(pool->nfree >= pool->bufsize/IEntrySize);
/*
* There will be room in the pool -- we just
* There will be room in the pool -- we just
* removed a block worth.
*/
ipoolloadblock(pool, mb);
@ -655,7 +655,7 @@ static void
ipoolflush(IPool *pool)
{
u32int i;
for(i=0; i<pool->nmbuf; i++)
while(pool->mlist[i])
ipoolflush0(pool, i);
@ -668,7 +668,7 @@ ipoolflush(IPool *pool)
*/
/*
* Compare two packed index entries.
* Compare two packed index entries.
* Usual ordering except break ties by putting higher
* index addresses first (assumes have duplicates
* due to corruption in the lower addresses).
@ -678,7 +678,7 @@ ientrycmpaddr(const void *va, const void *vb)
{
int i;
uchar *a, *b;
a = (uchar*)va;
b = (uchar*)vb;
i = ientrycmp(a, b);
@ -692,7 +692,7 @@ zerorange(Part *p, u64int o, u64int e)
{
static uchar zero[MaxIoSize];
u32int n;
for(; o<e; o+=n){
n = sizeof zero;
if(o+n > e)
@ -703,7 +703,7 @@ zerorange(Part *p, u64int o, u64int e)
}
/*
* Load a minibuffer into memory and write out the
* Load a minibuffer into memory and write out the
* corresponding buckets.
*/
static void
@ -714,10 +714,10 @@ sortminibuffer(ISect *is, Minibuf *mb, uchar *buf, u32int nbuf, u32int bufsize)
u64int o;
IBucket ib;
Part *part;
part = is->part;
buckdata = emalloc(is->blocksize);
if(mb->nwentry == 0)
return;
@ -732,7 +732,7 @@ sortminibuffer(ISect *is, Minibuf *mb, uchar *buf, u32int nbuf, u32int bufsize)
return;
}
assert(*(uint*)buf != 0xa5a5a5a5);
/*
* remove fragmentation due to IEntrySize
* not evenly dividing Bufsize
@ -746,7 +746,7 @@ sortminibuffer(ISect *is, Minibuf *mb, uchar *buf, u32int nbuf, u32int bufsize)
ep = buf + mb->nwentry*IEntrySize;
assert(ep <= buf+nbuf);
/*
/*
* sort entries
*/
qsort(buf, mb->nwentry, IEntrySize, ientrycmpaddr);
@ -795,14 +795,14 @@ isectproc(void *v)
IPool *ipool;
ISect *is;
Minibuf *mbuf, *mb;
is = v;
blocksize = is->blocksize;
nbucket = is->stop - is->start;
/*
* Three passes:
* pass 1 - write index entries from arenas into
* pass 1 - write index entries from arenas into
* large sequential sections on index disk.
* requires nbuf * bufsize memory.
*
@ -810,36 +810,36 @@ isectproc(void *v)
* requires nminibuf * bufsize memory.
*
* pass 3 - read each minibuf into memory and
* write buckets out.
* write buckets out.
* requires entries/minibuf * IEntrySize memory.
*
*
* The larger we set bufsize the less seeking hurts us.
*
*
* The fewer sections and minibufs we have, the less
* seeking hurts us.
*
* The fewer sections and minibufs we have, the
*
* The fewer sections and minibufs we have, the
* more entries we end up with in each minibuf
* at the end.
* at the end.
*
* Shoot for using half our memory to hold each
* minibuf. The chance of a random distribution
* getting off by 2x is quite low.
* minibuf. The chance of a random distribution
* getting off by 2x is quite low.
*
* Once that is decided, figure out the smallest
* Once that is decided, figure out the smallest
* nminibuf and nsection/biggest bufsize we can use
* and still fit in the memory constraints.
*/
/* expected number of clump index entries we'll see */
xclump = nbucket * (double)totalclumps/totalbuckets;
/* number of clumps we want to see in a minibuf */
xminiclump = isectmem/2/IEntrySize;
/* total number of minibufs we need */
prod = (xclump+xminiclump-1) / xminiclump;
/* if possible, skip second pass */
if(!dumb && prod*MinBufSize < isectmem){
nbuf = prod;
@ -904,7 +904,7 @@ isectproc(void *v)
}
}
add(&indexentries, n);
nn = 0;
for(i=0; i<nbuf; i++){
bflush(&buf[i]);
@ -915,15 +915,15 @@ isectproc(void *v)
}
if(n != nn)
fprint(2, "isectproc bug: n=%ud nn=%ud\n", n, nn);
free(data);
fprint(2, "%T %s: reordering\n", is->part->name);
/*
* Rearrange entries into minibuffers and then
* split each minibuffer into buckets.
* The minibuffer must be sized so that it is
* The minibuffer must be sized so that it is
* a multiple of blocksize -- ipoolloadblock assumes
* that each minibuf starts aligned on a blocksize
* boundary.
@ -971,7 +971,7 @@ isectproc(void *v)
while(mb->nentry > 0){
if(ipool->nfree < epbuf){
ipoolflush1(ipool);
/* ipoolflush1 might change mb->nentry */
/* ipoolflush1 might change mb->nentry */
continue;
}
assert(ipool->nfree >= epbuf);
@ -1002,9 +1002,6 @@ isectproc(void *v)
}
free(data);
}
sendp(isectdonechan, is);
}

View file

@ -122,6 +122,6 @@ threadmain(int argc, char *argv[])
initdcache(bcmem);
clumpstats(mainindex);
threadexitsall(0);
}

View file

@ -57,7 +57,7 @@ printheader(char *name, ArenaHead *head, int fd)
Arena arena;
vlong baseoff, lo, hi, off;
int clumpmax;
off = seek(fd, 0, 1);
seek(fd, off + head->size - head->blocksize, 0);
if(readblock(fd, data, head->blocksize) < 0){
@ -91,7 +91,7 @@ printheader(char *name, ArenaHead *head, int fd)
lo = hi;
fprint(2, "\t%llx-%llx: clumps (%llx)\n", lo, hi, hi - lo);
fprint(2, "\t%llx-%llx: tail\n", hi, hi + head->blocksize);
fprint(2, "arena:\n");
printarena(2, &arena);
return 0;
@ -149,7 +149,7 @@ cmparena(char *name, vlong len)
if(printheader(name, &head, fd) < 0)
return;
/*
* now we know how much to read
* read everything but the last block, which is special
@ -196,7 +196,7 @@ static int
shouldcheck(char *name, char **s, int n)
{
int i;
if(n == 0)
return 1;
@ -213,7 +213,7 @@ char *
readap(int fd, ArenaPart *ap)
{
char *table;
if(preadblock(fd, data, 8192, PartBlank) < 0)
sysfatal("read arena part header: %r");
if(unpackarenapart(ap, data) < 0)
@ -237,7 +237,7 @@ threadmain(int argc, char *argv[])
vlong start, stop;
ArenaPart ap;
ArenaPart ap1;
ventifmtinstall();
blocksize = MaxIoSize;
ARGBEGIN{

View file

@ -201,7 +201,7 @@ configisect(char *file)
{
Part *part;
ISect *is;
if(0) fprint(2, "configure index section in %s\n", file);
part = initpart(file, ORDWR|ODIRECT);
@ -252,4 +252,3 @@ void
needmainindex(void)
{
}

View file

@ -162,7 +162,7 @@ unpackarena(Arena *arena, u8int *buf)
* all the existing version 4 arenas too.
*
* To maintain backwards compatibility with existing venti
* installations using the older format, we define that if
* installations using the older format, we define that if
* memstats == diskstats, then the extension fields are not
* included (see packarena below). That is, only partially
* indexed arenas have these fields. Fully indexed arenas
@ -181,7 +181,7 @@ unpackarena(Arena *arena, u8int *buf)
p += U64Size;
arena->memstats.sealed = U8GET(p);
p += U8Size;
/*
* 2008/4/2
* Packarena (below) used to have a bug in which it would
@ -264,7 +264,7 @@ _packarena(Arena *arena, u8int *buf, int forceext)
p += U64Size;
U8PUT(p, arena->diskstats.sealed);
p += U8Size;
/*
* Extension fields; see above.
*/
@ -281,7 +281,7 @@ _packarena(Arena *arena, u8int *buf, int forceext)
p += U32Size;
U32PUT(p, arena->memstats.cclumps);
p += U32Size;
U64PUT(p, arena->memstats.used, t32);
U64PUT(p, arena->memstats.used, t32);
p += U64Size;
U64PUT(p, arena->memstats.uncsize, t32);
p += U64Size;
@ -669,7 +669,7 @@ unpackibucket(IBucket *b, u8int *buf, u32int magic)
b->data = buf + IBucketSize;
if(magic && magic != U32GET(buf+U16Size))
b->n = 0;
}
}
void
packibucket(IBucket *b, u8int *buf, u32int magic)
@ -705,7 +705,7 @@ unpackbloomhead(Bloom *b, u8int *buf)
return -1;
}
p += U32Size;
m = U32GET(p);
if(m != BloomVersion){
seterr(ECorrupt, "bloom filter has wrong version %ud expected %ud", (uint)m, (uint)BloomVersion);

View file

@ -90,7 +90,7 @@ enum
ArenaPartMagic = 0xa9e4a5e7U, /* arena partition header */
ArenaMagic = 0xf2a14eadU, /* arena trailer */
ArenaHeadMagic = 0xd15c4eadU, /* arena header */
BloomMagic = 0xb1004eadU, /* bloom filter header */
BloomMaxHash = 32,
@ -145,7 +145,7 @@ enum
IEntryAddrOff = VtScoreSize + U32Size + U16Size,
MaxClumpBlocks = (VtMaxLumpSize + ClumpSize + (1 << ABlockLog) - 1) >> ABlockLog,
IcacheFrac = 1000000, /* denominator */
SleepForever = 1000000000, /* magic value for sleep time */
@ -156,7 +156,7 @@ enum
DirtyArenaCib,
DirtyArenaTrailer,
DirtyMax,
ArenaCIGSize = 10*1024, // about 0.5 MB worth of IEntry.
VentiZZZZZZZZ
@ -231,7 +231,7 @@ struct DBlock
u32int used2;
u32int ref; /* reference count */
RWLock lock; /* for access to data only */
Channel *writedonechan;
Channel *writedonechan;
void* chanbuf[1]; /* buffer for the chan! */
};
@ -315,7 +315,7 @@ struct CIBlock
};
/*
* Statistics kept in the tail.
* Statistics kept in the tail.
*/
struct ATailStats
{
@ -382,7 +382,7 @@ struct Arena
u32int ctime; /* first time a block was written */
u32int wtime; /* last time a block was written */
u32int clumpmagic;
ArenaCIG *cig;
int ncig;
};
@ -465,7 +465,7 @@ struct Index
Bloom *bloom; /* bloom filter */
/*
* fields stored in config file
* fields stored in config file
*/
u32int version;
char name[ANameSize]; /* text label */
@ -473,7 +473,7 @@ struct Index
AMap *smap; /* mapping of buckets to index sections */
int narenas;
AMap *amap; /* mapping from index addesses to arenas */
QLock writing;
};
@ -529,7 +529,7 @@ struct IEntry
/* on disk data - 32 bytes*/
u8int score[VtScoreSize];
IAddr ia;
IEntry *nexthash;
IEntry *nextdirty;
IEntry *next;
@ -657,7 +657,7 @@ enum
StatSumRead,
StatSumReadBytes,
StatCigLoad,
StatCigLoadTime,
@ -762,4 +762,3 @@ extern ulong stattime;
#pragma varargck type "V" uchar*
#define ODIRECT 0
#endif

View file

@ -1,23 +1,23 @@
/*
* Disk cache.
*
*
* Caches raw disk blocks. Getdblock() gets a block, putdblock puts it back.
* Getdblock has a mode parameter that determines i/o and access to a block:
* if mode is OREAD or ORDWR, it is read from disk if not already in memory.
* If mode is ORDWR or OWRITE, it is locked for exclusive use before being returned.
* It is *not* marked dirty -- once changes have been made, they should be noted
* by using dirtydblock() before putdblock().
* by using dirtydblock() before putdblock().
*
* There is a global cache lock as well as a lock on each block.
* There is a global cache lock as well as a lock on each block.
* Within a thread, the cache lock can be acquired while holding a block lock,
* but not vice versa; and a block cannot be locked if you already hold the lock
* on another block.
*
*
* The flush proc writes out dirty blocks in batches, one batch per dirty tag.
* For example, the DirtyArena blocks are all written to disk before any of the
* DirtyArenaCib blocks.
*
* This code used to be in charge of flushing the dirty index blocks out to
* This code used to be in charge of flushing the dirty index blocks out to
* disk, but updating the index turned out to benefit from extra care.
* Now cached index blocks are never marked dirty. The index.c code takes
* care of updating them behind our back, and uses _getdblock to update any
@ -134,7 +134,7 @@ DBlock*
getdblock(Part *part, u64int addr, int mode)
{
DBlock *b;
b = _getdblock(part, addr, mode, 1);
if(mode == OREAD || mode == ORDWR)
addstat(StatDcacheRead, 1);
@ -335,7 +335,7 @@ static void
unchain(DBlock *b)
{
ulong h;
/*
* unchain the block
*/
@ -395,7 +395,7 @@ void
emptydcache(void)
{
DBlock *b;
qlock(&dcache.lock);
while(dcache.nheap > 0){
b = dcache.heap[0];
@ -575,7 +575,7 @@ parallelwrites(DBlock **b, DBlock **eb, int dirty)
assert(b<=p && p<eb);
recvp((*p)->writedonechan);
}
/*
* Flush the partitions that have been written to.
*/

View file

@ -15,7 +15,7 @@ disksched(void)
ulong t;
vlong cflush;
Stats *prev;
/*
* no locks because all the data accesses are atomic.
*/
@ -40,22 +40,22 @@ disksched(void)
/* # entries written to index cache */
nwrite = stats.n[StatIcacheWrite] - prev->n[StatIcacheWrite];
/* # dirty entries in index cache */
ndirty = stats.n[StatIcacheDirty] - prev->n[StatIcacheDirty];
/* # entries flushed to disk */
nflush = nwrite - ndirty;
/* want to stay around 70% dirty */
tdirty = (vlong)stats.n[StatIcacheSize]*700/1000;
/* assume nflush*icachesleeptime is a constant */
cflush = (vlong)nflush*(icachesleeptime+1);
/* computer number entries to write in next minute */
toflush = nwrite + (stats.n[StatIcacheDirty] - tdirty);
/* schedule for that many */
if(toflush <= 0 || cflush/toflush > 100000)
icachesleeptime = SleepForever;
@ -86,4 +86,3 @@ diskaccess(int level)
}
lasttime[level] = time(0);
}

View file

@ -6,7 +6,7 @@
*
* The rule here (hopefully followed!) is that block corruption
* only ever has a local effect -- there are no blocks that you
* can wipe out that will cause large portions of
* can wipe out that will cause large portions of
* uncorrupted data blocks to be useless.
*/
@ -26,7 +26,7 @@ enum
K = 1024,
M = 1024*1024,
G = 1024*1024*1024,
Block = 4096,
};
@ -64,7 +64,7 @@ static int
zfmt(Fmt *fmt)
{
vlong x;
x = va_arg(fmt->args, vlong);
if(x == 0)
return fmtstrcpy(fmt, "0");
@ -85,7 +85,7 @@ tfmt(Fmt *fmt)
{
uint t;
char buf[30];
t = va_arg(fmt->args, uint);
strcpy(buf, ctime(t));
buf[28] = 0;
@ -133,7 +133,7 @@ readdisk(uchar *buf, vlong offset, int len)
memset(buf, 0xFB, len);
return buf;
}
if(offset+len > partend){
memset(buf, 0xFB, len);
len = partend - offset;
@ -141,7 +141,7 @@ readdisk(uchar *buf, vlong offset, int len)
if(readpart(part, offset, buf, len) >= 0)
return buf;
/*
* The read failed. Clear the buffer to nonsense, and
* then try reading in smaller pieces. If that fails,
@ -191,7 +191,7 @@ void
sbdebug(Shabuf *sb, char *file)
{
int fd;
if(sb->fd > 0){
close(sb->fd);
sb->fd = 0;
@ -234,7 +234,7 @@ sbupdate(Shabuf *sb, uchar *p, vlong offset, int len)
len -= x;
}
assert(sb->offset == offset);
if(sb->fd > 0)
pwrite(sb->fd, p, len, offset - sb->r0);
@ -243,7 +243,7 @@ sbupdate(Shabuf *sb, uchar *p, vlong offset, int len)
sb->offset += len;
return;
}
/* save state every 4M so we can roll back quickly */
o = offset - sb->r0;
while(len > 0){
@ -265,7 +265,7 @@ sbupdate(Shabuf *sb, uchar *p, vlong offset, int len)
}
sb->hist[x] = sb->state;
}
}
}
}
void
@ -273,7 +273,7 @@ sbdiskhash(Shabuf *sb, vlong eoffset)
{
static uchar dbuf[4*M];
int n;
while(sb->offset < eoffset){
n = sizeof dbuf;
if(sb->offset+n > eoffset)
@ -289,7 +289,7 @@ sbrollback(Shabuf *sb, vlong offset)
int x;
vlong o;
Dir d;
if(!sb->rollback || !sb->r0){
print("cannot rollback sha\n");
return;
@ -305,7 +305,7 @@ sbrollback(Shabuf *sb, vlong offset)
sb->state = sb->hist[x];
sb->offset = sb->r0 + x*4*M;
assert(sb->offset <= offset);
if(sb->fd > 0){
nulldir(&d);
d.length = sb->offset - sb->r0;
@ -325,7 +325,7 @@ sbscore(Shabuf *sb, uchar *score)
/*
* If we're fixing arenas, then editing this memory edits the disk!
* It will be written back out as new data is paged in.
* It will be written back out as new data is paged in.
*/
uchar buf[4*M];
uchar sbuf[4*M];
@ -341,7 +341,7 @@ pagein(vlong offset, int len)
memset(buf, 0xFB, sizeof buf);
return buf;
}
if(offset+len > partend){
memset(buf, 0xFB, sizeof buf);
len = partend - offset;
@ -373,16 +373,16 @@ zerorange(vlong offset, int len)
vlong ooff;
int olen;
enum { MinBlock = 4*K, MaxBlock = 8*K };
if(0)
if(bufoffset <= offset && offset+len <= bufoffset+buflen){
memset(buf+(offset-bufoffset), 0, len);
return;
}
ooff = bufoffset;
olen = buflen;
i = offset%MinBlock;
if(i+len < MaxBlock){
pagein(offset-i, (len+MinBlock-1)&~(MinBlock-1));
@ -455,7 +455,7 @@ static int
vlongcmp(const void *va, const void *vb)
{
vlong a, b;
a = *(vlong*)va;
b = *(vlong*)vb;
if(a < b)
@ -524,7 +524,7 @@ Info tailinfo4[] = {
1, "sealed",
0
};
Info tailinfo4a[] = {
/* tailinfo 4 */
4, "magic",
@ -547,7 +547,7 @@ Info tailinfo4a[] = {
1, "mem.sealed",
0
};
Info tailinfo5[] = {
4, "magic",
D|4, "version",
@ -586,12 +586,12 @@ Info tailinfo5a[] = {
1, "mem.sealed",
0
};
void
showdiffs(uchar *want, uchar *have, int len, Info *info)
{
int n;
while(len > 0 && (n=info->len&N) > 0){
if(memcmp(have, want, n) != 0){
switch(info->len){
@ -625,7 +625,7 @@ showdiffs(uchar *want, uchar *have, int len, Info *info)
break;
case S|ANameSize:
print("\t%s: correct=%s disk=%.*s\n",
info->name, (char*)want,
info->name, (char*)want,
utfnlen((char*)have, ANameSize-1),
(char*)have);
break;
@ -672,7 +672,7 @@ guessgeometry(void)
uchar *p, *ep, *sp;
u64int diff[100], head[20], tail[20];
u64int offset, bestdiff;
ap.version = ArenaPartVersion;
if(arenasize == 0 || ap.blocksize == 0){
@ -705,8 +705,8 @@ guessgeometry(void)
}
if(nhead < 3 && ntail < 3)
sysfatal("too few intact arenas: %d heads, %d tails", nhead, ntail);
/*
/*
* Arena size is likely the most common
* inter-head or inter-tail spacing.
*/
@ -816,7 +816,7 @@ guessgeometry(void)
}
}
p = pagein(ap.arenabase, Block);
print("arena base likely %z%s\n", (vlong)ap.arenabase,
print("arena base likely %z%s\n", (vlong)ap.arenabase,
u32(p)!=ArenaHeadMagic ? " (but no arena head there)" : "");
ap.tabsize = ap.arenabase - ap.tabbase;
@ -893,7 +893,7 @@ isclump(uchar *p, Clump *cl, u32int *pmagic)
uchar score[VtScoreSize], *bp;
Unwhack uw;
uchar ubuf[70*1024];
bp = p;
magic = u32(p);
if(magic == 0)
@ -942,7 +942,7 @@ isclump(uchar *p, Clump *cl, u32int *pmagic)
return 0;
}
p += cl->info.size;
/* it all worked out in the end */
*pmagic = magic;
return p - bp;
@ -975,7 +975,7 @@ int*
ltreewalk(int *p, uchar *score)
{
int i;
for(;;){
if(*p == -1)
return p;
@ -993,7 +993,7 @@ void
addcibuf(ClumpInfo *ci, vlong corrupt)
{
Cit *cit;
if(ncibuf == mcibuf){
mcibuf += 131072;
cibuf = vtrealloc(cibuf, mcibuf*sizeof cibuf[0]);
@ -1012,7 +1012,7 @@ void
addcicorrupt(vlong len)
{
static ClumpInfo zci;
addcibuf(&zci, len);
}
@ -1021,7 +1021,7 @@ haveclump(uchar *score)
{
int i;
int p;
p = ciroot;
for(;;){
if(p == -1)
@ -1054,7 +1054,7 @@ int
sealedarena(uchar *p, int blocksize)
{
int v, n;
v = u32(p+4);
switch(v){
default:
@ -1085,13 +1085,13 @@ int
okayname(char *name, int n)
{
char buf[20];
if(nameok(name) < 0)
return 0;
sprint(buf, "%d", n);
if(n == 0)
buf[0] = 0;
if(strlen(name) < strlen(buf)
if(strlen(name) < strlen(buf)
|| strcmp(name+strlen(name)-strlen(buf), buf) != 0)
return 0;
return 1;
@ -1115,7 +1115,7 @@ loadci(vlong offset, Arena *arena, int nci)
int i, j, per;
uchar *p, *sp;
ClumpInfo *bci, *ci;
per = arena->blocksize/ClumpInfoSize;
bci = vtmalloc(nci*sizeof bci[0]);
ci = bci;
@ -1139,7 +1139,7 @@ writeci(vlong offset, Arena *arena, ClumpInfo *ci, int nci)
{
int i, j, per;
uchar *p, *sp;
per = arena->blocksize/ClumpInfoSize;
offset += arena->size - arena->blocksize;
p = sp = nil;
@ -1177,11 +1177,11 @@ loadarenabasics(vlong offset0, int anum, ArenaHead *head, Arena *arena)
if(offset0+arena->size > partend)
arena->size = partend - offset0;
head->size = arena->size;
arena->blocksize = ap.blocksize;
head->blocksize = arena->blocksize;
/*
/*
* Look for clump magic and name in head/tail blocks.
* All the other info we will reconstruct just in case.
*/
@ -1194,7 +1194,7 @@ loadarenabasics(vlong offset0, int anum, ArenaHead *head, Arena *arena)
strcpy(head->name, ohead.name);
}
p = pagein(offset0+arena->size-arena->blocksize,
p = pagein(offset0+arena->size-arena->blocksize,
arena->blocksize);
memset(&oarena, 0, sizeof oarena);
if(unpackarena(&oarena, p) >= 0){
@ -1228,7 +1228,7 @@ print("old arena: sealed=%d\n", oarena.diskstats.sealed);
strcpy(lastbase, arena->name);
sprint(dname, "%d", anum);
lastbase[strlen(lastbase)-strlen(dname)] = 0;
/* Was working in arena, now copy to head. */
head->version = arena->version;
memmove(head->name, arena->name, sizeof head->name);
@ -1240,7 +1240,7 @@ void
shahead(Shabuf *sb, vlong offset0, ArenaHead *head)
{
uchar headbuf[MaxDiskBlock];
sb->offset = offset0;
memset(headbuf, 0, sizeof headbuf);
packarenahead(head, headbuf);
@ -1251,7 +1251,7 @@ u32int
newclumpmagic(int version)
{
u32int m;
if(version == ArenaVersion4)
return _ClumpMagic;
do{
@ -1279,7 +1279,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
ClumpInfo *bci, *ci, *eci, *xci;
Cit *bcit, *cit, *ecit;
Shabuf oldsha, newsha;
/*
* We expect to find an arena, with data, between offset
* and offset+arenasize. With any luck, the data starts at
@ -1314,7 +1314,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
loadarenabasics(offset0, anum, head, arena);
/* start the clump hunt */
clumps = 0;
totalcorrupt = 0;
sealing = 1;
@ -1424,7 +1424,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
* grow clump info blocks if needed.
*/
if(verbose > 1)
print("\tclump %d: %d %V at %#llux+%#ux (%d)\n",
print("\tclump %d: %d %V at %#llux+%#ux (%d)\n",
clumps, cl.info.type, cl.info.score, offset, n, n);
addcibuf(&cl.info, 0);
if(minclumps%ncib == 0)
@ -1435,7 +1435,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
arena->diskstats.cclumps++;
arena->diskstats.uncsize += cl.info.uncsize;
arena->wtime = cl.time;
/*
* Move to next clump.
*/
@ -1470,7 +1470,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
pageout();
if(verbose)
print("readable clumps: %d; min. directory entries: %d\n",
print("readable clumps: %d; min. directory entries: %d\n",
clumps, minclumps);
arena->diskstats.used = lastclumpend - boffset;
leaked = eoffset - lastclumpend;
@ -1488,10 +1488,10 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
sbupdate(&oldsha, dbuf, toffset, arena->blocksize);
sbscore(&oldsha, oldscore);
}
/*
* If we still don't know the clump magic, the arena
* must be empty. It still needs a value, so make
* must be empty. It still needs a value, so make
* something up.
*/
if(arena->version == 0)
@ -1537,7 +1537,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
v = offset0 + arena->size - arena->blocksize;
clumps = (v-lastclumpend)/arena->blocksize * ncib;
}
if(clumps < minclumps)
print("cannot happen?\n");
@ -1546,7 +1546,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
* The tricky part is handling the corrupt sections of arena.
* If possible, we remark just the affected directory entries
* rather than slide everything down.
*
*
* Allocate clumps+1 blocks and check that we don't need
* the last one at the end.
*/
@ -1554,7 +1554,7 @@ guessarena(vlong offset0, int anum, ArenaHead *head, Arena *arena,
eci = bci+clumps+1;
bcit = cibuf;
ecit = cibuf+ncibuf;
smart = 0; /* Somehow the smart code doesn't do corrupt clumps right. */
Again:
nbad = 0;
@ -1614,11 +1614,11 @@ Again:
if(clumpinfocmp(&cit->ci, ci) != 0){
if(verbose && (smart || verbose>1)){
print("clumpinfo %d\n", (int)(ci-bci));
print("\twant: %d %d %d %V\n",
print("\twant: %d %d %d %V\n",
cit->ci.type, cit->ci.size,
cit->ci.uncsize, cit->ci.score);
print("\thave: %d %d %d %V\n",
ci->type, ci->size,
print("\thave: %d %d %d %V\n",
ci->type, ci->size,
ci->uncsize, ci->score);
}
*ci = cit->ci;
@ -1633,7 +1633,7 @@ Again:
smart = 0;
goto Again;
}
assert(ci <= eci);
arena->diskstats.clumps = ci-bci;
eoffset = writeci(offset0, arena, bci, ci-bci);
@ -1661,7 +1661,7 @@ Nocib:
arena->memstats = arena->diskstats;
if(sealing && fix){
uchar tbuf[MaxDiskBlock];
sbdiskhash(&newsha, toffset);
memset(tbuf, 0, sizeof tbuf);
packarena(arena, tbuf);
@ -1676,7 +1676,7 @@ dumparena(vlong offset, int anum, Arena *arena)
char buf[1000];
vlong o, e;
int fd, n;
snprint(buf, sizeof buf, "%s.%d", dumpbase, anum);
if((fd = create(buf, OWRITE, 0666)) < 0){
fprint(2, "create %s: %r\n", buf);
@ -1703,7 +1703,7 @@ checkarena(vlong offset, int anum)
ArenaHead head;
Info *fmt, *fmta;
int sz;
print("# arena %d: offset %#llux\n", anum, offset);
if(offset >= partend){
@ -1737,11 +1737,11 @@ checkarena(vlong offset, int anum)
p = pagein(offset, arena.blocksize);
if(memcmp(dbuf, p, arena.blocksize) != 0){
print("on-disk arena header incorrect\n");
showdiffs(dbuf, p, arena.blocksize,
showdiffs(dbuf, p, arena.blocksize,
arena.version==ArenaVersion4 ? headinfo4 : headinfo5);
}
memmove(p, dbuf, arena.blocksize);
memset(dbuf, 0, sizeof dbuf);
packarena(&arena, dbuf);
if(arena.diskstats.sealed)
@ -1781,14 +1781,14 @@ checkarena(vlong offset, int anum)
print("\t disk=%V\n", p+arena.blocksize-VtScoreSize);
}
if(fix && scorecmp(p+arena.blocksize-VtScoreSize, score) != 0){
print("%ssealing arena%s: %V\n",
print("%ssealing arena%s: %V\n",
oarena.diskstats.sealed ? "re" : "",
scorecmp(oldscore, score) == 0 ?
scorecmp(oldscore, score) == 0 ?
"" : " after changes", score);
}
}
memmove(p, dbuf, arena.blocksize);
pageout();
}
@ -1800,7 +1800,7 @@ buildamap(void)
ArenaHead h;
AMapN *an;
AMap *m;
an = vtmallocz(sizeof *an);
for(o=ap.arenabase; o<partend; o+=arenasize){
p = pagein(o, Block);
@ -1812,7 +1812,7 @@ buildamap(void)
strcpy(m->name, h.name);
}
}
return an;
return an;
}
void
@ -1823,7 +1823,7 @@ checkmap(void)
int i, len;
AMapN *an;
Fmt fmt;
an = buildamap();
fmtstrinit(&fmt);
fmtprint(&fmt, "%ud\n", an->n);
@ -1837,7 +1837,7 @@ checkmap(void)
(vlong)len, (vlong)ap.tabsize);
len = ap.tabsize;
}
if(ap.tabsize >= 4*M){ /* can't happen - max arenas is 2000 */
print("arena partition map *way* too long\n");
return;
@ -1857,9 +1857,9 @@ void
threadmain(int argc, char **argv)
{
int mode;
mode = OREAD;
readonly = 1;
readonly = 1;
ARGBEGIN{
case 'U':
unseal = 1;
@ -1887,22 +1887,22 @@ threadmain(int argc, char **argv)
default:
usage();
}ARGEND
if(argc != 1 && argc != 2)
usage();
file = argv[0];
ventifmtinstall();
fmtinstall('z', zfmt);
fmtinstall('t', tfmt);
quotefmtinstall();
part = initpart(file, mode|ODIRECT);
if(part == nil)
sysfatal("can't open %s: %r", file);
partend = part->size;
if(isonearena()){
checkarena(0, -1);
threadexitsall(nil);
@ -1911,4 +1911,3 @@ threadmain(int argc, char **argv)
checkmap();
threadexitsall(nil);
}

View file

@ -19,7 +19,7 @@ threadmain(int argc, char *argv[])
vlong bits, size, size2;
int nhash;
vlong nblocks;
ventifmtinstall();
statsinit();
@ -62,7 +62,7 @@ threadmain(int argc, char *argv[])
if(size == 0)
size = part->size;
if(size < 1024*1024)
sysfatal("bloom filter too small");
@ -93,7 +93,7 @@ threadmain(int argc, char *argv[])
}
/*
* optimal is to use ln 2 times as many hash functions as we have bits per blocks.
* optimal is to use ln 2 times as many hash functions as we have bits per blocks.
*/
bits = (8*size)/nblocks;
nhash = bits*7/10;

View file

@ -36,7 +36,7 @@ Memimage*
allocrepl(ulong color)
{
Memimage *m;
m = allocmemimage(Rect(0,0,1,1), RGB24);
memfillcolor(m, color);
m->flags |= Frepl;
@ -49,10 +49,10 @@ ginit(void)
{
static int first = 1;
int i;
if(!first)
return;
first = 0;
memimageinit();
#ifdef PLAN9PORT
@ -90,7 +90,7 @@ drawlabel(Memimage *m, Point p, int n)
{
char buf[30];
Point w;
mklabel(buf, n);
w = memsubfontwidth(smallfont, buf);
memimagestring(m, Pt(p.x-5-w.x, p.y), memblack, ZP, smallfont, buf);
@ -117,7 +117,7 @@ statgraph(Graph *g)
Statbin *b, bin[2000]; /* 32 kB, but whack is worse */
needstack(8192); /* double check that bin didn't kill us */
if(g->wid <= MinWidth)
g->wid = DefaultWidth;
if(g->ht <= MinHeight)
@ -128,7 +128,7 @@ statgraph(Graph *g)
g->fill = ((uint)(uintptr)g->arg>>8)%nelem(lofill);
if(g->fill > nelem(lofill))
g->fill %= nelem(lofill);
nbin = g->wid - (Left+Right);
binstats(g->fn, g->arg, g->t0, g->t1, bin, nbin);
@ -168,7 +168,7 @@ statgraph(Graph *g)
}
r = Rect(Left, Top, g->wid-Right, g->ht-Bottom);
memfillcolor(m, DTransparent);
/* x axis */
memimagedraw(m, Rect(r.min.x, r.max.y, r.max.x, r.max.y+1), black, ZP, memopaque, ZP, S);
@ -176,7 +176,7 @@ statgraph(Graph *g)
drawlabel(m, r.min, max);
if(min != 0)
drawlabel(m, Pt(r.min.x, r.max.y-smallfont->height), min);
/* actual data */
for(i=0; i<nbin; i++){
b = &bin[i];

View file

@ -14,7 +14,7 @@ hdisk(HConnect *c)
char *disk, *type;
Part *p;
int ret;
if(hsethtml(c) < 0)
return -1;
@ -42,7 +42,7 @@ hdisk(HConnect *c)
return 0;
}
freepart(p);
return ret;
return ret;
}
static int
@ -51,7 +51,7 @@ disksummary(HConnect *c)
int i;
Index *ix;
Part *p;
hprint(&c->hout, "<h1>venti disks</h1>\n");
hprint(&c->hout, "<pre>\n");
ix = mainindex;
@ -83,7 +83,7 @@ readap(Part *p, ArenaPart *ap)
{
uchar *blk;
char *table;
blk = vtmalloc(8192);
if(readpart(p, PartBlank, blk, 8192) != 8192)
return nil;
@ -108,7 +108,7 @@ xfindarena(char *table, char *name, vlong *start, vlong *end)
{
int i, nline;
char *p, *q, *f[4], line[256];
nline = atoi(table);
p = strchr(table, '\n');
if(p)
@ -212,7 +212,7 @@ diskarenapart(HConnect *c, char *disk, Part *p)
hprint(&c->hout, "%r\n");
goto out;
}
hprint(&c->hout, "<pre>\n");
hprint(&c->hout, "version=%d blocksize=%d base=%d\n",
ap.version, ap.blocksize, ap.arenabase);
@ -223,12 +223,12 @@ diskarenapart(HConnect *c, char *disk, Part *p)
diskarenatable(c, disk, table);
goto out;
}
if(xfindarena(table, arenaname, &start, &end) < 0){
hprint(&c->hout, "no such arena %s\n", arenaname);
goto out;
}
hprint(&c->hout, "<h2>arena %s</h2>\n", arenaname);
hprint(&c->hout, "<pre>start=%#llx end=%#llx<pre>\n", start, end);
if(end < start || end - start < HeadSize){
@ -253,7 +253,7 @@ diskarenapart(HConnect *c, char *disk, Part *p)
hprint(&c->hout, "head:\n<pre>\n");
hprint(&c->hout, "version=%d name=%s blocksize=%d size=%#llx clumpmagic=%#ux\n",
head.version, head.name, head.blocksize, head.size,
head.version, head.name, head.blocksize, head.size,
head.clumpmagic);
hprint(&c->hout, "</pre><br><br>\n");
@ -281,7 +281,7 @@ diskarenapart(HConnect *c, char *disk, Part *p)
scorecp(arena.score, blk+head.blocksize - VtScoreSize);
vtfree(blk);
hprint(&c->hout, "tail:\n<pre>\n");
hprint(&c->hout, "version=%d name=%s\n", arena.version, arena.name);
hprint(&c->hout, "ctime=%d %s\n", arena.ctime, fmttime(tbuf, arena.ctime));
@ -389,10 +389,10 @@ diskarenatoc(HConnect *c, Arena *arena)
}
unpackclumpinfo(&ci, blk+(i%arena->clumpmax)*ClumpInfoSize);
if(i/arena->clumpmax == cib || i%arena->clumpmax == 0){
hprint(&c->hout, "%5d %6d %7d %V",
hprint(&c->hout, "%5d %6d %7d %V",
ci.type, ci.size, ci.uncsize, ci.score);
if(coff >= 0)
hprint(&c->hout, " at <a href=\"%s&clump=%#llx&score=%V\">%#llx</a>",
hprint(&c->hout, " at <a href=\"%s&clump=%#llx&score=%V\">%#llx</a>",
base, coff, ci.score, coff);
if(i/arena->clumpmax != cib)
hprint(&c->hout, " <font size=-1><a href=\"%s&cib=%d\">more</a></font>", base, i/arena->clumpmax);
@ -415,7 +415,7 @@ diskarenaclump(HConnect *c, Arena *arena, vlong off, char *scorestr)
uchar xscore[VtScoreSize], score[VtScoreSize];
Unwhack uw;
int n;
if(scorestr){
if(vtparsescore(scorestr, nil, score) < 0){
hprint(&c->hout, "bad score %s: %r\n", scorestr);
@ -436,7 +436,7 @@ diskarenaclump(HConnect *c, Arena *arena, vlong off, char *scorestr)
hprint(&c->hout, "bad offset %#llx\n", off);
return -1;
}
off += arena->base;
blk = vtmalloc(ClumpSize + VtMaxLumpSize);
@ -461,15 +461,15 @@ diskarenaclump(HConnect *c, Arena *arena, vlong off, char *scorestr)
hprint(&c->hout, "<pre>type=%d size=%d uncsize=%d score=%V\n", cl.info.type, cl.info.size, cl.info.uncsize, cl.info.score);
hprint(&c->hout, "encoding=%d creator=%d time=%d %s</pre>\n", cl.encoding, cl.creator, cl.time, fmttime(err, cl.time));
if(cl.info.type == VtCorruptType)
hprint(&c->hout, "clump is marked corrupt<br>\n");
if(cl.info.size >= VtMaxLumpSize){
hprint(&c->hout, "clump too big\n");
goto error;
}
switch(cl.encoding){
case ClumpECompress:
blk2 = vtmalloc(VtMaxLumpSize);
@ -493,7 +493,7 @@ diskarenaclump(HConnect *c, Arena *arena, vlong off, char *scorestr)
scoremem(xscore, blk+ClumpSize, cl.info.size);
break;
}
hprint(&c->hout, "score=%V<br>\n", xscore);
if(scorestr && scorecmp(score, xscore) != 0)
hprint(&c->hout, "score does NOT match expected %V\n", score);
@ -536,7 +536,7 @@ debugamap(HConnect *c)
amap = mainindex->amap;
for(i=0; i<mainindex->narenas; i++)
hprint(&c->hout, "%s %#llx %#llx\n",
hprint(&c->hout, "%s %#llx %#llx\n",
amap[i].name, amap[i].start, amap[i].stop);
}
@ -559,23 +559,23 @@ debugread(HConnect *c, u8int *score)
hprint(&c->hout, "zero score\n");
return;
}
hprint(&c->hout, "<h2>index search %V</h2><pre>\n", score);
if(icachelookup(score, -1, &ia) < 0)
hprint(&c->hout, " icache: not found\n");
else
hprint(&c->hout, " icache: addr=%#llx size=%d type=%d blocks=%d\n",
ia.addr, ia.size, ia.type, ia.blocks);
if(loadientry(mainindex, score, -1, &ie) < 0)
hprint(&c->hout, " idisk: not found\n");
else
hprint(&c->hout, " idisk: addr=%#llx size=%d type=%d blocks=%d\n",
ie.ia.addr, ie.ia.size, ie.ia.type, ie.ia.blocks);
hprint(&c->hout, "</pre><h2>lookup %V</h2>\n", score);
hprint(&c->hout, "<pre>\n");
for(type=0; type < VtMaxType; type++){
hprint(&c->hout, "%V type %d:", score, type);
u = lookuplump(score, type);
@ -584,14 +584,14 @@ debugread(HConnect *c, u8int *score)
else
hprint(&c->hout, " -cache");
putlump(u);
if(lookupscore(score, type, &ia) < 0){
hprint(&c->hout, " -lookup\n");
continue;
}
hprint(&c->hout, "\n lookupscore: addr=%#llx size=%d blocks=%d\n",
ia.addr, ia.size, ia.blocks);
arena = amapitoa(mainindex, ia.addr, &aa);
if(arena == nil){
hprint(&c->hout, " amapitoa failed: %r\n");
@ -606,7 +606,7 @@ debugread(HConnect *c, u8int *score)
hprint(&c->hout, " loadclump failed: %r\n");
continue;
}
hprint(&c->hout, " loadclump: uncsize=%d type=%d score=%V\n",
cl.info.uncsize, cl.info.type, sc);
if(ia.size != cl.info.uncsize || ia.type != cl.info.type || scorecmp(score, sc) != 0){
@ -614,12 +614,12 @@ debugread(HConnect *c, u8int *score)
continue;
}
}
if(hargstr(c, "brute", "")[0] == 'y'){
hprint(&c->hout, "</pre>\n");
hprint(&c->hout, "<h2>brute force arena search %V</h2>\n", score);
hprint(&c->hout, "<pre>\n");
for(i=0; i<mainindex->narenas; i++){
arena = mainindex->arenas[i];
hprint(&c->hout, "%s...\n", arena->name);
@ -637,10 +637,10 @@ static void
debugmem(HConnect *c)
{
Index *ix;
ix = mainindex;
hprint(&c->hout, "<h2>memory</h2>\n");
hprint(&c->hout, "<pre>\n");
hprint(&c->hout, "ix=%p\n", ix);
hprint(&c->hout, "\tarenas=%p\n", ix->arenas);
@ -660,7 +660,7 @@ hdebug(HConnect *c)
{
char *scorestr, *op;
u8int score[VtScoreSize];
if(hsethtml(c) < 0)
return -1;
hprint(&c->hout, "<h1>venti debug</h1>\n");
@ -670,7 +670,7 @@ hdebug(HConnect *c)
hprint(&c->hout, "no op\n");
return 0;
}
if(strcmp(op, "amap") == 0){
debugamap(c);
return 0;
@ -690,7 +690,7 @@ hdebug(HConnect *c)
debugread(c, score);
return 0;
}
hprint(&c->hout, "unknown op %s", op);
return 0;
}

View file

@ -7,11 +7,10 @@ int
hproc(HConnect *c)
{
int r;
if((r = hsettext(c)) < 0)
return r;
hprint(&c->hout, "/proc only implemented on Plan 9\n");
hflush(&c->hout);
return 0;
}

View file

@ -51,7 +51,7 @@ httpdinit(char *address, char *dir)
if(address == nil)
address = "tcp!*!http";
webroot = dir;
httpdobj("/stats", estats);
httpdobj("/index", dindex);
httpdobj("/storage", sindex);
@ -168,7 +168,7 @@ httpproc(void *v)
*/
if(hparsereq(c, 0) < 0)
break;
for(i = 0; i < MaxObjs && objs[i].name[0]; i++){
n = strlen(objs[i].name);
if((objs[i].name[n-1] == '/' && strncmp(c->req.uri, objs[i].name, n) == 0)
@ -196,7 +196,7 @@ char*
hargstr(HConnect *c, char *name, char *def)
{
HSPairs *p;
for(p=c->req.searchpairs; p; p=p->next)
if(strcmp(p->s, name) == 0)
return p->t;
@ -207,7 +207,7 @@ vlong
hargint(HConnect *c, char *name, vlong def)
{
char *a;
if((a = hargstr(c, name, nil)) == nil)
return def;
return atoll(a);
@ -282,7 +282,7 @@ herror(HConnect *c)
{
int n;
Hio *hout;
hout = &c->hout;
n = snprint(c->xferbuf, HBufSize, "<html><head><title>Error</title></head>\n<body><h1>Error</h1>\n<pre>%r</pre>\n</body></html>");
hprint(hout, "%s %s\r\n", hversion, "400 Bad Request");
@ -301,7 +301,7 @@ herror(HConnect *c)
return hflush(hout);
}
int
hnotfound(HConnect *c)
{
@ -331,7 +331,7 @@ fromwebdir(HConnect *c)
char buf[4096], *p, *ext, *type;
int i, fd, n, defaulted;
Dir *d;
if(webroot == nil || strstr(c->req.uri, ".."))
return hnotfound(c);
snprint(buf, sizeof buf-20, "%s/%s", webroot, c->req.uri+1);
@ -430,7 +430,7 @@ xset(HConnect *c)
hflush(&c->hout);
return 0;
}
old = *namedints[i].p;
*namedints[i].p = atoll(value);
hprint(&c->hout, "%s = %d (was %d)\n", name, *namedints[i].p, old);
@ -496,7 +496,7 @@ estats(HConnect *c)
percent(stats.absorbedwrites, stats.dirtydblocks));
hprint(hout, "disk cache flushes=%,ld\n", stats.dcacheflushes);
hprint(hout, "disk cache flush writes=%,ld (%,ld per flush)\n",
hprint(hout, "disk cache flush writes=%,ld (%,ld per flush)\n",
stats.dcacheflushwrites,
stats.dcacheflushwrites/(stats.dcacheflushes ? stats.dcacheflushes : 1));
@ -821,7 +821,7 @@ diskbw(Stats *s)
ulong *n;
n = s->n;
return n[StatApartReadBytes]+n[StatApartWriteBytes]
return n[StatApartReadBytes]+n[StatApartWriteBytes]
+ n[StatIsectReadBytes]+n[StatIsectWriteBytes]
+ n[StatSumReadBytes];
}
@ -882,7 +882,7 @@ static char* graphname[] =
"lcachesize",
"lcachestall",
"lcachelookuptime",
"dcachehit",
"dcachemiss",
"dcachelookup",
@ -931,7 +931,7 @@ static char* graphname[] =
"sumread",
"sumreadbyte",
"cigload",
"cigloadtime",
};
@ -996,7 +996,7 @@ xgraph(HConnect *c)
g.ht = hargint(c, "ht", -1);
dotext = hargstr(c, "text", "")[0] != 0;
g.fill = hargint(c, "fill", -1);
graph = hargstr(c, "graph", "raw");
if(strcmp(graph, "raw") == 0)
g.fn = rawgraph;
@ -1135,14 +1135,14 @@ vtloghdump(Hio *h, VtLog *l)
int i;
VtLogChunk *c;
char *name;
name = l ? l->name : "&lt;nil&gt;";
hprint(h, "<html><head>\n");
hprint(h, "<title>Venti Server Log: %s</title>\n", name);
hprint(h, "</head><body>\n");
hprint(h, "<b>Venti Server Log: %s</b>\n<p>\n", name);
if(l){
c = l->w;
for(i=0; i<l->nchunk; i++){
@ -1165,12 +1165,12 @@ vtloghlist(Hio *h)
{
char **p;
int i, n;
hprint(h, "<html><head>\n");
hprint(h, "<title>Venti Server Logs</title>\n");
hprint(h, "</head><body>\n");
hprint(h, "<b>Venti Server Logs</b>\n<p>\n");
p = vtlognames(&n);
qsort(p, n, sizeof(p[0]), strpcmp);
for(i=0; i<n; i++)

View file

@ -60,14 +60,14 @@ mkihash(int size1)
u32int size;
int bits;
IHash *ih;
bits = 0;
size = 1;
while(size < size1){
bits++;
size <<= 1;
}
ih = vtmallocz(sizeof(IHash)+size*sizeof(ih->table[0]));
ih->table = (IEntry**)(ih+1);
ih->bits = bits;
@ -80,7 +80,7 @@ ihashlookup(IHash *ih, u8int score[VtScoreSize], int type)
{
u32int h;
IEntry *ie;
h = hashbits(score, ih->bits);
for(ie=ih->table[h]; ie; ie=ie->nexthash)
if((type == -1 || type == ie->ia.type) && scorecmp(score, ie->score) == 0)
@ -93,7 +93,7 @@ ihashdelete(IHash *ih, IEntry *ie, char *what)
{
u32int h;
IEntry **l;
h = hashbits(ie->score, ih->bits);
for(l=&ih->table[h]; *l; l=&(*l)->nexthash)
if(*l == ie){
@ -107,7 +107,7 @@ static void
ihashinsert(IHash *ih, IEntry *ie)
{
u32int h;
h = hashbits(ie->score, ih->bits);
ie->nexthash = ih->table[h];
ih->table[h] = ie;
@ -203,7 +203,7 @@ scacheevict(void)
{
ISum *s;
int i;
for(i=icache.nsum-1; i>=0; i--){
s = icache.sum[i];
if(canqlock(&s->lock)){
@ -281,7 +281,7 @@ scachemiss(u64int addr)
qunlock(&s->lock);
return nil;
}
return s; /* locked */
}
@ -294,7 +294,7 @@ initicache(u32int mem0)
{
u32int mem;
int i, entries, scache;
icache.full.l = &icache.lock;
mem = mem0;
@ -312,7 +312,7 @@ fprint(2, "icache %,d bytes = %,d entries; %d scache\n", mem0, entries, scache);
icache.clean.prev = icache.clean.next = &icache.clean;
icache.dirty.prev = icache.dirty.next = &icache.dirty;
icache.free.prev = icache.free.next = (IEntry*)&icache.free;
icache.hash = mkihash(entries);
icache.nentries = entries;
setstat(StatIcacheSize, entries);
@ -338,7 +338,7 @@ static IEntry*
evictlru(void)
{
IEntry *ie;
ie = poplast(&icache.clean);
if(ie == nil)
return nil;
@ -356,7 +356,7 @@ icacheinsert(u8int score[VtScoreSize], IAddr *ia, int state)
while((ie = poplast(&icache.free)) == nil && (ie = evictlru()) == nil){
// Could safely return here if state == IEClean.
// But if state == IEDirty, have to wait to make
// sure we don't lose an index write.
// sure we don't lose an index write.
// Let's wait all the time.
flushdcache();
kickicache();
@ -444,7 +444,7 @@ insertscore(u8int score[VtScoreSize], IAddr *ia, int state, AState *as)
scacheload(toload);
qunlock(&toload->lock);
}
if(icache.ndirty >= icache.maxdirty)
kickicache();
@ -483,7 +483,7 @@ lookupscore(u8int score[VtScoreSize], int type, IAddr *ia)
addstat2(StatIcacheRead, 1, StatIcacheReadTime, msec() - ms);
return ret;
}
u32int
hashbits(u8int *sc, int bits)
{
@ -550,7 +550,7 @@ void
icacheclean(IEntry *ie)
{
IEntry *next;
trace(TraceProc, "icacheclean enter");
qlock(&icache.lock);
for(; ie; ie=next){
@ -574,7 +574,7 @@ emptyicache(void)
int i;
IEntry *ie;
ISum *s;
qlock(&icache.lock);
while((ie = evictlru()) != nil)
pushfirst(&icache.free, ie);
@ -586,4 +586,3 @@ emptyicache(void)
}
qunlock(&icache.lock);
}

View file

@ -81,7 +81,7 @@ nextchunk(Index *ix, ISect *is, IEntry **pie, u64int *paddr, uint *pnbuf)
*pnbuf = nbuf;
return iefirst;
}
static int
icachewritesect(Index *ix, ISect *is, u8int *buf)
{
@ -192,7 +192,7 @@ skipit:
err = -1;
continue;
}
addstat(StatIsectWriteBytes, nbuf);
addstat(StatIsectWrite, 1);
icacheclean(chunk);
@ -264,7 +264,7 @@ icachewritecoord(void *v)
send(ix->sects[i]->writechan, 0);
if(ix->bloom)
send(ix->bloom->writechan, 0);
err = 0;
for(i=0; i<ix->nsects; i++)
err |= recvul(ix->sects[i]->writedonechan);
@ -355,4 +355,3 @@ iesort(IEntry *ie)
*l = nil;
return sorted;
}

View file

@ -1,21 +1,21 @@
/*
* Index, mapping scores to log positions.
* Index, mapping scores to log positions.
*
* The index is made up of some number of index sections, each of
* which is typically stored on a different disk. The blocks in all the
* index sections are logically numbered, with each index section
* which is typically stored on a different disk. The blocks in all the
* index sections are logically numbered, with each index section
* responsible for a range of blocks. Blocks are typically 8kB.
*
* The N index blocks are treated as a giant hash table. The top 32 bits
* of score are used as the key for a lookup. Each index block holds
* one hash bucket, which is responsible for ceil(2^32 / N) of the key space.
*
* The index is sized so that a particular bucket is extraordinarily
* unlikely to overflow: assuming compressed data blocks are 4kB
*
* The index is sized so that a particular bucket is extraordinarily
* unlikely to overflow: assuming compressed data blocks are 4kB
* on disk, and assuming each block has a 40 byte index entry,
* the index data will be 1% of the total data. Since scores are essentially
* random, all buckets should be about the same fullness.
* A factor of 5 gives us a wide comfort boundary to account for
* A factor of 5 gives us a wide comfort boundary to account for
* random variation. So the index disk space should be 5% of the arena disk space.
*/
@ -500,7 +500,7 @@ initisect1(ISect *is)
v = is->part->size & ~(u64int)(is->blocksize - 1);
if(is->blockbase + (u64int)is->blocks * is->blocksize != v){
seterr(ECorrupt, "invalid blocks in index section %s", is->name);
/* ZZZ what to do?
/* ZZZ what to do?
freeisect(is);
return nil;
*/
@ -654,7 +654,7 @@ amapitoag(Index *ix, u64int a, u64int *gstart, u64int *glimit, int *g)
{
u64int aa;
Arena *arena;
arena = amapitoa(ix, a, &aa);
if(arena == nil)
return nil;
@ -895,5 +895,3 @@ loadibucket(Index *ix, u8int *score, ISect **pis, u32int *pbuck, IBucket *ib)
{
return loadibucket1(ix, score, pis, pbuck, ib);
}

View file

@ -178,7 +178,7 @@ writeqlump(Lump *u, Packet *p, int creator, uint ms)
insertlump(u, p);
else
packetfree(p);
if(syncwrites){
flushdcache();
flushicache();

View file

@ -73,7 +73,7 @@ lookuplump(u8int *score, int type)
ms = 0;
trace(TraceLump, "lookuplump enter");
h = hashbits(score, HashLog);
/*
@ -426,4 +426,3 @@ checklumpcache(void)
if(lumpcache.nheap + nfree + refed != lumpcache.nblocks)
sysfatal("lc: missing blocks: %d %d %d %d", lumpcache.nheap, refed, nfree, lumpcache.nblocks);
}

View file

@ -127,7 +127,7 @@ flushqueue(void)
qunlock(&q->lock);
}
}
static void
queueproc(void *vq)
{

View file

@ -105,7 +105,7 @@ rdconf(char *file, Conf *conf)
char *s, *line, *flds[10];
int i, ok;
IFile f;
if(readifile(&f, file) < 0)
return -1;
memset(conf, 0, sizeof *conf);
@ -132,7 +132,7 @@ rdconf(char *file, Conf *conf)
}else if(i == 3 && strcmp(flds[1], "verify") == 0) {
if(conf->nverify%64 == 0)
conf->verify = vtrealloc(conf->verify, (conf->nverify+64)*sizeof(conf->verify[0]));
conf->verify[conf->nverify++] = vtstrdup(flds[2]);
conf->verify[conf->nverify++] = vtstrdup(flds[2]);
}else if(i == 3 && strcmp(flds[1], "verifyfreq") == 0) {
conf->verifyfreq = atoi(flds[2]);
}else if(i == 3 && strcmp(flds[1], "httpaddr") == 0){
@ -186,7 +186,7 @@ logtext(VtLog *l)
int i;
char *p;
VtLogChunk *c;
p = logbuf;
c = l->w;
for(i=0; i<l->nchunk; i++) {
@ -283,7 +283,7 @@ hsettext(HConnect *c)
{
return hsettype(c, "text/plain; charset=utf-8");
}
int
hnotfound(HConnect *c)
{
@ -316,12 +316,12 @@ vtloghlist(Hio *h)
{
char **p;
int i, n;
hprint(h, "<html><head>\n");
hprint(h, "<title>Venti Server Logs</title>\n");
hprint(h, "</head><body>\n");
hprint(h, "<b>Venti Server Logs</b>\n<p>\n");
p = vtlognames(&n);
qsort(p, n, sizeof(p[0]), strpcmp);
for(i=0; i<n; i++)
@ -336,14 +336,14 @@ vtloghdump(Hio *h, VtLog *l)
int i;
VtLogChunk *c;
char *name;
name = l ? l->name : "&lt;nil&gt;";
hprint(h, "<html><head>\n");
hprint(h, "<title>Venti Server Log: %s</title>\n", name);
hprint(h, "</head><body>\n");
hprint(h, "<b>Venti Server Log: %s</b>\n<p>\n", name);
if(l){
c = l->w;
for(i=0; i<l->nchunk; i++){
@ -360,7 +360,7 @@ char*
hargstr(HConnect *c, char *name, char *def)
{
HSPairs *p;
for(p=c->req.searchpairs; p; p=p->next)
if(strcmp(p->s, name) == 0)
return p->t;
@ -446,7 +446,7 @@ httpproc(void *v)
*/
if(hparsereq(c, 0) < 0)
break;
for(i = 0; i < MaxObjs && objs[i].name[0]; i++){
n = strlen(objs[i].name);
if((objs[i].name[n-1] == '/' && strncmp(c->req.uri, objs[i].name, n) == 0)
@ -508,7 +508,7 @@ fromwebdir(HConnect *c)
char buf[4096], *p, *ext, *type;
int i, fd, n, defaulted;
Dir *d;
if(conf.webroot == nil || strstr(c->req.uri, ".."))
return hnotfound(c);
snprint(buf, sizeof buf-20, "%s/%s", conf.webroot, c->req.uri+1);
@ -614,7 +614,7 @@ piper(void *v)
int fd;
char *p;
int ok;
j = v;
fd = j->pipe;
l = j->newlog;
@ -625,7 +625,7 @@ piper(void *v)
}
qlock(&loglk);
p = logtext(l);
ok = j->ok(p);
ok = j->ok(p);
qunlock(&loglk);
j->newok = ok;
close(fd);
@ -808,7 +808,7 @@ threadmain(int argc, char **argv)
int nofork;
char *prog;
Job *j;
ventilogging = 1;
ventifmtinstall();
#ifdef PLAN9PORT
@ -893,8 +893,8 @@ void
qp(Biobuf *b, char *p)
{
int n, nspace;
nspace = 0;
nspace = 0;
n = 0;
for(; *p; p++) {
if(*p == '\n') {
@ -934,7 +934,7 @@ smtpread(Biobuf *b, int code)
{
char *p, *q;
int n;
while((p = Brdstr(b, '\n', 1)) != nil) {
n = strtol(p, &q, 10);
if(n == 0 || q != p+3) {
@ -957,13 +957,13 @@ smtpread(Biobuf *b, int code)
return -1;
}
void
sendmail(char *content, char *subject, char *msg)
{
int fd;
Biobuf *bin, *bout;
if((fd = dial(conf.smtp, 0, 0, 0)) < 0) {
vtlogprint(errlog, "dial %s: %r\n", conf.smtp);
return;
@ -979,7 +979,7 @@ sendmail(char *content, char *subject, char *msg)
Bterm(bout);
return;
}
Bprint(bout, "HELO venti-mgr\n");
Bflush(bout);
if(smtpread(bin, 250) < 0)
@ -994,12 +994,12 @@ sendmail(char *content, char *subject, char *msg)
Bflush(bout);
if(smtpread(bin, 250) < 0)
goto error;
Bprint(bout, "DATA\n");
Bflush(bout);
if(smtpread(bin, 354) < 0)
goto error;
Bprint(bout, "From: \"venti mgr\" <%s>\n", conf.mailfrom);
Bprint(bout, "To: <%s>\n", conf.mailto);
Bprint(bout, "Subject: %s\n", subject);
@ -1013,7 +1013,7 @@ sendmail(char *content, char *subject, char *msg)
Bflush(bout);
if(smtpread(bin, 250) < 0)
goto error;
Bprint(bout, "QUIT\n");
Bflush(bout);
Bterm(bin);

View file

@ -1,5 +1,5 @@
/*
* Mirror one arena partition onto another.
* Mirror one arena partition onto another.
* Be careful to copy only new data.
*/
@ -41,7 +41,7 @@ void
tag(int indx, char *name, char *fmt, ...)
{
va_list arg;
if(tagged){
free(tagged);
tagged = nil;
@ -53,7 +53,7 @@ tag(int indx, char *name, char *fmt, ...)
va_end(arg);
}
enum
enum
{
Sealed = 1,
Mirrored = 2,
@ -99,7 +99,7 @@ setstatus(int bits)
if(bits < 0) {
startindx = -1;
return;
}
}
}
void
@ -132,7 +132,7 @@ ereadpart(Part *p, u64int offset, u8int *buf, u32int count)
}
return 0;
}
int
ewritepart(Part *p, u64int offset, u8int *buf, u32int count)
{
@ -153,7 +153,7 @@ static void
writeproc(void *v)
{
Write *w;
USED(v);
while((w = recvp(writechan)) != nil){
if(w == &wsync)
@ -175,7 +175,7 @@ copy(uvlong start, uvlong end, char *what, DigestState *ds)
static uchar *tmp[2];
uchar *p;
Write w[2];
assert(start <= end);
assert(astart <= start && start < aend);
assert(astart <= end && end <= aend);
@ -240,7 +240,7 @@ copy1(uvlong start, uvlong end, char *what, DigestState *ds)
int n;
uvlong o;
static uchar tmp[1024*1024];
assert(start <= end);
assert(astart <= start && start < aend);
assert(astart <= end && end <= aend);
@ -310,16 +310,16 @@ mirror(int indx, Arena *sa, Arena *da)
ArenaHead h;
DigestState xds, *ds;
vlong shaoff, base;
base = sa->base;
blocksize = sa->blocksize;
end = sa->base + sa->size;
astart = base - blocksize;
aend = end + blocksize;
tag(indx, sa->name, "%T %s (%,llud-%,llud)\n", sa->name, astart, aend);
if(force){
copy(astart, aend, "all", nil);
return;
@ -357,7 +357,7 @@ mirror(int indx, Arena *sa, Arena *da)
if(ewritepart(dst, end, buf, blocksize) < 0)
return;
}
memset(&h, 0, sizeof h);
h.version = da->version;
strcpy(h.name, da->name);
@ -379,7 +379,7 @@ mirror(int indx, Arena *sa, Arena *da)
sha1(buf, blocksize, nil, ds);
shaoff = base;
}
if(sa->diskstats.used != da->diskstats.used){
di = base+rdown(da->diskstats.used, blocksize);
si = base+rup(sa->diskstats.used, blocksize);
@ -389,14 +389,14 @@ mirror(int indx, Arena *sa, Arena *da)
return;
shaoff = si;
}
clumpmax = sa->clumpmax;
di = end - da->diskstats.clumps/clumpmax * blocksize;
si = end - (sa->diskstats.clumps+clumpmax-1)/clumpmax * blocksize;
if(sa->diskstats.sealed){
/*
* might be a small hole between the end of the
* might be a small hole between the end of the
* data and the beginning of the directory.
*/
v = base+rup(sa->diskstats.used, blocksize);
@ -419,7 +419,7 @@ mirror(int indx, Arena *sa, Arena *da)
da->wtime = sa->wtime;
da->diskstats = sa->diskstats;
da->diskstats.sealed = 0;
/*
* Repack the arena tail information
* and save it for next time...
@ -525,7 +525,7 @@ mirrormany(ArenaPart *sp, ArenaPart *dp, char *range)
mirror(i, sa, da);
}
setstatus(-1);
}
}
}
@ -536,7 +536,7 @@ threadmain(int argc, char **argv)
Arena *sa, *da;
ArenaPart *s, *d;
char *ranges;
ventifmtinstall();
ARGBEGIN{
@ -552,7 +552,7 @@ threadmain(int argc, char **argv)
default:
usage();
}ARGEND
if(argc != 2 && argc != 3)
usage();
ranges = nil;
@ -571,7 +571,7 @@ threadmain(int argc, char **argv)
sysfatal("loadarenapart %s: %r", argv[1]);
for(i=0; i<d->narenas; i++)
delarena(d->arenas[i]);
/*
* The arena geometries must match or all bets are off.
*/
@ -589,7 +589,7 @@ threadmain(int argc, char **argv)
if(strcmp(sa->name, da->name) != 0)
sysfatal("arena %d: name mismatch: %s vs %s", i, sa->name, da->name);
}
/*
* Mirror one arena at a time.
*/

View file

@ -56,7 +56,7 @@ strtoullsuf(char *p, char **pp, int rad, u64int *u)
*u = v;
return 0;
}
static int
parsepart(char *name, char **file, char **subpart, u64int *lo, u64int *hi)
{
@ -221,11 +221,11 @@ partblocksize(Part *part, u32int blocksize)
* Most Unix systems require that when accessing a block device directly,
* the buffer, offset, and count are all multiples of the device block size,
* making this a lot more complicated than it otherwise would be.
*
*
* Most of our callers will make things easy on us, but for some callers it's best
* if we just do the work here, with only one place to get it right (hopefully).
*
* If everything is aligned properly, prwb will try to do big transfers in the main
*
* If everything is aligned properly, prwb will try to do big transfers in the main
* body of the loop: up to MaxIo bytes at a time. If everything isn't aligned properly,
* we work one block at a time.
*/
@ -412,7 +412,7 @@ rwpart(Part *part, int isread, u64int offset, u8int *buf, u32int count)
int n, try;
u32int blocksize;
trace(TraceDisk, "%s %s %ud at 0x%llx",
trace(TraceDisk, "%s %s %ud at 0x%llx",
isread ? "read" : "write", part->name, count, offset);
if(offset >= part->size || offset+count > part->size){
seterr(EStrange, "out of bounds %s offset 0x%llux count %ud to partition %s size 0x%llux",
@ -491,7 +491,7 @@ readfile(char *name)
/*
* Search for the Plan 9 partition with the given name.
* This lets you write things like /dev/ad4:arenas
* This lets you write things like /dev/ad4:arenas
* if you move a disk from a Plan 9 system to a FreeBSD system.
*
* God I hope I never write this code again.
@ -566,7 +566,7 @@ findsubpart(Part *part, char *name)
/* See if this is a Plan 9 partition. */
if(tryplan9part(part, name) >= 0)
return 0;
/* Otherwise try for an MBR and then narrow to Plan 9 partition. */
if(readpart(part, 0, buf, 512) != 512)
return -1;
@ -587,8 +587,3 @@ findsubpart(Part *part, char *name)
}
return -1;
}

View file

@ -99,7 +99,7 @@ zread(void *va, void *buf, int n)
b[2] = (b[2]*255)/a;
}
}
}else
}else
b += pixwid*pixels;
z->x += pixels;
@ -148,7 +148,7 @@ memRGBA(Memimage *i)
Memimage *ni;
char buf[32];
ulong dst;
/*
* [A]BGR because we want R,G,B,[A] in big-endian order. Sigh.
*/
@ -157,7 +157,7 @@ memRGBA(Memimage *i)
dst = ABGR32;
else
dst = BGR24;
if(i->chan == dst)
return i;
@ -194,7 +194,7 @@ writepng(Hio *io, Memimage *m)
return -1;
hwrite(io, PNGmagic, sizeof PNGmagic);
/* IHDR chunk */
h = buf;
put4(h, Dx(m->r)); h += 4;

View file

@ -33,7 +33,7 @@ rdarena(Arena *arena)
if(a + bs > e)
bs = arena->blocksize;
if(readpart(arena->part, a, b->data, bs) < 0)
fprint(2, "can't copy %s, read at %lld failed: %r\n", arena->name, a);
fprint(2, "can't copy %s, read at %lld failed: %r\n", arena->name, a);
if(write(1, b->data, bs) != bs)
sysfatal("can't copy %s, write at %lld failed: %r", arena->name, a);
}

View file

@ -18,10 +18,10 @@ threadmain(int argc, char *argv[])
default:
usage();
}ARGEND
if(argc != 1)
usage();
if(readifile(&ifile, argv[0]) < 0)
sysfatal("readifile %s: %r", argv[0]);
write(1, ifile.b->data, ifile.b->len);

View file

@ -97,7 +97,7 @@ verify(Arena *arena, void *data, uchar *newscore)
bs = e - n;
sha1(data, bs, nil, &ds);
}
/* last block */
if(preadblock(data, arena->blocksize, o + e) < 0){
werrstr("read: %r");
@ -113,7 +113,7 @@ verify(Arena *arena, void *data, uchar *newscore)
}
fprint(2, "warning: score mismatch %V != %V\n", score, arena->score);
}
/* prepare new last block */
memset(data, 0, arena->blocksize);
packarena(arena, data);
@ -158,17 +158,17 @@ resealarena(char *name, vlong len)
if(loadheader(name, &head, &arena, off) < 0)
return;
if(!arena.diskstats.sealed){
fprint(2, "%s: not sealed\n", name);
return;
}
if(verify(&arena, data, newscore) < 0){
fprint(2, "%s: failed to verify before reseal: %r\n", name);
return;
}
if(pwriteblock(data, arena.blocksize, arena.base + arena.size) < 0){
fprint(2, "%s: writing new tail: %r\n", name);
return;
@ -188,7 +188,7 @@ static int
shouldcheck(char *name, char **s, int n)
{
int i;
if(n == 0)
return 1;
@ -205,7 +205,7 @@ char *
readap(ArenaPart *ap)
{
char *table;
if(preadblock(data, 8192, PartBlank) < 0)
sysfatal("read arena part header: %r");
if(unpackarenapart(ap, data) < 0)
@ -229,7 +229,7 @@ threadmain(int argc, char *argv[])
vlong start, stop;
ArenaPart ap;
Part *part;
ventifmtinstall();
blocksize = MaxIoSize;
ARGBEGIN{

View file

@ -99,4 +99,3 @@ delaykickroundproc(void *v)
trace(TraceProc, "finishround 0x%ux", (uint)n);
}
}

View file

@ -262,7 +262,7 @@ sortiebucks(IEBucks *ib)
if(n == TWID32)
return TWID64;
if(n != ib->bucks[i].total/IEntrySize)
fprint(2, "bucket %d changed count %d => %d\n",
fprint(2, "bucket %d changed count %d => %d\n",
i, (int)(ib->bucks[i].total/IEntrySize), n);
tot += n;
}

View file

@ -17,7 +17,7 @@ Statdesc statdesc[NStat] =
{ "rpc read cached time", },
{ "rpc read uncached", },
{ "rpc read uncached time "},
{ "rpc writes", },
{ "rpc writes new", },
{ "rpc writes old", },
@ -83,7 +83,7 @@ Statdesc statdesc[NStat] =
{ "sum reads", },
{ "sum read bytes", },
{ "cig loads" },
{ "cig load time" },
};
@ -158,9 +158,9 @@ binstats(long (*fn)(Stats *s0, Stats *s1, void *arg), void *arg,
int i, j, lo, hi, m;
vlong tot;
Statbin *b;
t = stats.now;
/* negative times mean relative to now. */
if(t0 <= 0)
t0 += t;
@ -170,7 +170,7 @@ binstats(long (*fn)(Stats *s0, Stats *s1, void *arg), void *arg,
if(t1 <= t0)
t0 = t1 - 60*10;
if(0) fprint(2, "stats %ld-%ld\n", t0, t1);
/* binary search to find t0-1 or close */
lo = stattime;
hi = stattime+nstathist;
@ -208,5 +208,5 @@ binstats(long (*fn)(Stats *s0, Stats *s1, void *arg), void *arg,
b->avg = tot / b->nsamp;
if(b->nsamp==0 && i>0)
*b = bin[i-1];
}
}
}

View file

@ -11,10 +11,10 @@ syncarenaindex(Arena *arena, u64int a0)
ClumpInfo ci;
IAddr ia;
AState as;
if(arena->diskstats.clumps == arena->memstats.clumps)
return 0;
memset(&as, 0, sizeof as);
as.arena = arena;
as.stats = arena->diskstats;
@ -68,10 +68,10 @@ syncindex(Index *ix)
continue;
}
flushdcache();
if(arena->memstats.clumps == arena->diskstats.clumps)
continue;
fprint(2, "%T %s: indexing %d clumps...\n",
arena->name,
arena->memstats.clumps - arena->diskstats.clumps);

View file

@ -159,7 +159,7 @@ threadmain(int argc, char *argv[])
/*
* block cache: need a block for every arena and every process
*/
minbcmem = maxblocksize *
minbcmem = maxblocksize *
(mainindex->narenas + mainindex->nsects*4 + 16);
if(bcmem < minbcmem)
bcmem = minbcmem;

View file

@ -127,12 +127,12 @@ verifyarena(char *name, vlong len)
scorecp(arena.score, &data[arena.blocksize - VtScoreSize]);
if(namecmp(arena.name, head.name) != 0){
fprint(2, "%T %s: wrong name in trailer: %s vs. %s\n",
fprint(2, "%T %s: wrong name in trailer: %s vs. %s\n",
name, head.name, arena.name);
return;
}
if(arena.version != head.version){
fprint(2, "%T %s: wrong version in trailer: %d vs. %d\n",
fprint(2, "%T %s: wrong version in trailer: %d vs. %d\n",
name, head.version, arena.version);
return;
}
@ -160,7 +160,7 @@ static int
shouldcheck(char *name, char **s, int n)
{
int i;
if(n == 0)
return 1;
@ -209,7 +209,7 @@ threadmain(int argc, char *argv[])
verifyarena("<stdin>", 0);
threadexitsall(nil);
}
if((part = initpart(argv[0], OREAD)) == nil)
sysfatal("open partition %s: %r", argv[0]);
fd = part->fd;
@ -228,7 +228,7 @@ threadmain(int argc, char *argv[])
if(preadblock((uchar*)table, ap.tabsize, ap.tabbase) < 0)
sysfatal("reading arena part directory: %r");
table[ap.tabsize] = 0;
nline = atoi(table);
p = strchr(table, '\n');
if(p)

View file

@ -45,7 +45,7 @@ vtsendthread(void *v)
}
/*
* All the send threads try to exit right when
* threadmain is calling threadexitsall.
* threadmain is calling threadexitsall.
* Either libthread or the Linux NPTL pthreads library
* can't handle this condition (I suspect NPTL but have
* not confirmed this) and we get a seg fault in exit.

View file

@ -65,4 +65,3 @@ void xmlamap(Hio *hout, AMap *s, char *tag, int indent){
xmlu64int(hout, s->stop, "stop");
hprint(hout, "/>\n");
}

View file

@ -93,4 +93,3 @@ zblock2packet(ZBlock *zb, u32int size)
packetappend(p, zb->data, size);
return p;
}

View file

@ -20,7 +20,7 @@ threadmain(int argc, char *argv[])
fmtinstall('V', vtscorefmt);
fmtinstall('F', vtfcallfmt);
ARGBEGIN{
case 'h':
host = EARGF(usage());

View file

@ -85,13 +85,13 @@ threadmain(int argc, char *argv[])
if(vtfilegetentry(f, &e) < 0)
sysfatal("vtfilegetentry: %r");
vtfileunlock(f);
// write directory entry
memset(&root, 0, sizeof root);
vtentrypack(&e, buf, 0);
if(vtwrite(z, root.score, VtDirType, buf, VtEntrySize) < 0)
sysfatal("vtwrite dir: %r");
// write root
strcpy(root.name, "data");
strcpy(root.type, "file");
@ -99,8 +99,7 @@ threadmain(int argc, char *argv[])
vtrootpack(&root, buf);
if(vtwrite(z, score, VtRootType, buf, VtRootSize) < 0)
sysfatal("vtwrite root: %r");
print("file:%V\n", score);
threadexitsall(0);
}