Commit a8ebb056 authored by Mike Christie's avatar Mike Christie Committed by Jens Axboe

block, drivers, cgroup: use op_is_write helper instead of checking for REQ_WRITE

We currently set REQ_WRITE/WRITE for all non READ IOs
like discard, flush, writesame, etc. In the next patches where we
no longer set up the op as a bitmap, we will not be able to
detect a operation direction like writesame by testing if REQ_WRITE is
set.

This patch converts the drivers and cgroup to use the
op_is_write helper. This should just cover the simple
cases. I did dm, md and bcache in their own patches
because they were more involved.
Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent dfec8a14
...@@ -2115,7 +2115,7 @@ blk_qc_t submit_bio(struct bio *bio) ...@@ -2115,7 +2115,7 @@ blk_qc_t submit_bio(struct bio *bio)
else else
count = bio_sectors(bio); count = bio_sectors(bio);
if (bio->bi_rw & WRITE) { if (op_is_write(bio_op(bio))) {
count_vm_events(PGPGOUT, count); count_vm_events(PGPGOUT, count);
} else { } else {
task_io_account_read(bio->bi_iter.bi_size); task_io_account_read(bio->bi_iter.bi_size);
...@@ -2126,7 +2126,7 @@ blk_qc_t submit_bio(struct bio *bio) ...@@ -2126,7 +2126,7 @@ blk_qc_t submit_bio(struct bio *bio)
char b[BDEVNAME_SIZE]; char b[BDEVNAME_SIZE];
printk(KERN_DEBUG "%s(%d): %s block %Lu on %s (%u sectors)\n", printk(KERN_DEBUG "%s(%d): %s block %Lu on %s (%u sectors)\n",
current->comm, task_pid_nr(current), current->comm, task_pid_nr(current),
(bio->bi_rw & WRITE) ? "WRITE" : "READ", op_is_write(bio_op(bio)) ? "WRITE" : "READ",
(unsigned long long)bio->bi_iter.bi_sector, (unsigned long long)bio->bi_iter.bi_sector,
bdevname(bio->bi_bdev, b), bdevname(bio->bi_bdev, b),
count); count);
......
...@@ -439,7 +439,7 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq, ...@@ -439,7 +439,7 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
} }
if (q->dma_drain_size && q->dma_drain_needed(rq)) { if (q->dma_drain_size && q->dma_drain_needed(rq)) {
if (rq->cmd_flags & REQ_WRITE) if (op_is_write(req_op(rq)))
memset(q->dma_drain_buffer, 0, q->dma_drain_size); memset(q->dma_drain_buffer, 0, q->dma_drain_size);
sg_unmark_end(sg); sg_unmark_end(sg);
......
...@@ -1190,7 +1190,7 @@ static int atapi_drain_needed(struct request *rq) ...@@ -1190,7 +1190,7 @@ static int atapi_drain_needed(struct request *rq)
if (likely(rq->cmd_type != REQ_TYPE_BLOCK_PC)) if (likely(rq->cmd_type != REQ_TYPE_BLOCK_PC))
return 0; return 0;
if (!blk_rq_bytes(rq) || (rq->cmd_flags & REQ_WRITE)) if (!blk_rq_bytes(rq) || op_is_write(req_op(rq)))
return 0; return 0;
return atapi_cmd_type(rq->cmd[0]) == ATAPI_MISC; return atapi_cmd_type(rq->cmd[0]) == ATAPI_MISC;
......
...@@ -447,7 +447,7 @@ static int lo_req_flush(struct loop_device *lo, struct request *rq) ...@@ -447,7 +447,7 @@ static int lo_req_flush(struct loop_device *lo, struct request *rq)
static inline void handle_partial_read(struct loop_cmd *cmd, long bytes) static inline void handle_partial_read(struct loop_cmd *cmd, long bytes)
{ {
if (bytes < 0 || (cmd->rq->cmd_flags & REQ_WRITE)) if (bytes < 0 || op_is_write(req_op(cmd->rq)))
return; return;
if (unlikely(bytes < blk_rq_bytes(cmd->rq))) { if (unlikely(bytes < blk_rq_bytes(cmd->rq))) {
...@@ -541,7 +541,7 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq) ...@@ -541,7 +541,7 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
pos = ((loff_t) blk_rq_pos(rq) << 9) + lo->lo_offset; pos = ((loff_t) blk_rq_pos(rq) << 9) + lo->lo_offset;
if (rq->cmd_flags & REQ_WRITE) { if (op_is_write(req_op(rq))) {
if (rq->cmd_flags & REQ_FLUSH) if (rq->cmd_flags & REQ_FLUSH)
ret = lo_req_flush(lo, rq); ret = lo_req_flush(lo, rq);
else if (rq->cmd_flags & REQ_DISCARD) else if (rq->cmd_flags & REQ_DISCARD)
...@@ -1672,7 +1672,7 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx, ...@@ -1672,7 +1672,7 @@ static int loop_queue_rq(struct blk_mq_hw_ctx *hctx,
static void loop_handle_cmd(struct loop_cmd *cmd) static void loop_handle_cmd(struct loop_cmd *cmd)
{ {
const bool write = cmd->rq->cmd_flags & REQ_WRITE; const bool write = op_is_write(req_op(cmd->rq));
struct loop_device *lo = cmd->rq->q->queuedata; struct loop_device *lo = cmd->rq->q->queuedata;
int ret = 0; int ret = 0;
......
...@@ -462,7 +462,7 @@ static void process_page(unsigned long data) ...@@ -462,7 +462,7 @@ static void process_page(unsigned long data)
le32_to_cpu(desc->local_addr)>>9, le32_to_cpu(desc->local_addr)>>9,
le32_to_cpu(desc->transfer_size)); le32_to_cpu(desc->transfer_size));
dump_dmastat(card, control); dump_dmastat(card, control);
} else if ((bio->bi_rw & REQ_WRITE) && } else if (op_is_write(bio_op(bio)) &&
le32_to_cpu(desc->local_addr) >> 9 == le32_to_cpu(desc->local_addr) >> 9 ==
card->init_size) { card->init_size) {
card->init_size += le32_to_cpu(desc->transfer_size) >> 9; card->init_size += le32_to_cpu(desc->transfer_size) >> 9;
......
...@@ -824,7 +824,7 @@ void osd_req_write(struct osd_request *or, ...@@ -824,7 +824,7 @@ void osd_req_write(struct osd_request *or,
{ {
_osd_req_encode_common(or, OSD_ACT_WRITE, obj, offset, len); _osd_req_encode_common(or, OSD_ACT_WRITE, obj, offset, len);
WARN_ON(or->out.bio || or->out.total_bytes); WARN_ON(or->out.bio || or->out.total_bytes);
WARN_ON(0 == (bio->bi_rw & REQ_WRITE)); WARN_ON(!op_is_write(bio_op(bio)));
or->out.bio = bio; or->out.bio = bio;
or->out.total_bytes = len; or->out.total_bytes = len;
} }
...@@ -875,7 +875,7 @@ void osd_req_read(struct osd_request *or, ...@@ -875,7 +875,7 @@ void osd_req_read(struct osd_request *or,
{ {
_osd_req_encode_common(or, OSD_ACT_READ, obj, offset, len); _osd_req_encode_common(or, OSD_ACT_READ, obj, offset, len);
WARN_ON(or->in.bio || or->in.total_bytes); WARN_ON(or->in.bio || or->in.total_bytes);
WARN_ON(bio->bi_rw & REQ_WRITE); WARN_ON(op_is_write(bio_op(bio)));
or->in.bio = bio; or->in.bio = bio;
or->in.total_bytes = len; or->in.total_bytes = len;
} }
......
...@@ -601,7 +601,7 @@ static inline void blkg_rwstat_add(struct blkg_rwstat *rwstat, ...@@ -601,7 +601,7 @@ static inline void blkg_rwstat_add(struct blkg_rwstat *rwstat,
{ {
struct percpu_counter *cnt; struct percpu_counter *cnt;
if (rw & REQ_WRITE) if (op_is_write(rw))
cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_WRITE]; cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_WRITE];
else else
cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_READ]; cnt = &rwstat->cpu_cnt[BLKG_RWSTAT_READ];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment