Merge branch 'add-P'
[blktrace.git] / blkparse_fmt.c
index 7830738566c961f97839de04fda91d4b2aea4185..83a85049e8d9308918bb9104cd8b1ab927b4bcef 100644 (file)
@@ -44,19 +44,8 @@ int add_format_spec(char *option)
                return 1;
        }
        option += 2;
-       if (*option == '\0') {
-               fprintf(stderr,"Bad format specifier - need fmt %s\n", option);
-               return 1;
-       }
 
-       /*
-        * Set both merges (front and back)
-        */
-       if (spec == 'M') {
-               override_format['B'] = strdup(option);
-               override_format['M'] = strdup(option);
-       } else
-               override_format[spec] = strdup(option);
+       override_format[spec] = strdup(option);
 
        return 0;
 }
@@ -68,12 +57,17 @@ static inline void fill_rwbs(char *rwbs, struct blk_io_trace *t)
        int b = t->action & BLK_TC_ACT(BLK_TC_BARRIER);
        int s = t->action & BLK_TC_ACT(BLK_TC_SYNC);
        int m = t->action & BLK_TC_ACT(BLK_TC_META);
+       int d = t->action & BLK_TC_ACT(BLK_TC_DISCARD);
        int i = 0;
 
-       if (w)
+       if (d)
+               rwbs[i++] = 'D';
+       else if (w)
                rwbs[i++] = 'W';
-       else
+       else if (t->bytes)
                rwbs[i++] = 'R';
+       else
+               rwbs[i++] = 'N';
        if (a)
                rwbs[i++] = 'A';
        if (b)
@@ -321,13 +315,23 @@ static void process_default(char *act, struct per_cpu_info *pci,
                        fprintf(ofp, "[%d]\n", t->error);
                } else {
                        if (elapsed != -1ULL) {
-                               fprintf(ofp, "%llu + %u (%8llu) [%d]\n",
-                                       (unsigned long long) t->sector,
-                                       t_sec(t), elapsed, t->error);
+                               if (t_sec(t))
+                                       fprintf(ofp, "%llu + %u (%8llu) [%d]\n",
+                                               (unsigned long long) t->sector,
+                                               t_sec(t), elapsed, t->error);
+                               else
+                                       fprintf(ofp, "%llu (%8llu) [%d]\n",
+                                               (unsigned long long) t->sector,
+                                               elapsed, t->error);
                        } else {
-                               fprintf(ofp, "%llu + %u [%d]\n",
-                                       (unsigned long long) t->sector,
-                                       t_sec(t), t->error);
+                               if (t_sec(t))
+                                       fprintf(ofp, "%llu + %u [%d]\n",
+                                               (unsigned long long) t->sector,
+                                               t_sec(t), t->error);
+                               else
+                                       fprintf(ofp, "%llu [%d]\n",
+                                               (unsigned long long) t->sector,
+                                               t->error);
                        }
                }
                break;
@@ -335,7 +339,7 @@ static void process_default(char *act, struct per_cpu_info *pci,
        case 'D':       /* Issue */
        case 'I':       /* Insert */
        case 'Q':       /* Queue */
-       case 'W':       /* Bounce */
+       case 'B':       /* Bounce */
                if (t->action & BLK_TC_ACT(BLK_TC_PC)) {
                        char *p;
                        fprintf(ofp, "%u ", t->bytes);
@@ -345,24 +349,33 @@ static void process_default(char *act, struct per_cpu_info *pci,
                        fprintf(ofp, "[%s]\n", name);
                } else {
                        if (elapsed != -1ULL) {
-                               fprintf(ofp, "%llu + %u (%8llu) [%s]\n",
-                                       (unsigned long long) t->sector,
-                                       t_sec(t), elapsed, name);
+                               if (t_sec(t))
+                                       fprintf(ofp, "%llu + %u (%8llu) [%s]\n",
+                                               (unsigned long long) t->sector,
+                                               t_sec(t), elapsed, name);
+                               else
+                                       fprintf(ofp, "(%8llu) [%s]\n", elapsed,
+                                               name);
                        } else {
-                               fprintf(ofp, "%llu + %u [%s]\n",
-                                       (unsigned long long) t->sector,
-                                       t_sec(t), name);
+                               if (t_sec(t))
+                                       fprintf(ofp, "%llu + %u [%s]\n",
+                                               (unsigned long long) t->sector,
+                                               t_sec(t), name);
+                               else
+                                       fprintf(ofp, "[%s]\n", name);
                        }
                }
                break;
 
-       case 'B':       /* Back merge */
+       case 'M':       /* Back merge */
        case 'F':       /* Front merge */
-       case 'M':       /* Front or back merge */
        case 'G':       /* Get request */
        case 'S':       /* Sleep request */
-               fprintf(ofp, "%llu + %u [%s]\n", (unsigned long long) t->sector,
-                       t_sec(t), name);
+               if (t_sec(t))
+                       fprintf(ofp, "%llu + %u [%s]\n",
+                               (unsigned long long) t->sector, t_sec(t), name);
+               else
+                       fprintf(ofp, "[%s]\n", name);
                break;
 
        case 'P':       /* Plug */
@@ -380,12 +393,16 @@ static void process_default(char *act, struct per_cpu_info *pci,
                        MAJOR(r.device), MINOR(r.device),
                        (unsigned long long) r.sector);
                break;
-               
+
        case 'X':       /* Split */
                fprintf(ofp, "%llu / %u [%s]\n", (unsigned long long) t->sector,
                        get_pdu_int(t), name);
                break;
 
+       case 'm':       /* Message */
+               fprintf(ofp, "%*s\n", pdu_len, pdu_buf);
+               break;
+
        default:
                fprintf(stderr, "Unknown action %c\n", act[0]);
                break;