block: don't call blk_status_to_errno in blk_update_request
authorChristoph Hellwig <hch@lst.de>
Mon, 18 Oct 2021 08:45:18 +0000 (10:45 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 19 Oct 2021 11:54:57 +0000 (05:54 -0600)
We only need to call it to resolve the blk_status_t -> errno mapping for
tracing, so move the conversion into the tracepoints that are not called
at all when tracing isn't enabled.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c
include/trace/events/block.h
kernel/trace/blktrace.c

index bbc6139..59809ec 100644 (file)
@@ -680,7 +680,7 @@ bool blk_update_request(struct request *req, blk_status_t error,
 {
        int total_bytes;
 
-       trace_block_rq_complete(req, blk_status_to_errno(error), nr_bytes);
+       trace_block_rq_complete(req, error, nr_bytes);
 
        if (!req->bio)
                return false;
index cc5ab96..a95daa4 100644 (file)
@@ -114,7 +114,7 @@ TRACE_EVENT(block_rq_requeue,
  */
 TRACE_EVENT(block_rq_complete,
 
-       TP_PROTO(struct request *rq, int error, unsigned int nr_bytes),
+       TP_PROTO(struct request *rq, blk_status_t error, unsigned int nr_bytes),
 
        TP_ARGS(rq, error, nr_bytes),
 
@@ -122,7 +122,7 @@ TRACE_EVENT(block_rq_complete,
                __field(  dev_t,        dev                     )
                __field(  sector_t,     sector                  )
                __field(  unsigned int, nr_sector               )
-               __field(  int,          error                   )
+               __field(  int   ,       error                   )
                __array(  char,         rwbs,   RWBS_LEN        )
                __dynamic_array( char,  cmd,    1               )
        ),
@@ -131,7 +131,7 @@ TRACE_EVENT(block_rq_complete,
                __entry->dev       = rq->rq_disk ? disk_devt(rq->rq_disk) : 0;
                __entry->sector    = blk_rq_pos(rq);
                __entry->nr_sector = nr_bytes >> 9;
-               __entry->error     = error;
+               __entry->error     = blk_status_to_errno(error);
 
                blk_fill_rwbs(__entry->rwbs, rq->cmd_flags);
                __get_str(cmd)[0] = '\0';
index fa91f39..1183c88 100644 (file)
@@ -816,7 +816,7 @@ blk_trace_request_get_cgid(struct request *rq)
  *     Records an action against a request. Will log the bio offset + size.
  *
  **/
-static void blk_add_trace_rq(struct request *rq, int error,
+static void blk_add_trace_rq(struct request *rq, blk_status_t error,
                             unsigned int nr_bytes, u32 what, u64 cgid)
 {
        struct blk_trace *bt;
@@ -834,7 +834,8 @@ static void blk_add_trace_rq(struct request *rq, int error,
                what |= BLK_TC_ACT(BLK_TC_FS);
 
        __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, req_op(rq),
-                       rq->cmd_flags, what, error, 0, NULL, cgid);
+                       rq->cmd_flags, what, blk_status_to_errno(error), 0,
+                       NULL, cgid);
        rcu_read_unlock();
 }
 
@@ -863,7 +864,7 @@ static void blk_add_trace_rq_requeue(void *ignore, struct request *rq)
 }
 
 static void blk_add_trace_rq_complete(void *ignore, struct request *rq,
-                       int error, unsigned int nr_bytes)
+                       blk_status_t error, unsigned int nr_bytes)
 {
        blk_add_trace_rq(rq, error, nr_bytes, BLK_TA_COMPLETE,
                         blk_trace_request_get_cgid(rq));