]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
block: set request_list for request
authorShaohua Li <shli@fb.com>
Sat, 7 Oct 2017 00:56:00 +0000 (17:56 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 10 Oct 2017 19:48:16 +0000 (13:48 -0600)
Legacy queue sets request's request_list, mq doesn't. This makes mq does
the same thing, so we can find cgroup of a request. Note, we really
only use blkg field of request_list, it's pointless to allocate mempool
for request_list in mq case.

Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
block/blk-mq.c

index 14f7674fa0b148cbc333b2cae9b88b12e7c43932..e8e149ccc86b7f2f1354718d0109a37d3aa345e7 100644 (file)
@@ -718,7 +718,7 @@ static void free_request_size(void *element, void *data)
 int blk_init_rl(struct request_list *rl, struct request_queue *q,
                gfp_t gfp_mask)
 {
-       if (unlikely(rl->rq_pool))
+       if (unlikely(rl->rq_pool) || q->mq_ops)
                return 0;
 
        rl->q = q;
index 076cbab9c3e0f5c47c7e8807c730c9ad050a036e..40cba1b1978f24fe8e22af5dd1640768f3bf1fd3 100644 (file)
@@ -481,6 +481,9 @@ void blk_mq_free_request(struct request *rq)
 
        wbt_done(q->rq_wb, &rq->issue_stat);
 
+       if (blk_rq_rl(rq))
+               blk_put_rl(blk_rq_rl(rq));
+
        clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags);
        clear_bit(REQ_ATOM_POLL_SLEPT, &rq->atomic_flags);
        if (rq->tag != -1)
@@ -1532,6 +1535,8 @@ static void blk_mq_bio_to_request(struct request *rq, struct bio *bio)
 {
        blk_init_request_from_bio(rq, bio);
 
+       blk_rq_set_rl(rq, blk_get_rl(rq->q, bio));
+
        blk_account_io_start(rq, true);
 }