This patch adds more debug data on the top of the existing
print_req_error() where we enhance the print message with the printing
request operations in string format and other request fields.

Signed-off-by: Chaitanya Kulkarni <[email protected]>
---
 block/blk-core.c | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index d1a227cfb72e..6a8a808309f0 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -144,6 +144,32 @@ static const struct {
        [BLK_STS_IOERR]         = { -EIO,       "I/O" },
 };
 
+#define REQ_OP_NAME(name) [REQ_OP_##name] = #name
+static const char *const op_name[] = {
+       REQ_OP_NAME(READ),
+       REQ_OP_NAME(WRITE),
+       REQ_OP_NAME(FLUSH),
+       REQ_OP_NAME(DISCARD),
+       REQ_OP_NAME(SECURE_ERASE),
+       REQ_OP_NAME(ZONE_RESET),
+       REQ_OP_NAME(WRITE_SAME),
+       REQ_OP_NAME(WRITE_ZEROES),
+       REQ_OP_NAME(SCSI_IN),
+       REQ_OP_NAME(SCSI_OUT),
+       REQ_OP_NAME(DRV_IN),
+       REQ_OP_NAME(DRV_OUT),
+};
+
+static inline const char *op_str(int op)
+{
+       const char *op_str = "REQ_OP_UNKNOWN";
+
+       if (op < ARRAY_SIZE(op_name) && op_name[op])
+               op_str = op_name[op];
+
+       return op_str;
+}
+
 blk_status_t errno_to_blk_status(int errno)
 {
        int i;
@@ -176,11 +202,14 @@ static void print_req_error(struct request *req, 
blk_status_t status,
                return;
 
        printk_ratelimited(KERN_ERR
-               "%s: %s error, dev %s, sector %llu op 0x%x flags 0x%x\n",
+               "%s: %s error, dev %s, sector %llu op 0x%x:(%s) flags 0x%x "
+               "phys_seg %u prio class %u\n",
                caller, blk_errors[idx].name,
                req->rq_disk ?  req->rq_disk->disk_name : "?",
-               blk_rq_pos(req), req_op(req),
-               req->cmd_flags & ~REQ_OP_MASK);
+               blk_rq_pos(req), req_op(req), op_str(req_op(req)),
+               req->cmd_flags & ~REQ_OP_MASK,
+               req->nr_phys_segments,
+               IOPRIO_PRIO_CLASS(req->ioprio));
 }
 
 static void req_bio_endio(struct request *rq, struct bio *bio,
-- 
2.19.1

Reply via email to