Skip to content

Commit

Permalink
virtio_blk: don't blindly derefence req->rq_disk
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Hellwig authored and Jens Axboe committed May 18, 2009
1 parent 77f6bf5 commit 6c3b46f
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/block/virtio_blk.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,11 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk,

static void do_virtblk_request(struct request_queue *q)
{
struct virtio_blk *vblk = NULL;
struct virtio_blk *vblk = q->queuedata;
struct request *req;
unsigned int issued = 0;

while ((req = blk_peek_request(q)) != NULL) {
vblk = req->rq_disk->private_data;
BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems);

/* If this request fails, stop queue and wait for something to
Expand Down Expand Up @@ -249,6 +248,7 @@ static int virtblk_probe(struct virtio_device *vdev)
goto out_put_disk;
}

vblk->disk->queue->queuedata = vblk;
queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue);

if (index < 26) {
Expand Down

0 comments on commit 6c3b46f

Please sign in to comment.