Parse Zone Write Plugging plug and unplug actions in blkparse.

Signed-off-by: Johannes Thumshirn <johannes.thumsh...@wdc.com>
---
 blkparse.c     |  7 +++++++
 blkparse_fmt.c | 19 +++++++++++++++++++
 blktrace_api.h |  2 ++
 3 files changed, 28 insertions(+)

diff --git a/blkparse.c b/blkparse.c
index e702356..1a372e5 100644
--- a/blkparse.c
+++ b/blkparse.c
@@ -1722,6 +1722,13 @@ static void dump_trace_fs(struct blk_io_trace2 *t, 
struct per_dev_info *pdi,
                        account_unplug(t, pci, 1);
                        log_unplug(pci, t, "UT");
                        break;
+               case __BLK_TA_ZONE_PLUG:
+                       log_action(pci, t, "ZP");
+                       break;
+               case __BLK_TA_ZONE_UNPLUG:
+                       account_unplug(t, pci, 0);
+                       log_unplug(pci, t, "ZU");
+                       break;
                case __BLK_TA_SPLIT:
                        log_track_split(pdi, t);
                        log_split(pci, t, "X");
diff --git a/blkparse_fmt.c b/blkparse_fmt.c
index f93addb..a5f721f 100644
--- a/blkparse_fmt.c
+++ b/blkparse_fmt.c
@@ -301,6 +301,22 @@ static char *parse_field(char *act, struct per_cpu_info 
*pci,
        return p;
 }
 
+static void process_zoned(char *act, struct blk_io_trace2 *t,
+                         unsigned long long elapsed, char *name)
+{
+       switch (act[1]) {
+       case 'P': /* Zone Plug */
+               fprintf(ofp, "[%s]\n", name);
+               break;
+       case 'U': /* Zone Unplug */
+               fprintf(ofp, "[%s] %u\n", name, get_pdu_int(t));
+               break;
+       default:
+               fprintf(stderr, "Unknown zoned action %c\n", act[1]);
+               break;
+       }
+}
+
 static void process_default(char *act, struct per_cpu_info *pci,
                            struct blk_io_trace2 *t, unsigned long long elapsed,
                            int pdu_len, unsigned char *pdu_buf)
@@ -429,6 +445,9 @@ static void process_default(char *act, struct per_cpu_info 
*pci,
                fprintf(ofp, "%*s\n", pdu_len, pdu_buf);
                break;
 
+       case 'Z':       /* Zoned command */
+               process_zoned(act, t, elapsed, name);
+               break;
        default:
                fprintf(stderr, "Unknown action %c\n", act[0]);
                break;
diff --git a/blktrace_api.h b/blktrace_api.h
index bbf075f..3966e1a 100644
--- a/blktrace_api.h
+++ b/blktrace_api.h
@@ -62,6 +62,8 @@ enum {
        __BLK_TA_REMAP,                 /* bio was remapped */
        __BLK_TA_ABORT,                 /* request aborted */
        __BLK_TA_DRV_DATA,              /* binary driver data */
+       __BLK_TA_ZONE_PLUG,             /* zone write plug was plugged */
+       __BLK_TA_ZONE_UNPLUG,           /* zone write plug was unplugged */
        __BLK_TA_ZONE_MGMT,             /* zone management command was issued */
        __BLK_TA_CGROUP = 1 << 8,
 };
-- 
2.51.0


Reply via email to