iowatcher: wrap system() in a checker function
[blktrace.git] / blkrawverify.c
index 09100c7ebf7f061b7989dc53f8f4366fccc026bc..ed5d258da438dc1b3b9c5242ae7b404079563932 100644 (file)
@@ -39,7 +39,7 @@ int data_is_native = -1;
 static struct trace_info traces[] = {
        TRACE_TO_STRING( BLK_TC_READ ),
        TRACE_TO_STRING( BLK_TC_WRITE ),
-       TRACE_TO_STRING( BLK_TC_BARRIER ),
+       TRACE_TO_STRING( BLK_TC_FLUSH ),
        TRACE_TO_STRING( BLK_TC_SYNC ),
        TRACE_TO_STRING( BLK_TC_QUEUE ),
        TRACE_TO_STRING( BLK_TC_REQUEUE ),
@@ -48,6 +48,9 @@ static struct trace_info traces[] = {
        TRACE_TO_STRING( BLK_TC_FS ),
        TRACE_TO_STRING( BLK_TC_PC ),
        TRACE_TO_STRING( BLK_TC_AHEAD ),
+       TRACE_TO_STRING( BLK_TC_META ),
+       TRACE_TO_STRING( BLK_TC_DISCARD ),
+       TRACE_TO_STRING( BLK_TC_FUA ),
 };
 #define N_TRACES (sizeof(traces) / sizeof(struct trace_info))
 
@@ -84,7 +87,7 @@ static char *act_to_str(__u32 action)
        unsigned int act = action & 0xffff;
        unsigned int trace = (action >> BLK_TC_SHIFT) & 0xffff;
 
-       if (act <= N_ACTS) {
+       if (act < N_ACTS) {
                sprintf(buf, "%s ", acts[act].string);
                for (i = 0; i < N_TRACES; i++)
                        if (trace & (1 << i)) {
@@ -198,6 +201,7 @@ static int process(FILE **fp, char *devname, char *file, unsigned int cpu)
                        if (n == 0) {
                                INC_BAD("bad pdu");
                                nbad_seq++;
+                               free(pdu_buf);
                                break;
                        }
                        free(pdu_buf);
@@ -275,7 +279,7 @@ int main(int argc, char *argv[])
 {
        char *devname;
        struct stat st;
-       int i, cpu, nbad;
+       int i, cpu, nbad, rval = 0;
        FILE *ofp;
        char *ofname = malloc(1024);
        char *fname = malloc(1024);
@@ -294,12 +298,20 @@ int main(int argc, char *argv[])
                printf("Verifying %s\n", devname); fflush(stdout);
                for (cpu = 0; ; cpu++) {
                        sprintf(fname, "%s.blktrace.%d", devname, cpu);
-                       if (stat(fname, &st) < 0)
+                       if (stat(fname, &st) < 0) {
+                               if (cpu == 0) {
+                                       fprintf(stderr, "No tracefiles found for %s\n",
+                                               devname);
+                                       rval = 1;
+                               }
                                break;
+                       }
                        printf("    CPU %d ", cpu); fflush(stdout);
                        nbad = process(&ofp, devname, fname, cpu);
-                       if (nbad)
+                       if (nbad) {
                                printf("-- %d bad", nbad);
+                               rval = 1;
+                       }
                        printf("\n");
                }
                if (ofp) {
@@ -308,5 +320,5 @@ int main(int argc, char *argv[])
                }
        }
 
-       return 0;
+       return rval;
 }