X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=io_u.c;h=e67149d8cd2463e3bb8b06d18a70be9476b7b6d5;hb=07ff5841db8918e66b9873e7e40c64a8780fbf48;hp=ba3f7ca00fcd1db4f657f5dcf7321fc8c9f7ca0e;hpb=36870c47801ca85d1a98c7ec47950b0aa360f865;p=fio.git diff --git a/io_u.c b/io_u.c index ba3f7ca0..e67149d8 100644 --- a/io_u.c +++ b/io_u.c @@ -12,6 +12,7 @@ #include "lib/rand.h" #include "lib/axmap.h" #include "err.h" +#include "lib/pow2.h" struct io_completion_data { int nr; /* input */ @@ -485,7 +486,7 @@ static unsigned int __get_next_buflen(struct thread_data *td, struct io_u *io_u, ~(td->o.verify_interval - 1); if (!td->o.bs_unaligned && is_power_of_2(minbs)) - buflen = (buflen + minbs - 1) & ~(minbs - 1); + buflen &= ~(minbs - 1); } while (!io_u_fits(td, io_u, buflen)); @@ -1896,8 +1897,10 @@ static struct frand_state *get_buf_state(struct thread_data *td) if (!td->o.dedupe_percentage) return &td->buf_state; - else if (td->o.dedupe_percentage == 100) - return &td->buf_state_prev; + else if (td->o.dedupe_percentage == 100) { + frand_copy(&td->buf_state_prev, &td->buf_state); + return &td->buf_state; + } r = __rand(&td->dedupe_state); v = 1 + (int) (100.0 * (r / (FRAND_MAX + 1.0))); @@ -1910,7 +1913,9 @@ static struct frand_state *get_buf_state(struct thread_data *td) static void save_buf_state(struct thread_data *td, struct frand_state *rs) { - if (rs == &td->buf_state) + if (td->o.dedupe_percentage == 100) + frand_copy(rs, &td->buf_state_prev); + else if (rs == &td->buf_state) frand_copy(&td->buf_state_prev, rs); }