| 22 |
|
#define PCTFREE 15 /* maximum fraction to free (%) */ |
| 23 |
|
#endif |
| 24 |
|
#ifndef MAXFRAG |
| 25 |
< |
#define MAXFRAG 32767 /* maximum fragments/file to track (0==inf) */ |
| 25 |
> |
#define MAXFRAG 8191 /* maximum fragments/file to track (0==inf) */ |
| 26 |
|
#endif |
| 27 |
+ |
#ifndef MINDIRSEL |
| 28 |
+ |
/* minimum directory seek length */ |
| 29 |
+ |
#define MINDIRSEL (4*BUFSIZ/sizeof(BEAMI)) |
| 30 |
+ |
#endif |
| 31 |
|
|
| 32 |
|
#ifndef BSD |
| 33 |
|
#define write writebuf /* safe i/o routines */ |
| 208 |
|
} |
| 209 |
|
copystruct(hp->dirseg+j, hp->dirseg+(j-1)); |
| 210 |
|
} |
| 211 |
< |
mindist = nbeams(hp); /* find closest neighbors */ |
| 212 |
< |
for (j = hp->dirty; --j; ) |
| 213 |
< |
if (hp->dirseg[j].s - (hp->dirseg[j-1].s + hp->dirseg[j-1].n) |
| 214 |
< |
< mindist) { |
| 215 |
< |
mindist = hp->dirseg[j].s - |
| 211 |
> |
do { /* check neighbors */ |
| 212 |
> |
mindist = nbeams(hp); /* find closest */ |
| 213 |
> |
for (j = hp->dirty; --j; ) |
| 214 |
> |
if (hp->dirseg[j].s - |
| 215 |
> |
(hp->dirseg[j-1].s + hp->dirseg[j-1].n) |
| 216 |
> |
< mindist) { |
| 217 |
> |
minpos = j; |
| 218 |
> |
mindist = hp->dirseg[j].s - |
| 219 |
|
(hp->dirseg[j-1].s + hp->dirseg[j-1].n); |
| 220 |
< |
minpos = j; |
| 221 |
< |
} |
| 222 |
< |
if (hp->dirty > MAXDIRSE || mindist <= BUFSIZ/sizeof(BEAMI)) { |
| 220 |
> |
} |
| 221 |
> |
/* good enough? */ |
| 222 |
> |
if (hp->dirty <= MAXDIRSE && mindist > MINDIRSEL) |
| 223 |
> |
break; |
| 224 |
|
j = minpos - 1; /* coalesce neighbors */ |
| 225 |
|
if (hp->dirseg[j].s + hp->dirseg[j].n < |
| 226 |
< |
hp->dirseg[minpos].s + hp->dirseg[minpos].n) { |
| 226 |
> |
hp->dirseg[minpos].s + hp->dirseg[minpos].n) |
| 227 |
|
hp->dirseg[j].n = hp->dirseg[minpos].s + |
| 228 |
|
hp->dirseg[minpos].n - hp->dirseg[j].s; |
| 229 |
< |
} |
| 230 |
< |
hp->dirty--; /* close the gap */ |
| 223 |
< |
for (j = minpos; j < hp->dirty; j++) |
| 229 |
> |
hp->dirty--; |
| 230 |
> |
while (++j < hp->dirty) /* close the gap */ |
| 231 |
|
copystruct(hp->dirseg+j, hp->dirseg+(j+1)); |
| 232 |
< |
} |
| 232 |
> |
} while (mindist <= MINDIRSEL); |
| 233 |
|
} |
| 234 |
|
|
| 235 |
|
|