Extend --readonly
- Never allow open of a data file with writeable bits sets, and that
includes extend as well.
- Skip any writes in replay logs (iolog/iolog2/blktrace)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/blktrace.c b/blktrace.c
index 58f28ce..64e49f5 100644
--- a/blktrace.c
+++ b/blktrace.c
@@ -233,7 +233,7 @@
{
unsigned long long ttime, delay;
struct blk_io_trace t;
- unsigned long ios[2];
+ unsigned long ios[2], skipped_writes;
unsigned int cpu;
unsigned int rw_bs[2];
struct fifo *fifo;
@@ -253,6 +253,7 @@
ttime = 0;
ios[0] = ios[1] = 0;
rw_bs[0] = rw_bs[1] = 0;
+ skipped_writes = 0;
do {
int ret = trace_fifo_get(td, fifo, fd, &t, sizeof(t));
@@ -290,7 +291,10 @@
delay = 0;
if (cpu == t.cpu)
delay = t.time - ttime;
- handle_trace(td, &t, delay, ios, rw_bs);
+ if ((t.action & BLK_TC_ACT(BLK_TC_WRITE)) && read_only)
+ skipped_writes++;
+ else
+ handle_trace(td, &t, delay, ios, rw_bs);
ttime = t.time;
cpu = t.cpu;
} while (1);
@@ -298,6 +302,9 @@
fifo_free(fifo);
close(fd);
+ if (skipped_writes)
+ log_err("fio: <%s> skips replay of %lu writes due to read-only\n", td->o.name, skipped_writes);
+
if (!ios[DDIR_READ] && !ios[DDIR_WRITE]) {
log_err("fio: found no ios in blktrace data\n");
return 1;