From 751c6a17042b5d011013d6963c0505d671cf708e Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 22 Jul 2009 16:42:57 +0200 Subject: kill drives_table First step cleaning up the drives handling. This one does nothing but removing drives_table[], still it became seriously big. drive_get_index() is gone and is replaced by drives_get() which hands out DriveInfo pointers instead of a table index. This needs adaption in *tons* of places all over. The drives are now maintained as linked list. Signed-off-by: Gerd Hoffmann Signed-off-by: Anthony Liguori --- hw/xen_disk.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'hw/xen_disk.c') diff --git a/hw/xen_disk.c b/hw/xen_disk.c index 7ed6c33aae..100ef8e9bc 100644 --- a/hw/xen_disk.c +++ b/hw/xen_disk.c @@ -107,7 +107,7 @@ struct XenBlkDev { int requests_finished; /* qemu block driver */ - int index; + DriveInfo *dinfo; BlockDriverState *bs; QEMUBH *bh; }; @@ -575,7 +575,7 @@ static void blk_alloc(struct XenDevice *xendev) static int blk_init(struct XenDevice *xendev) { struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); - int mode, qflags, have_barriers, info = 0; + int index, mode, qflags, have_barriers, info = 0; char *h; /* read xenstore entries */ @@ -622,9 +622,9 @@ static int blk_init(struct XenDevice *xendev) info |= VDISK_CDROM; /* init qemu block driver */ - blkdev->index = (blkdev->xendev.dev - 202 * 256) / 16; - blkdev->index = drive_get_index(IF_XEN, 0, blkdev->index); - if (blkdev->index == -1) { + index = (blkdev->xendev.dev - 202 * 256) / 16; + blkdev->dinfo = drive_get(IF_XEN, 0, index); + if (!blkdev->dinfo) { /* setup via xenbus -> create new block driver instance */ xen_be_printf(&blkdev->xendev, 2, "create new bdrv (xenbus setup)\n"); blkdev->bs = bdrv_new(blkdev->dev); @@ -640,7 +640,7 @@ static int blk_init(struct XenDevice *xendev) } else { /* setup via qemu cmdline -> already setup for us */ xen_be_printf(&blkdev->xendev, 2, "get configured bdrv (cmdline setup)\n"); - blkdev->bs = drives_table[blkdev->index].bdrv; + blkdev->bs = blkdev->dinfo->bdrv; } blkdev->file_blk = BLOCK_SIZE; blkdev->file_size = bdrv_getlength(blkdev->bs); @@ -729,7 +729,7 @@ static void blk_disconnect(struct XenDevice *xendev) struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev, xendev); if (blkdev->bs) { - if (blkdev->index == -1) { + if (!blkdev->dinfo) { /* close/delete only if we created it ourself */ bdrv_close(blkdev->bs); bdrv_delete(blkdev->bs); -- cgit 1.4.1