On the previous patch on cycle detection, we would incremet spin value when: num_vals % cycle_length == 0 which would evaluate always to true for the first iteration since we start with num_vals = 0. Only one corner-case is affected by this bug and this patch should fix it. Signed-off-by: Alex Pyrgiotis <apyrgio@xxxxxxxx> diff --git a/lib/lfsr.c b/lib/lfsr.c index a835404..4c15c62 100644 --- a/lib/lfsr.c +++ b/lib/lfsr.c @@ -108,22 +108,28 @@ static inline void __lfsr_next(struct fio_lfsr *fl, unsigned int spin) } } +/* + * lfsr_next does the following: + * + * a. Return if the number of max values has been exceeded. + * b. Check if the next iteration(s) produce a cycle (due to spin) and add "1" + * where necessary. + * c. Calculate the next value and return. + */ int lfsr_next(struct fio_lfsr *fl, uint64_t *off, uint64_t last) { int repeat; unsigned int spin; + if (fl->num_vals++ > fl->max_val) + return 1; + repeat = fl->num_vals % fl->cycle_length; if (repeat == 0) spin = fl->spin + 1; else spin = fl->spin; - if (fl->num_vals > fl->max_val) - return 1; - - fl->num_vals++; - do { __lfsr_next(fl, spin); } while (fl->last_val > fl->max_val); -- 1.8.1.4 -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html