st->cleanable.first = st->cleanable.last = 0xffff;
st->free.first = st->free.last = 0xffff;
st->clean.first = st->clean.last = 0xffff;
- st->unused.cnt = st->free.cnt = st->cleanable.cnt = 0;
+ st->unused.cnt = st->free.cnt = st->cleanable.cnt = st->clean.cnt = 0;
for (h = 0; h < SEG_NUM_HEIGHTS; h++)
st->head[h] = 0xFFFF;
*where[h] = ss2->skip[h];
ss2->next = st->unused.first;
st->unused.first = pos;
+ if (st->unused.cnt == 0)
+ st->unused.last = pos;
st->unused.cnt++;
lafs_check_seg_cnt(st);
- // FIXME what about 'last' ??
}
static void segdelete_all(struct segtracker *st, struct fs *fs)
*where[h] = ss->skip[h];
ss->next = st->unused.first;
st->unused.first = pos;
+ if (st->unused.cnt == 0)
+ st->unused.last = pos;
st->unused.cnt++;
lafs_check_seg_cnt(st);
} else {