Commit 760f83ea authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: cleanup the memory stall accounting in submit_bio

Instead of a convoluted chain just check for REQ_OP_READ directly,
and keep all the memory stall code together in a single unlikely
branch.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3fdd4086
...@@ -1148,10 +1148,6 @@ EXPORT_SYMBOL_GPL(direct_make_request); ...@@ -1148,10 +1148,6 @@ EXPORT_SYMBOL_GPL(direct_make_request);
*/ */
blk_qc_t submit_bio(struct bio *bio) blk_qc_t submit_bio(struct bio *bio)
{ {
bool workingset_read = false;
unsigned long pflags;
blk_qc_t ret;
if (blkcg_punt_bio_submit(bio)) if (blkcg_punt_bio_submit(bio))
return BLK_QC_T_NONE; return BLK_QC_T_NONE;
...@@ -1170,8 +1166,6 @@ blk_qc_t submit_bio(struct bio *bio) ...@@ -1170,8 +1166,6 @@ blk_qc_t submit_bio(struct bio *bio)
if (op_is_write(bio_op(bio))) { if (op_is_write(bio_op(bio))) {
count_vm_events(PGPGOUT, count); count_vm_events(PGPGOUT, count);
} else { } else {
if (bio_flagged(bio, BIO_WORKINGSET))
workingset_read = true;
task_io_account_read(bio->bi_iter.bi_size); task_io_account_read(bio->bi_iter.bi_size);
count_vm_events(PGPGIN, count); count_vm_events(PGPGIN, count);
} }
...@@ -1187,20 +1181,24 @@ blk_qc_t submit_bio(struct bio *bio) ...@@ -1187,20 +1181,24 @@ blk_qc_t submit_bio(struct bio *bio)
} }
/* /*
* If we're reading data that is part of the userspace * If we're reading data that is part of the userspace workingset, count
* workingset, count submission time as memory stall. When the * submission time as memory stall. When the device is congested, or
* device is congested, or the submitting cgroup IO-throttled, * the submitting cgroup IO-throttled, submission can be a significant
* submission can be a significant part of overall IO time. * part of overall IO time.
*/ */
if (workingset_read) if (unlikely(bio_op(bio) == REQ_OP_READ &&
psi_memstall_enter(&pflags); bio_flagged(bio, BIO_WORKINGSET))) {
unsigned long pflags;
ret = generic_make_request(bio); blk_qc_t ret;
if (workingset_read) psi_memstall_enter(&pflags);
ret = generic_make_request(bio);
psi_memstall_leave(&pflags); psi_memstall_leave(&pflags);
return ret; return ret;
}
return generic_make_request(bio);
} }
EXPORT_SYMBOL(submit_bio); EXPORT_SYMBOL(submit_bio);
......
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