diff options
author | rsc <devnull@localhost> | 2007-04-21 19:40:55 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2007-04-21 19:40:55 +0000 |
commit | 27d28098203579f0735ba6400641e9be94eb12f8 (patch) | |
tree | 9e0f390ced0de8c582ef3226c420daa18d16ac24 /src/cmd/venti/srv/bloom.c | |
parent | 33433b3fde56d9b3ac6de6ee2584416b82bc856f (diff) | |
download | plan9port-27d28098203579f0735ba6400641e9be94eb12f8.tar.gz plan9port-27d28098203579f0735ba6400641e9be94eb12f8.tar.bz2 plan9port-27d28098203579f0735ba6400641e9be94eb12f8.zip |
sync with mit plan 9 version
Diffstat (limited to 'src/cmd/venti/srv/bloom.c')
-rw-r--r-- | src/cmd/venti/srv/bloom.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmd/venti/srv/bloom.c b/src/cmd/venti/srv/bloom.c index 7ea5f640..04fd6510 100644 --- a/src/cmd/venti/srv/bloom.c +++ b/src/cmd/venti/srv/bloom.c @@ -27,7 +27,7 @@ bloominit(Bloom *b, vlong vsize, u8int *data) return -1; fprint(2, "bloom size %lud nhash %d\n", b->size, b->nhash); - b->mask = b->size-1; + b->bitmask = (b->size<<3) - 1; b->data = data; return 0; } @@ -47,11 +47,17 @@ readbloom(Part *p) b = vtmallocz(sizeof *b); if(readpart(p, 0, buf, sizeof buf) < 0) return nil; + /* + * pass buf as b->data so that bloominit + * can parse header. won't be used for + * accessing bits (cleared below). + */ if(bloominit(b, 0, buf) < 0){ vtfree(b); return nil; } b->part = p; + b->data = nil; return b; } @@ -61,7 +67,6 @@ resetbloom(Bloom *b) uchar *data; data = vtmallocz(b->size); -fprint(2, "bloom data %lud\n", b->size); b->data = data; if(b->size == MaxBloomSize) /* 2^32 overflows ulong */ addstat(StatBloomBits, b->size*8-1); @@ -145,7 +150,7 @@ _markbloomfilter(Bloom *b, u8int *score) tab = (u32int*)b->data; for(i=0; i<b->nhash; i++){ x = h[i]; - y = &tab[(x&b->mask)>>5]; + y = &tab[(x&b->bitmask)>>5]; z = 1<<(x&31); if(!(*y&z)){ nnew++; @@ -169,7 +174,7 @@ _inbloomfilter(Bloom *b, u8int *score) tab = (u32int*)b->data; for(i=0; i<b->nhash; i++){ x = h[i]; - if(!(tab[(x&b->mask)>>5] & (1<<(x&31)))) + if(!(tab[(x&b->bitmask)>>5] & (1<<(x&31)))) return 0; } return 1; |