[PATCH] Fix spin related bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux