public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] virtio_blk: don't blindly derefence req->rq_disk
@ 2009-05-11  8:35 Christoph Hellwig
  2009-05-12 13:44 ` Rusty Russell
  0 siblings, 1 reply; 2+ messages in thread
From: Christoph Hellwig @ 2009-05-11  8:35 UTC (permalink / raw)
  To: Rusty Russell; +Cc: kvm

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>

Index: xfs/drivers/block/virtio_blk.c
===================================================================
--- xfs.orig/drivers/block/virtio_blk.c	2009-05-11 10:09:59.833784412 +0200
+++ xfs/drivers/block/virtio_blk.c	2009-05-11 10:33:31.099659254 +0200
@@ -153,12 +153,11 @@ static bool do_req(struct request_queue 
 
 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 = elv_next_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
@@ -286,6 +285,7 @@ static int virtblk_probe(struct virtio_d
 		goto out_put_disk;
 	}
 
+	vblk->disk->queue->queuedata = vblk;
 	queue_flag_set_unlocked(QUEUE_FLAG_VIRT, vblk->disk->queue);
 
 	if (index < 26) {

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] virtio_blk: don't blindly derefence req->rq_disk
  2009-05-11  8:35 [PATCH] virtio_blk: don't blindly derefence req->rq_disk Christoph Hellwig
@ 2009-05-12 13:44 ` Rusty Russell
  0 siblings, 0 replies; 2+ messages in thread
From: Rusty Russell @ 2009-05-12 13:44 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: kvm

On Mon, 11 May 2009 06:05:19 pm Christoph Hellwig wrote:
> 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.

OK, shows how little I know about the block layer, seems fine.

Applied thanks,
Rusty.
(For those paying attention: we still need disk->private_data for get_geo).


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-05-12 13:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-11  8:35 [PATCH] virtio_blk: don't blindly derefence req->rq_disk Christoph Hellwig
2009-05-12 13:44 ` Rusty Russell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox