* string format. Useful in the debugging and tracing bio or request. For
  * invalid REQ_OP_XXX it returns string "UNKNOWN".
  */
-inline const char *blk_op_str(unsigned int op)
+inline const char *blk_op_str(enum req_op op)
 {
        const char *op_str = "UNKNOWN";
 
 }
 
 unsigned long bdev_start_io_acct(struct block_device *bdev,
-                                unsigned int sectors, unsigned int op,
+                                unsigned int sectors, enum req_op op,
                                 unsigned long start_time)
 {
        const int sgrp = op_stat_group(op);
 }
 EXPORT_SYMBOL_GPL(bio_start_io_acct);
 
-void bdev_end_io_acct(struct block_device *bdev, unsigned int op,
+void bdev_end_io_acct(struct block_device *bdev, enum req_op op,
                      unsigned long start_time)
 {
        const int sgrp = op_stat_group(op);
 
 int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq)
 {
        const struct blk_mq_ops *const mq_ops = rq->q->mq_ops;
-       const unsigned int op = req_op(rq);
+       const enum req_op op = req_op(rq);
        const char *op_str = blk_op_str(op);
 
        seq_printf(m, "%p {.op=", rq);
 
 
 #ifdef CONFIG_BLK_DEV_THROTTLING_LOW
 static void throtl_track_latency(struct throtl_data *td, sector_t size,
-       int op, unsigned long time)
+                                enum req_op op, unsigned long time)
 {
+       const bool rw = op_is_write(op);
        struct latency_bucket *latency;
        int index;
 
 
        index = request_bucket_index(size);
 
-       latency = get_cpu_ptr(td->latency_buckets[op]);
+       latency = get_cpu_ptr(td->latency_buckets[rw]);
        latency[index].total_latency += time;
        latency[index].samples++;
-       put_cpu_ptr(td->latency_buckets[op]);
+       put_cpu_ptr(td->latency_buckets[rw]);
 }
 
 void blk_throtl_stat_add(struct request *rq, u64 time_ns)
 
 
 static int wbt_data_dir(const struct request *rq)
 {
-       const int op = req_op(rq);
+       const enum req_op op = req_op(rq);
 
        if (op == REQ_OP_READ)
                return READ;
 
 }
 
 static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
-                                                    int op)
+                                                    enum req_op op)
 {
        if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE))
                return min(q->limits.max_discard_sectors,
 
        }
 }
 
-static inline int op_stat_group(unsigned int op)
+static inline int op_stat_group(enum req_op op)
 {
        if (op_is_discard(op))
                return STAT_DISCARD;
 
 extern void blk_sync_queue(struct request_queue *q);
 
 /* Helper to convert REQ_OP_XXX to its string format XXX */
-extern const char *blk_op_str(unsigned int op);
+extern const char *blk_op_str(enum req_op op);
 
 int blk_status_to_errno(blk_status_t status);
 blk_status_t errno_to_blk_status(int errno);
 }
 
 unsigned long bdev_start_io_acct(struct block_device *bdev,
-                                unsigned int sectors, unsigned int op,
+                                unsigned int sectors, enum req_op op,
                                 unsigned long start_time);
-void bdev_end_io_acct(struct block_device *bdev, unsigned int op,
+void bdev_end_io_acct(struct block_device *bdev, enum req_op op,
                unsigned long start_time);
 
 void bio_start_io_acct_time(struct bio *bio, unsigned long start_time);