block: fix oops in blk_queue_io_stat()
Some initial probe requests don't have disk->queue mapped yet, so we can't rely on a non-NULL queue in blk_queue_io_stat(). Wrap it in blk_do_io_stat(). Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
45c82b5a77
commit
fb8ec18c31
2 changed files with 11 additions and 3 deletions
|
@ -69,7 +69,7 @@ static void drive_stat_acct(struct request *rq, int new_io)
|
|||
int rw = rq_data_dir(rq);
|
||||
int cpu;
|
||||
|
||||
if (!blk_fs_request(rq) || !disk || !blk_queue_io_stat(disk->queue))
|
||||
if (!blk_fs_request(rq) || !disk || !blk_do_io_stat(disk->queue))
|
||||
return;
|
||||
|
||||
cpu = part_stat_lock();
|
||||
|
@ -1667,7 +1667,7 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes)
|
|||
{
|
||||
struct gendisk *disk = req->rq_disk;
|
||||
|
||||
if (!disk || !blk_queue_io_stat(disk->queue))
|
||||
if (!disk || !blk_do_io_stat(disk->queue))
|
||||
return;
|
||||
|
||||
if (blk_fs_request(req)) {
|
||||
|
@ -1686,7 +1686,7 @@ static void blk_account_io_done(struct request *req)
|
|||
{
|
||||
struct gendisk *disk = req->rq_disk;
|
||||
|
||||
if (!disk || !blk_queue_io_stat(disk->queue))
|
||||
if (!disk || !blk_do_io_stat(disk->queue))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
|
|
@ -108,4 +108,12 @@ static inline int blk_cpu_to_group(int cpu)
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline int blk_do_io_stat(struct request_queue *q)
|
||||
{
|
||||
if (q)
|
||||
return blk_queue_io_stat(q);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue