- /* Adjust nslots up to next power of 2, minimum SEGMENT_SIZE */
- assert (nslots >= 0);
- for (i = SEGMENT_SIZE; i < nslots; i <<= 1) assert (i < (i << 1));
- nslots = i >> SEGMENT_SIZE_SHIFT;
+ if (nslots > SEGMENT_SIZE * DIRECTORY_SIZE)
+ nslots = DIRECTORY_SIZE;
+ else {
+ assert (nslots >= 0);
+ /* Adjust nslots up to next power of 2, minimum SEGMENT_SIZE */
+ for (i = SEGMENT_SIZE; i < nslots; i <<= 1);
+ nslots = i >> SEGMENT_SIZE_SHIFT;
+ }