verify: treat as failure if given verify type is different from media
authorJens Axboe <axboe@kernel.dk>
Fri, 30 Nov 2012 08:39:02 +0000 (09:39 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 30 Nov 2012 08:39:02 +0000 (09:39 +0100)
When fio verifies right now, it'll look at the on media stored type
and verify that type. This means that if verify=foo set and we
find older blocks that are written with verify=bar, we will
verify those against bar.

Change this so that if a specific verify type is given, that type
is ALWAYS used for verification. If none is given but asked to
verify, we retain the old behaviour of just verifying based on
the type given in the on-media block.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
verify.c

index f246dc8f9ba0cfe3f4a9e2b43316f398b75cb4b1..c0485d55bf268563a5bc760bede3333f7a58e8e6 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -690,6 +690,7 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u)
                        .hdr_num        = hdr_num,
                        .td             = td,
                };
+               unsigned int verify_type;
 
                if (ret && td->o.verify_fatal)
                        break;
@@ -708,7 +709,12 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u)
                        return EILSEQ;
                }
 
-               switch (hdr->verify_type) {
+               if (td->o.verify != VERIFY_NONE)
+                       verify_type = td->o.verify;
+               else
+                       verify_type = hdr->verify_type;
+
+               switch (verify_type) {
                case VERIFY_MD5:
                        ret = verify_io_u_md5(hdr, &vc);
                        break;
@@ -747,6 +753,10 @@ int verify_io_u(struct thread_data *td, struct io_u *io_u)
                        log_err("Bad verify type %u\n", hdr->verify_type);
                        ret = EINVAL;
                }
+
+               if (ret && verify_type != hdr->verify_type)
+                       log_err("fio: verify type mismatch (%u media, %u given)\n",
+                                       hdr->verify_type, verify_type);
        }
 
 done: