unsigned int extra_len; /* length of alignment and padding */
  
-       unsigned short write_hint;
+       /*
+        * On blk-mq, the lower bits of ->gstate (generation number and
+        * state) carry the MQ_RQ_* state value and the upper bits the
+        * generation number which is monotonically incremented and used to
+        * distinguish the reuse instances.
+        *
+        * ->gstate_seq allows updates to ->gstate and other fields
+        * (currently ->deadline) during request start to be read
+        * atomically from the timeout path, so that it can operate on a
+        * coherent set of information.
+        */
+       seqcount_t gstate_seq;
+       u64 gstate;
+ 
+       /*
+        * ->aborted_gstate is used by the timeout to claim a specific
+        * recycle instance of this request.  See blk_mq_timeout_work().
+        */
+       struct u64_stats_sync aborted_gstate_sync;
+       u64 aborted_gstate;
+ 
+       /* access through blk_rq_set_deadline, blk_rq_deadline */
+       unsigned long __deadline;
  
-       unsigned long deadline;
        struct list_head timeout_list;
  
 -              call_single_data_t csd;
+       union {
++              struct __call_single_data csd;
+               u64 fifo_time;
+       };
+ 
        /*
         * completion callback.
         */
  
        /* for bidi */
        struct request *next_rq;
+ 
+ #ifdef CONFIG_BLK_CGROUP
+       struct request_list *rl;                /* rl this rq is alloced from */
+       unsigned long long start_time_ns;
+       unsigned long long io_start_time_ns;    /* when passed to hardware */
+ #endif
  };
  
 +static inline bool blk_op_is_scsi(unsigned int op)
 +{
 +      return op == REQ_OP_SCSI_IN || op == REQ_OP_SCSI_OUT;
 +}
 +
 +static inline bool blk_op_is_private(unsigned int op)
 +{
 +      return op == REQ_OP_DRV_IN || op == REQ_OP_DRV_OUT;
 +}
 +
  static inline bool blk_rq_is_scsi(struct request *rq)
  {
 -      return req_op(rq) == REQ_OP_SCSI_IN || req_op(rq) == REQ_OP_SCSI_OUT;
 +      return blk_op_is_scsi(req_op(rq));
  }
  
  static inline bool blk_rq_is_private(struct request *rq)