aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/virtio_blk.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2009-05-18 08:38:28 -0400
committerJens Axboe <jens.axboe@oracle.com>2009-05-18 08:38:28 -0400
commit6c3b46f74587d46e71b8c2b78fdca626a3aca280 (patch)
tree3d48a026a55c615d4072fc4b75dbca20949bad81 /drivers/block/virtio_blk.c
parent77f6bf57ba9d2c50173536dbfdacdab27cb867ca (diff)
virtio_blk: don't blindly derefence req->rq_disk
request->rq_disk is only set for FS requests or BLOCK_PC requests originating from the generic block layer scsi ioctls. It's not set for requests origination from other soures or internal cache flush commands implemented by the patch I'll send after this. So instead of using it to get at the private data in do_virtblk_request setup queue->queuedata and use it. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/block/virtio_blk.c')
-rw-r--r--drivers/block/virtio_blk.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 29a9daf48621..dfe9ee5f1696 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -124,12 +124,11 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk,
124 124
125static void do_virtblk_request(struct request_queue *q) 125static void do_virtblk_request(struct request_queue *q)
126{ 126{
127 struct virtio_blk *vblk = NULL; 127 struct virtio_blk *vblk = q->queuedata;
128 struct request *req; 128 struct request *req;
129 unsigned int issued = 0; 129 unsigned int issued = 0;
130 130
131 while ((req = blk_peek_request(q)) != NULL) { 131 while ((req = blk_peek_request(q)) != NULL) {
132 vblk = req->rq_disk->private_data;
133 BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems); 132 BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems);
134 133
135 /* If this request fails, stop queue and wait for something to 134 /* If this request fails, stop queue and wait for something to
@@ -249,6 +248,7 @@ static int virtblk_probe(struct virtio_device *vdev)
249 goto out_put_disk; 248 goto out_put_disk;
250 } 249 }
251 250
251 vblk->disk->queue->queuedata = vblk;
252 queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue); 252 queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue);
253 253
254 if (index < 26) { 254 if (index < 26) {