static inline void blk_account_io_done(struct request *req, u64 now)
 {
+       trace_block_io_done(req);
+
        /*
         * Account IO completion.  flush_rq isn't accounted as a
         * normal IO on queueing nor completion.  Accounting the
 
 static inline void blk_account_io_start(struct request *req)
 {
+       trace_block_io_start(req);
+
        if (blk_do_io_stat(req)) {
                /*
                 * All non-passthrough requests are created from a bio with one
 
        TP_ARGS(rq)
 );
 
+/**
+ * block_io_start - insert a request for execution
+ * @rq: block IO operation request
+ *
+ * Called when block operation request @rq is queued for execution
+ */
+DEFINE_EVENT(block_rq, block_io_start,
+
+       TP_PROTO(struct request *rq),
+
+       TP_ARGS(rq)
+);
+
+/**
+ * block_io_done - block IO operation request completed
+ * @rq: block IO operation request
+ *
+ * Called when block operation request @rq is completed
+ */
+DEFINE_EVENT(block_rq, block_io_done,
+
+       TP_PROTO(struct request *rq),
+
+       TP_ARGS(rq)
+);
+
 /**
  * block_bio_complete - completed all work on the block operation
  * @q: queue holding the block operation