#define BLK_TC_PREFLUSH                BLK_TC_FLUSH
 
 /* The ilog2() calls fall out because they're constant */
-#define MASK_TC_BIT(rw, __name) ((rw & REQ_ ## __name) << \
+#define MASK_TC_BIT(rw, __name) ((__force u32)(rw & REQ_ ## __name) << \
          (ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - __REQ_ ## __name))
 
 /*
  * blk_io_trace structure and places it in a per-cpu subbuffer.
  */
 static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
-                    int op, int op_flags, u32 what, int error, int pdu_len,
-                    void *pdu_data, u64 cgid)
+                           const blk_opf_t opf, u32 what, int error,
+                           int pdu_len, void *pdu_data, u64 cgid)
 {
        struct task_struct *tsk = current;
        struct ring_buffer_event *event = NULL;
        int cpu;
        bool blk_tracer = blk_tracer_enabled;
        ssize_t cgid_len = cgid ? sizeof(cgid) : 0;
+       const enum req_op op = opf & REQ_OP_MASK;
 
        if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
                return;
 
        what |= ddir_act[op_is_write(op) ? WRITE : READ];
-       what |= MASK_TC_BIT(op_flags, SYNC);
-       what |= MASK_TC_BIT(op_flags, RAHEAD);
-       what |= MASK_TC_BIT(op_flags, META);
-       what |= MASK_TC_BIT(op_flags, PREFLUSH);
-       what |= MASK_TC_BIT(op_flags, FUA);
+       what |= MASK_TC_BIT(opf, SYNC);
+       what |= MASK_TC_BIT(opf, RAHEAD);
+       what |= MASK_TC_BIT(opf, META);
+       what |= MASK_TC_BIT(opf, PREFLUSH);
+       what |= MASK_TC_BIT(opf, FUA);
        if (op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE)
                what |= BLK_TC_ACT(BLK_TC_DISCARD);
        if (op == REQ_OP_FLUSH)
        else
                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, blk_status_to_errno(error), 0,
-                       NULL, cgid);
+       __blk_add_trace(bt, blk_rq_trace_sector(rq), nr_bytes, rq->cmd_flags,
+                       what, blk_status_to_errno(error), 0, NULL, cgid);
        rcu_read_unlock();
 }
 
        }
 
        __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
-                       bio_op(bio), bio->bi_opf, what, error, 0, NULL,
+                       bio->bi_opf, what, error, 0, NULL,
                        blk_trace_bio_get_cgid(q, bio));
        rcu_read_unlock();
 }
        rcu_read_lock();
        bt = rcu_dereference(q->blk_trace);
        if (bt)
-               __blk_add_trace(bt, 0, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0);
+               __blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL, 0);
        rcu_read_unlock();
 }
 
                else
                        what = BLK_TA_UNPLUG_TIMER;
 
-               __blk_add_trace(bt, 0, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0);
+               __blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu, 0);
        }
        rcu_read_unlock();
 }
                __be64 rpdu = cpu_to_be64(pdu);
 
                __blk_add_trace(bt, bio->bi_iter.bi_sector,
-                               bio->bi_iter.bi_size, bio_op(bio), bio->bi_opf,
-                               BLK_TA_SPLIT,
+                               bio->bi_iter.bi_size, bio->bi_opf, BLK_TA_SPLIT,
                                blk_status_to_errno(bio->bi_status),
                                sizeof(rpdu), &rpdu,
                                blk_trace_bio_get_cgid(q, bio));
        r.sector_from = cpu_to_be64(from);
 
        __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
-                       bio_op(bio), bio->bi_opf, BLK_TA_REMAP,
+                       bio->bi_opf, BLK_TA_REMAP,
                        blk_status_to_errno(bio->bi_status),
                        sizeof(r), &r, blk_trace_bio_get_cgid(q, bio));
        rcu_read_unlock();
        r.sector_from = cpu_to_be64(from);
 
        __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
-                       req_op(rq), rq->cmd_flags, BLK_TA_REMAP, 0,
+                       rq->cmd_flags, BLK_TA_REMAP, 0,
                        sizeof(r), &r, blk_trace_request_get_cgid(rq));
        rcu_read_unlock();
 }
                return;
        }
 
-       __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0, 0,
+       __blk_add_trace(bt, blk_rq_trace_sector(rq), blk_rq_bytes(rq), 0,
                                BLK_TA_DRV_DATA, 0, len, data,
                                blk_trace_request_get_cgid(rq));
        rcu_read_unlock();
  *     caller with resulting string.
  *
  **/
-void blk_fill_rwbs(char *rwbs, unsigned int op)
+void blk_fill_rwbs(char *rwbs, blk_opf_t opf)
 {
        int i = 0;
 
-       if (op & REQ_PREFLUSH)
+       if (opf & REQ_PREFLUSH)
                rwbs[i++] = 'F';
 
-       switch (op & REQ_OP_MASK) {
+       switch (opf & REQ_OP_MASK) {
        case REQ_OP_WRITE:
                rwbs[i++] = 'W';
                break;
                rwbs[i++] = 'N';
        }
 
-       if (op & REQ_FUA)
+       if (opf & REQ_FUA)
                rwbs[i++] = 'F';
-       if (op & REQ_RAHEAD)
+       if (opf & REQ_RAHEAD)
                rwbs[i++] = 'A';
-       if (op & REQ_SYNC)
+       if (opf & REQ_SYNC)
                rwbs[i++] = 'S';
-       if (op & REQ_META)
+       if (opf & REQ_META)
                rwbs[i++] = 'M';
 
        rwbs[i] = '\0';