[PATCH V2 05/13] block: only account passthrough IO from userspace
Ming Lei
ming.lei at redhat.com
Tue Jan 25 01:09:42 PST 2022
On Tue, Jan 25, 2022 at 08:19:06AM +0100, Christoph Hellwig wrote:
> On Tue, Jan 25, 2022 at 07:16:34AM +0100, Christoph Hellwig wrote:
> > So why not key off accouning off "rq->bio && rq->bio->bi_bdev"
> > and remove the need for the flag and the second half of the assignment
> > above? That is much less error probe and removes code size.
>
> Something like this, lightly tested:
>
Follows another simple way by accounting all request with bio attached,
except for requests with kernel buffer.
diff --git a/block/blk-map.c b/block/blk-map.c
index 4526adde0156..1210b51c62ae 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -630,6 +630,8 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,
struct bio *bio;
int ret;
+ rq->rq_flags &= ~RQF_IO_STAT;
+
if (len > (queue_max_hw_sectors(q) << 9))
return -EINVAL;
if (!len || !kbuf)
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 72ae9955cf27..eac589d2c340 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -903,7 +903,7 @@ static void __blk_account_io_start(struct request *rq)
/* passthrough requests can hold bios that do not have ->bi_bdev set */
if (rq->bio && rq->bio->bi_bdev)
rq->part = rq->bio->bi_bdev;
- else if (rq->q->disk)
+ else if (rq->q->disk && rq->bio)
rq->part = rq->q->disk->part0;
part_stat_lock();
Thanks,
Ming
More information about the Linux-nvme
mailing list