From: Ming-Hung Tsai Date: Wed, 17 Apr 2019 04:25:10 +0000 (+0800) Subject: rand: fix truncated rand_seed on Windows X-Git-Tag: fio-3.14~17^2 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=9781c080385364d24ac18a95544484864a27611a rand: fix truncated rand_seed on Windows The long data type is 32-bit on LLP64 platforms --- diff --git a/filesetup.c b/filesetup.c index aa1a3945..47c889a0 100644 --- a/filesetup.c +++ b/filesetup.c @@ -1287,7 +1287,7 @@ bool init_random_map(struct thread_data *td) return false; if (td->o.random_generator == FIO_RAND_GEN_LFSR) { - unsigned long seed; + uint64_t seed; seed = td->rand_seeds[FIO_RAND_BLOCK_OFF]; diff --git a/fio.h b/fio.h index b3ba5db2..2103151d 100644 --- a/fio.h +++ b/fio.h @@ -245,7 +245,7 @@ struct thread_data { void *iolog_buf; FILE *iolog_f; - unsigned long rand_seeds[FIO_RAND_NR_OFFS]; + uint64_t rand_seeds[FIO_RAND_NR_OFFS]; struct frand_state bsrange_state[DDIR_RWDIR_CNT]; struct frand_state verify_state; diff --git a/init.c b/init.c index e6378715..73834279 100644 --- a/init.c +++ b/init.c @@ -1217,7 +1217,7 @@ static void init_flags(struct thread_data *td) static int setup_random_seeds(struct thread_data *td) { - unsigned long seed; + uint64_t seed; unsigned int i; if (!td->o.rand_repeatable && !fio_option_is_set(&td->o, rand_seed)) { diff --git a/lib/lfsr.c b/lib/lfsr.c index 32fbec56..1ef6ebbf 100644 --- a/lib/lfsr.c +++ b/lib/lfsr.c @@ -232,7 +232,7 @@ static int prepare_spin(struct fio_lfsr *fl, unsigned int spin) return 0; } -int lfsr_reset(struct fio_lfsr *fl, unsigned long seed) +int lfsr_reset(struct fio_lfsr *fl, uint64_t seed) { uint64_t bitmask = (fl->cached_bit << 1) - 1; @@ -246,8 +246,8 @@ int lfsr_reset(struct fio_lfsr *fl, unsigned long seed) return 0; } -int lfsr_init(struct fio_lfsr *fl, uint64_t nums, unsigned long seed, - unsigned int spin) +int lfsr_init(struct fio_lfsr *fl, uint64_t nums, uint64_t seed, + unsigned int spin) { uint8_t *taps; diff --git a/lib/lfsr.h b/lib/lfsr.h index c2d55693..95bc07fd 100644 --- a/lib/lfsr.h +++ b/lib/lfsr.h @@ -24,7 +24,7 @@ struct fio_lfsr { int lfsr_next(struct fio_lfsr *fl, uint64_t *off); int lfsr_init(struct fio_lfsr *fl, uint64_t size, - unsigned long seed, unsigned int spin); -int lfsr_reset(struct fio_lfsr *fl, unsigned long seed); + uint64_t seed, unsigned int spin); +int lfsr_reset(struct fio_lfsr *fl, uint64_t seed); #endif diff --git a/lib/rand.c b/lib/rand.c index f18bd8d8..69acb06c 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -95,7 +95,7 @@ void init_rand_seed(struct frand_state *state, unsigned int seed, bool use64) __init_rand64(&state->state64, seed); } -void __fill_random_buf(void *buf, unsigned int len, unsigned long seed) +void __fill_random_buf(void *buf, unsigned int len, uint64_t seed) { void *ptr = buf; @@ -122,10 +122,10 @@ void __fill_random_buf(void *buf, unsigned int len, unsigned long seed) } } -unsigned long fill_random_buf(struct frand_state *fs, void *buf, - unsigned int len) +uint64_t fill_random_buf(struct frand_state *fs, void *buf, + unsigned int len) { - unsigned long r = __rand(fs); + uint64_t r = __rand(fs); if (sizeof(int) != sizeof(long *)) r *= (unsigned long) __rand(fs); @@ -134,7 +134,7 @@ unsigned long fill_random_buf(struct frand_state *fs, void *buf, return r; } -void __fill_random_buf_percentage(unsigned long seed, void *buf, +void __fill_random_buf_percentage(uint64_t seed, void *buf, unsigned int percentage, unsigned int segment, unsigned int len, char *pattern, unsigned int pbytes) @@ -183,12 +183,12 @@ void __fill_random_buf_percentage(unsigned long seed, void *buf, } } -unsigned long fill_random_buf_percentage(struct frand_state *fs, void *buf, - unsigned int percentage, - unsigned int segment, unsigned int len, - char *pattern, unsigned int pbytes) +uint64_t fill_random_buf_percentage(struct frand_state *fs, void *buf, + unsigned int percentage, + unsigned int segment, unsigned int len, + char *pattern, unsigned int pbytes) { - unsigned long r = __rand(fs); + uint64_t r = __rand(fs); if (sizeof(int) != sizeof(long *)) r *= (unsigned long) __rand(fs); diff --git a/lib/rand.h b/lib/rand.h index 1676cf98..95d4f6d4 100644 --- a/lib/rand.h +++ b/lib/rand.h @@ -150,9 +150,9 @@ static inline uint64_t rand_between(struct frand_state *state, uint64_t start, extern void init_rand(struct frand_state *, bool); extern void init_rand_seed(struct frand_state *, unsigned int seed, bool); -extern void __fill_random_buf(void *buf, unsigned int len, unsigned long seed); -extern unsigned long fill_random_buf(struct frand_state *, void *buf, unsigned int len); -extern void __fill_random_buf_percentage(unsigned long, void *, unsigned int, unsigned int, unsigned int, char *, unsigned int); -extern unsigned long fill_random_buf_percentage(struct frand_state *, void *, unsigned int, unsigned int, unsigned int, char *, unsigned int); +extern void __fill_random_buf(void *buf, unsigned int len, uint64_t seed); +extern uint64_t fill_random_buf(struct frand_state *, void *buf, unsigned int len); +extern void __fill_random_buf_percentage(uint64_t, void *, unsigned int, unsigned int, unsigned int, char *, unsigned int); +extern uint64_t fill_random_buf_percentage(struct frand_state *, void *, unsigned int, unsigned int, unsigned int, char *, unsigned int); #endif diff --git a/os/os-windows.h b/os/os-windows.h index ef955dc3..dc958f5c 100644 --- a/os/os-windows.h +++ b/os/os-windows.h @@ -167,7 +167,7 @@ static inline int gettid(void) return GetCurrentThreadId(); } -static inline int init_random_seeds(unsigned long *rand_seeds, int size) +static inline int init_random_seeds(uint64_t *rand_seeds, int size) { HCRYPTPROV hCryptProv; diff --git a/os/os.h b/os/os.h index 36b6bb2e..756ece4b 100644 --- a/os/os.h +++ b/os/os.h @@ -323,7 +323,7 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) #endif #ifdef FIO_USE_GENERIC_INIT_RANDOM_STATE -static inline int init_random_seeds(unsigned long *rand_seeds, int size) +static inline int init_random_seeds(uint64_t *rand_seeds, int size) { int fd; diff --git a/verify.c b/verify.c index da429e79..f79ab43a 100644 --- a/verify.c +++ b/verify.c @@ -39,14 +39,14 @@ void fill_buffer_pattern(struct thread_data *td, void *p, unsigned int len) (void)cpy_pattern(td->o.buffer_pattern, td->o.buffer_pattern_bytes, p, len); } -static void __fill_buffer(struct thread_options *o, unsigned long seed, void *p, +static void __fill_buffer(struct thread_options *o, uint64_t seed, void *p, unsigned int len) { __fill_random_buf_percentage(seed, p, o->compress_percentage, len, len, o->buffer_pattern, o->buffer_pattern_bytes); } -static unsigned long fill_buffer(struct thread_data *td, void *p, - unsigned int len) +static uint64_t fill_buffer(struct thread_data *td, void *p, + unsigned int len) { struct frand_state *fs = &td->verify_state; struct thread_options *o = &td->o; @@ -55,7 +55,7 @@ static unsigned long fill_buffer(struct thread_data *td, void *p, } void fill_verify_pattern(struct thread_data *td, void *p, unsigned int len, - struct io_u *io_u, unsigned long seed, int use_seed) + struct io_u *io_u, uint64_t seed, int use_seed) { struct thread_options *o = &td->o; @@ -100,7 +100,7 @@ static unsigned int get_hdr_inc(struct thread_data *td, struct io_u *io_u) } static void fill_pattern_headers(struct thread_data *td, struct io_u *io_u, - unsigned long seed, int use_seed) + uint64_t seed, int use_seed) { unsigned int hdr_inc, header_num; struct verify_header *hdr; diff --git a/verify.h b/verify.h index 64121a51..539e6f6c 100644 --- a/verify.h +++ b/verify.h @@ -97,7 +97,7 @@ extern void populate_verify_io_u(struct thread_data *, struct io_u *); extern int __must_check get_next_verify(struct thread_data *td, struct io_u *); extern int __must_check verify_io_u(struct thread_data *, struct io_u **); extern int verify_io_u_async(struct thread_data *, struct io_u **); -extern void fill_verify_pattern(struct thread_data *td, void *p, unsigned int len, struct io_u *io_u, unsigned long seed, int use_seed); +extern void fill_verify_pattern(struct thread_data *td, void *p, unsigned int len, struct io_u *io_u, uint64_t seed, int use_seed); extern void fill_buffer_pattern(struct thread_data *td, void *p, unsigned int len); extern void fio_verify_init(struct thread_data *td);