diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rand.c | 23 | ||||
-rw-r--r-- | lib/rand.h | 3 |
2 files changed, 17 insertions, 9 deletions
@@ -59,18 +59,25 @@ void init_rand(struct frand_state *state) __rand(state); } -void fill_random_buf(void *buf, unsigned int len) +void __fill_random_buf(void *buf, unsigned int len, unsigned long seed) { - unsigned long r = __rand(&__fio_rand_state); long *ptr = buf; - if (sizeof(int) != sizeof(*ptr)) - r *= (unsigned long) __rand(&__fio_rand_state); - while ((void *) ptr - buf < len) { - *ptr = r; + *ptr = seed; ptr++; - r *= GOLDEN_RATIO_PRIME; - r >>= 3; + seed *= GOLDEN_RATIO_PRIME; + seed >>= 3; } } + +unsigned long fill_random_buf(void *buf, unsigned int len) +{ + unsigned long r = __rand(&__fio_rand_state); + + if (sizeof(int) != sizeof(long *)) + r *= (unsigned long) __rand(&__fio_rand_state); + + __fill_random_buf(buf, len, r); + return r; +} @@ -19,6 +19,7 @@ static inline unsigned int __rand(struct frand_state *state) } extern void init_rand(struct frand_state *); -extern void fill_random_buf(void *buf, unsigned int len); +extern void __fill_random_buf(void *buf, unsigned int len, unsigned long seed); +extern unsigned long fill_random_buf(void *buf, unsigned int len); #endif |