st->size[1] = 1;
st->size[2] = 5;
st->size[3] = 9;
- BUG_ON(9 > SEG_MAX_HEIGHT);
+ BUG_ON(SEG_NUM_HEIGHTS <= 9);
st->unused.first = st->unused.last = 0xffff;
st->cleanable.first = st->cleanable.last = 0xffff;
st->clean.first = st->clean.last = 0xffff;
st->unused.cnt = st->free.cnt = st->cleanable.cnt = 0;
- for (h = 0; h < SEG_MAX_HEIGHT; h++)
+ for (h = 0; h < SEG_NUM_HEIGHTS; h++)
st->head[h] = 0xFFFF;
/* how many entries in each page */
}
static struct segstat *segfind(struct segtracker *st, u16 dev,
- u32 segnum, u16 *where[SEG_MAX_HEIGHT])
+ u32 segnum, u16 *where[SEG_NUM_HEIGHTS])
{
/* Find the segment entry for dev/segnum.
* Return link info in where to allow insertion/deletion.
*/
int level;
u16 *head = st->head;
- for (level = SEG_MAX_HEIGHT-1 ; level >= 0; level--) {
+ for (level = SEG_NUM_HEIGHTS-1 ; level >= 0; level--) {
while (head[level] != 0xffff &&
statcmp(segfollow(st, head[level]), dev, segnum) < 0) {
head = segfollow(st, head[level])->skip;
static int segchoose_height(struct segtracker *st, u16 ssn)
{
- unsigned long rand[DIV_ROUND_UP(SEG_MAX_HEIGHT * 2 / 8 + 1,
+ unsigned long rand[DIV_ROUND_UP(SEG_NUM_HEIGHTS * 2 / 8 + 1,
sizeof(unsigned long))];
int max = st->size[ssn>>12];
int h = 0;
}
static void seginsert(struct segtracker *st, u16 ssn,
- u16 *where[SEG_MAX_HEIGHT])
+ u16 *where[SEG_NUM_HEIGHTS])
{
/* We looked for 'ss' but didn't find it. 'where' is the
* result of looking. Now insert 'ss'
/* This segstat has just been removed from a list (free or cleanable).
* Remove it from the skiplist as well
*/
- u16 *where[SEG_MAX_HEIGHT];
+ u16 *where[SEG_NUM_HEIGHTS];
struct segstat *ss2 = segfind(st, ss->dev, ss->segment, where);
int h;
int pos;
BUG_ON(ss2 != ss);
pos = *where[0];
- for (h = 0; h < SEG_MAX_HEIGHT && *where[h] == pos ; h++)
+ for (h = 0; h < SEG_NUM_HEIGHTS && *where[h] == pos ; h++)
*where[h] = ss->skip[h];
ss->next = st->unused.first;
st->unused.first = pos;
/* walk entire skip list. Any entry with score of 0xFFFFFFFF
* is deleted
*/
- u16 *where[SEG_MAX_HEIGHT];
+ u16 *where[SEG_NUM_HEIGHTS];
int h;
- for (h = SEG_MAX_HEIGHT-1; h >= 0; h--)
+ for (h = SEG_NUM_HEIGHTS-1; h >= 0; h--)
where[h] = &st->head[h];
while (*where[0] != 0xFFFF) {
putdref(ssm->youthblk, MKREF(intable));
ss_put(ssm, fs);
- for (h = 0; h < SEG_MAX_HEIGHT && *where[h] == pos; h++)
+ for (h = 0; h < SEG_NUM_HEIGHTS && *where[h] == pos; h++)
*where[h] = ss->skip[h];
ss->next = st->unused.first;
st->unused.first = pos;
lafs_check_seg_cnt(st);
} else {
/* advance 'where' to here */
- for (h = 0; h < SEG_MAX_HEIGHT && *where[h] == pos; h++)
+ for (h = 0; h < SEG_NUM_HEIGHTS && *where[h] == pos; h++)
where[h] = &ss->skip[h];
}
}
{
/* This dev/seg is known to be free. add it to the list */
struct segstat *ss;
- u16 *where[SEG_MAX_HEIGHT];
+ u16 *where[SEG_NUM_HEIGHTS];
int ssn;
//printk("add_free %d %d\n", (int)dev, (int)seg);
spin_lock(&fs->lock);
* implies a reference count).
*/
struct segstat *ss;
- u16 *where[SEG_MAX_HEIGHT];
+ u16 *where[SEG_NUM_HEIGHTS];
int ssn;
dprintk("ADD CLEAN %d/%d %d #####################################\n",
struct segstat *ss;
int ssn;
u32 segsize;
- u16 *where[SEG_MAX_HEIGHT];
+ u16 *where[SEG_NUM_HEIGHTS];
WARN_ON(lafs_check_seg_cnt(fs->segtrack));
if (fs->scan.trace || lafs_trace)