Compression fixes
- memset() remainder of buffer instead of copying random segment.
Provides more reliable compression (yes yes, you told me so).
- Allow 100 as well, just means full memset. Make that just set
zero_buffers=1 instead, since we only need to do it once
instead of for every write.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/lib/rand.c b/lib/rand.c
index 66d0472..995035f 100644
--- a/lib/rand.c
+++ b/lib/rand.c
@@ -34,7 +34,6 @@
*/
#include <string.h>
-#include <assert.h>
#include "rand.h"
#include "../hash.h"
@@ -95,10 +94,16 @@
unsigned int percentage,
unsigned int segment, unsigned int len)
{
- unsigned int this_len, rep_len;
unsigned long r = __rand(fs);
+ unsigned int this_len;
- assert(segment <= len);
+ if (percentage == 100) {
+ memset(buf, 0, len);
+ return 0;
+ }
+
+ if (segment > len)
+ segment = len;
if (sizeof(int) != sizeof(long *))
r *= (unsigned long) __rand(fs);
@@ -116,16 +121,10 @@
len -= this_len;
buf += this_len;
- /*
- * Now duplicate random chunk in rest of buf
- */
- rep_len = segment - this_len;
- if (rep_len > len)
- rep_len = len;
+ if (this_len > len)
+ this_len = len;
- memcpy(buf, buf + rep_len, rep_len);
- buf += rep_len;
- len -= rep_len;
+ memset(buf, 0, this_len);
}
return r;