[PATCH] Offset verification header by a user-specified distance
[fio.git] / options.c
index 94eacbaaebbb6e7ca448bfefe17b735db7c659cd..130dc8c784b5f6f0ae67fd60550cd944073f91ea 100644 (file)
--- a/options.c
+++ b/options.c
@@ -203,6 +203,17 @@ static int str_opendir_cb(void *data, const char fio_unused *str)
        return add_dir_files(td, td->o.opendir);
 }
 
+static int str_header_offset_cb(void *data, unsigned int *off)
+{
+       struct thread_data *td = data;
+       if (*off && *off < sizeof(struct verify_header)) {
+               log_err("fio: header_offset too small\n");
+               return 1;
+       }
+       td->o.header_offset = *off;
+       return 0;
+}
+
 
 #define __stringify_1(x)       #x
 #define __stringify(x)         __stringify_1(x)
@@ -369,6 +380,7 @@ static struct fio_option options[] = {
                .name   = "size",
                .type   = FIO_OPT_STR_VAL,
                .off1   = td_var_offset(size),
+               .minval = 1,
                .help   = "Total size of device or files",
        },
        {
@@ -376,6 +388,7 @@ static struct fio_option options[] = {
                .type   = FIO_OPT_STR_VAL,
                .off1   = td_var_offset(file_size_low),
                .off2   = td_var_offset(file_size_high),
+               .minval = 1,
                .help   = "Size of individual files",
        },
        {
@@ -384,6 +397,7 @@ static struct fio_option options[] = {
                .type   = FIO_OPT_STR_VAL_INT,
                .off1   = td_var_offset(bs[DDIR_READ]),
                .off2   = td_var_offset(bs[DDIR_WRITE]),
+               .minval = 1,
                .help   = "Block size unit",
                .def    = "4k",
        },
@@ -395,6 +409,7 @@ static struct fio_option options[] = {
                .off2   = td_var_offset(max_bs[DDIR_READ]),
                .off3   = td_var_offset(min_bs[DDIR_WRITE]),
                .off4   = td_var_offset(max_bs[DDIR_WRITE]),
+               .minval = 1,
                .help   = "Set block size range (in more detail than bs)",
        },
        {
@@ -565,13 +580,25 @@ static struct fio_option options[] = {
                            .oval = VERIFY_NONE,
                            .help = "Don't do IO verification",
                          },
+                         { .ival = "md5",
+                           .oval = VERIFY_MD5,
+                           .help = "Use md5 checksums for verification",
+                         },
+                         { .ival = "crc64",
+                           .oval = VERIFY_CRC64,
+                           .help = "Use crc64 checksums for verification",
+                         },
                          { .ival = "crc32",
                            .oval = VERIFY_CRC32,
                            .help = "Use crc32 checksums for verification",
                          },
-                         { .ival = "md5",
-                           .oval = VERIFY_MD5,
-                           .help = "Use md5 checksums for verification",
+                         { .ival = "crc16",
+                           .oval = VERIFY_CRC16,
+                           .help = "Use crc16 checksums for verification",
+                         },
+                         { .ival = "crc7",
+                           .oval = VERIFY_CRC7,
+                           .help = "Use crc7 checksums for verification",
                          },
                          {
                            .ival = "null",
@@ -587,6 +614,20 @@ static struct fio_option options[] = {
                .help   = "Sort written verify blocks for read back",
                .def    = "1",
        },
+       {
+               .name   = "header_interval",
+               .type   = FIO_OPT_STR_VAL_INT,
+               .off1   = td_var_offset(header_interval),
+               .help   = "Store buffer header every N bytes",
+               .def    = "0",
+       },
+       {
+               .name   = "header_offset",
+               .type   = FIO_OPT_STR_VAL_INT,
+               .help   = "Offset header location by N bytes",
+               .def    = "0",
+               .cb     = str_header_offset_cb, 
+       },
        {
                .name   = "write_iolog",
                .type   = FIO_OPT_STR_STORE,