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/log.c b/log.c
index 759771a..66b8f5b 100644
--- a/log.c
+++ b/log.c
@@ -233,9 +233,14 @@
 			
 		if (rw == DDIR_READ)
 			reads++;
-		else if (rw == DDIR_WRITE)
+		else if (rw == DDIR_WRITE) {
 			writes++;
-		else if (rw != DDIR_SYNC && rw != DDIR_INVAL) {
+			/*
+			 * Don't add a write for ro mode
+			 */
+			if (read_only)
+				continue;
+		} else if (rw != DDIR_SYNC && rw != DDIR_INVAL) {
 			log_err("bad ddir: %d\n", rw);
 			continue;
 		}
@@ -263,6 +268,11 @@
 	free(act);
 	free(fname);
 
+	if (writes && read_only) {
+		log_err("fio: <%s> skips replay of %d writes due to read-only\n", td->o.name, writes);
+		writes = 0;
+	}
+
 	if (!reads && !writes)
 		return 1;
 	else if (reads && !writes)
@@ -301,9 +311,14 @@
 		}
 		if (rw == DDIR_READ)
 			reads++;
-		else if (rw == DDIR_WRITE)
+		else if (rw == DDIR_WRITE) {
 			writes++;
-		else if (rw != DDIR_SYNC) {
+			/*
+			 * Don't add a write for ro mode
+			 */
+			if (read_only)
+				continue;
+		} else if (rw != DDIR_SYNC) {
 			log_err("bad ddir: %d\n", rw);
 			continue;
 		}
@@ -322,6 +337,11 @@
 
 	free(str);
 
+	if (writes && read_only) {
+		log_err("fio: <%s> skips replay of %d writes due to read-only\n", td->o.name, writes);
+		writes = 0;
+	}
+
 	if (!reads && !writes)
 		return 1;
 	else if (reads && !writes)