Add verify_pattern option

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/verify.c b/verify.c
index d98dfcf..5770b46 100644
--- a/verify.c
+++ b/verify.c
@@ -8,8 +8,7 @@
 
 #include "fio.h"
 
-static void fill_random_bytes(struct thread_data *td,
-			      void *p, unsigned int len)
+static void fill_random_bytes(struct thread_data *td, void *p, unsigned int len)
 {
 	unsigned int todo;
 	int r;
@@ -32,9 +31,52 @@
 	}
 }
 
-void memswp(void* buf1, void* buf2, unsigned int len)
+static void fill_pattern(struct thread_data *td, void *p, unsigned int len)
+{
+	switch (td->o.verify_pattern_bytes) {
+	case 0:
+		fill_random_bytes(td, p, len);
+		break;
+	case 1:
+		memset(p, td->o.verify_pattern, len);
+		break;
+	case 2:
+	case 3:
+	case 4: {
+		unsigned int pattern = td->o.verify_pattern;
+		unsigned int i = 0;
+		unsigned char c1, c2, c3, c4;
+		unsigned char *b = p;
+
+		c1 = pattern & 0xff;
+		pattern >>= 8;
+		c2 = pattern & 0xff;
+		pattern >>= 8;
+		c3 = pattern & 0xff;
+		pattern >>= 8;
+		c4 = pattern & 0xff;
+
+		while (i < len) {
+			b[i++] = c1;
+			if (i == len)
+				break;
+			b[i++] = c2;
+			if (td->o.verify_pattern_bytes == 2 || i == len)
+				continue;
+			b[i++] = c3;
+			if (td->o.verify_pattern_bytes == 3 || i == len)
+				continue;
+			b[i++] = c4;
+		}
+		break;
+		}
+	}
+}
+
+static void memswp(void* buf1, void* buf2, unsigned int len)
 {
 	struct verify_header swap;
+
 	memcpy(&swap, buf1, len);
 	memcpy(buf1, buf2, len);
 	memcpy(buf2, &swap, len);
@@ -254,7 +296,7 @@
 	if (td->o.verify == VERIFY_NULL)
 		return;
 
-	fill_random_bytes(td, p, io_u->buflen);
+	fill_pattern(td, p, io_u->buflen);
 
 	hdr_inc = io_u->buflen;
 	if (td->o.verify_interval)