lfsr: Fix spin related bug
[fio.git] / lib / lfsr.c
index a83540494fc1964aebb7d89fad86a730030ab211..4c15c6256f9a1d41ab95a1bfdb0d8e59fb92796a 100644 (file)
@@ -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);