diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2009-02-02 07:42:32 (GMT) |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-02-02 07:42:32 (GMT) |
commit | fb8ec18c316d869271137c97320dbfd2def56569 (patch) | |
tree | 8cf6a84747e10f0cf78a1cb73b1ea69681da0d70 | |
parent | 45c82b5a770be66845687a7d027c8b52946d59af (diff) | |
download | linux-fb8ec18c316d869271137c97320dbfd2def56569.tar.xz |
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>
-rw-r--r-- | block/blk-core.c | 6 | ||||
-rw-r--r-- | block/blk.h | 8 |
2 files changed, 11 insertions, 3 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index ca69f3d..29bcfac 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -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; /* diff --git a/block/blk.h b/block/blk.h index 6e1ed40..0dce92c 100644 --- a/block/blk.h +++ b/block/blk.h @@ -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 |