fix buildindex minibuf sizing bug
This commit is contained in:
parent
6a5a2a9562
commit
1d53bf4a03
1 changed files with 13 additions and 9 deletions
|
|
@ -68,7 +68,7 @@ threadmain(int argc, char *argv[])
|
||||||
usage();
|
usage();
|
||||||
break;
|
break;
|
||||||
}ARGEND
|
}ARGEND
|
||||||
|
|
||||||
if(argc != 1)
|
if(argc != 1)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
|
|
@ -324,7 +324,7 @@ bflush(Buf *buf)
|
||||||
u32int bufsize;
|
u32int bufsize;
|
||||||
|
|
||||||
if(buf->woffset >= buf->eoffset)
|
if(buf->woffset >= buf->eoffset)
|
||||||
sysfatal("buf index chunk overflow - need bufger index");
|
sysfatal("buf index chunk overflow - need bigger index");
|
||||||
bufsize = buf->ep - buf->bp;
|
bufsize = buf->ep - buf->bp;
|
||||||
if(writepart(buf->part, buf->woffset, buf->bp, bufsize) < 0){
|
if(writepart(buf->part, buf->woffset, buf->bp, bufsize) < 0){
|
||||||
fprint(2, "write %s: %r\n", buf->part->name);
|
fprint(2, "write %s: %r\n", buf->part->name);
|
||||||
|
|
@ -781,7 +781,7 @@ isectproc(void *v)
|
||||||
xminiclump = isectmem/2/IEntrySize;
|
xminiclump = isectmem/2/IEntrySize;
|
||||||
|
|
||||||
/* total number of minibufs we need */
|
/* total number of minibufs we need */
|
||||||
prod = xclump / xminiclump;
|
prod = (xclump+xminiclump-1) / xminiclump;
|
||||||
|
|
||||||
/* if possible, skip second pass */
|
/* if possible, skip second pass */
|
||||||
if(!dumb && prod*MinBufSize < isectmem){
|
if(!dumb && prod*MinBufSize < isectmem){
|
||||||
|
|
@ -801,7 +801,6 @@ isectproc(void *v)
|
||||||
bufsize *= 2;
|
bufsize *= 2;
|
||||||
data = emalloc(nbuf*bufsize);
|
data = emalloc(nbuf*bufsize);
|
||||||
epbuf = bufsize/IEntrySize;
|
epbuf = bufsize/IEntrySize;
|
||||||
|
|
||||||
fprint(2, "%T %s: %,ud buckets, %,ud groups, %,ud minigroups, %,ud buffer\n",
|
fprint(2, "%T %s: %,ud buckets, %,ud groups, %,ud minigroups, %,ud buffer\n",
|
||||||
is->part->name, nbucket, nbuf, nminibuf, bufsize);
|
is->part->name, nbucket, nbuf, nminibuf, bufsize);
|
||||||
/*
|
/*
|
||||||
|
|
@ -859,9 +858,15 @@ isectproc(void *v)
|
||||||
/*
|
/*
|
||||||
* Rearrange entries into minibuffers and then
|
* Rearrange entries into minibuffers and then
|
||||||
* split each minibuffer into buckets.
|
* split each minibuffer into buckets.
|
||||||
|
* The minibuffer must be sized so that it is
|
||||||
|
* a multiple of blocksize -- ipoolloadblock assumes
|
||||||
|
* that each minibuf starts aligned on a blocksize
|
||||||
|
* boundary.
|
||||||
*/
|
*/
|
||||||
mbuf = MKN(Minibuf, nminibuf);
|
mbuf = MKN(Minibuf, nminibuf);
|
||||||
mbufbuckets = (bufbuckets+nminibuf-1)/nminibuf;
|
mbufbuckets = (bufbuckets+nminibuf-1)/nminibuf;
|
||||||
|
while(mbufbuckets*blocksize % bufsize)
|
||||||
|
mbufbuckets++;
|
||||||
for(i=0; i<nbuf; i++){
|
for(i=0; i<nbuf; i++){
|
||||||
/*
|
/*
|
||||||
* Set up descriptors.
|
* Set up descriptors.
|
||||||
|
|
@ -873,11 +878,10 @@ isectproc(void *v)
|
||||||
for(j=0; j<nminibuf; j++){
|
for(j=0; j<nminibuf; j++){
|
||||||
mb = &mbuf[j];
|
mb = &mbuf[j];
|
||||||
mb->boffset = offset;
|
mb->boffset = offset;
|
||||||
if(j < nminibuf-1){
|
offset += mbufbuckets*blocksize;
|
||||||
offset += mbufbuckets*blocksize;
|
if(offset > buf[i].eoffset)
|
||||||
mb->eoffset = offset;
|
offset = buf[i].eoffset;
|
||||||
}else
|
mb->eoffset = offset;
|
||||||
mb->eoffset = buf[i].eoffset;
|
|
||||||
mb->roffset = mb->boffset;
|
mb->roffset = mb->boffset;
|
||||||
mb->woffset = mb->boffset;
|
mb->woffset = mb->boffset;
|
||||||
mb->nentry = epbuf * (mb->eoffset - mb->boffset)/bufsize;
|
mb->nentry = epbuf * (mb->eoffset - mb->boffset)/bufsize;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue