From: Jens Axboe Date: Mon, 24 Nov 2014 01:41:11 +0000 (-0700) Subject: lfsr: don't pass in last value to lfsr_next() X-Git-Tag: fio-2.2.0~48 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=6f49f8bc80fbeff3d24cf84278d2611db0ec6f6c lfsr: don't pass in last value to lfsr_next() It's cached in the 'fl' struct. This means we can move the max block calculation outside if the lfsr part, too. Signed-off-by: Jens Axboe --- diff --git a/io_u.c b/io_u.c index c51982d8..33c82f2c 100644 --- a/io_u.c +++ b/io_u.c @@ -83,13 +83,15 @@ struct rand_off { static int __get_next_rand_offset(struct thread_data *td, struct fio_file *f, enum fio_ddir ddir, uint64_t *b) { - uint64_t r, lastb; - - lastb = last_block(td, f, ddir); - if (!lastb) - return 1; + uint64_t r; if (td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE) { + uint64_t lastb; + + lastb = last_block(td, f, ddir); + if (!lastb) + return 1; + r = __rand(&td->random_state); dprint(FD_RANDOM, "off rand %llu\n", (unsigned long long) r); @@ -98,7 +100,7 @@ static int __get_next_rand_offset(struct thread_data *td, struct fio_file *f, } else { uint64_t off = 0; - if (lfsr_next(&f->lfsr, &off, lastb)) + if (lfsr_next(&f->lfsr, &off)) return 1; *b = off; diff --git a/lib/lfsr.c b/lib/lfsr.c index 9fff50d7..0c0072cc 100644 --- a/lib/lfsr.c +++ b/lib/lfsr.c @@ -124,7 +124,7 @@ static inline void __lfsr_next(struct fio_lfsr *fl, unsigned int spin) * c. Check if the calculated value exceeds the desirable range. In this case, * go back to b, else return. */ -int lfsr_next(struct fio_lfsr *fl, uint64_t *off, uint64_t last) +int lfsr_next(struct fio_lfsr *fl, uint64_t *off) { if (fl->num_vals++ > fl->max_val) return 1; diff --git a/lib/lfsr.h b/lib/lfsr.h index 187abf2f..c2d55693 100644 --- a/lib/lfsr.h +++ b/lib/lfsr.h @@ -22,7 +22,7 @@ struct fio_lfsr { unsigned int spin; }; -int lfsr_next(struct fio_lfsr *fl, uint64_t *off, uint64_t); +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);