|
@@ -2457,7 +2457,6 @@ union freelist_init_state {
|
|
|
unsigned int pos;
|
|
|
unsigned int *list;
|
|
|
unsigned int count;
|
|
|
- unsigned int rand;
|
|
|
};
|
|
|
struct rnd_state rnd_state;
|
|
|
};
|
|
@@ -2483,8 +2482,7 @@ static bool freelist_state_initialize(union freelist_init_state *state,
|
|
|
} else {
|
|
|
state->list = cachep->random_seq;
|
|
|
state->count = count;
|
|
|
- state->pos = 0;
|
|
|
- state->rand = rand;
|
|
|
+ state->pos = rand % count;
|
|
|
ret = true;
|
|
|
}
|
|
|
return ret;
|
|
@@ -2493,7 +2491,9 @@ static bool freelist_state_initialize(union freelist_init_state *state,
|
|
|
/* Get the next entry on the list and randomize it using a random shift */
|
|
|
static freelist_idx_t next_random_slot(union freelist_init_state *state)
|
|
|
{
|
|
|
- return (state->list[state->pos++] + state->rand) % state->count;
|
|
|
+ if (state->pos >= state->count)
|
|
|
+ state->pos = 0;
|
|
|
+ return state->list[state->pos++];
|
|
|
}
|
|
|
|
|
|
/* Swap two freelist entries */
|