aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c
diff options
context:
space:
mode:
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-03-07 11:29:57 +0000
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-03-07 11:29:57 +0000
commit07486ec49f025987359499eb2f06f0b794994d42 (patch)
treed5ca0fe98a09dc1f3f2d8c8089d5ae7b4489b699 /xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c
parentd0ec9023281a5d6ed0aee9341c7889320664e862 (diff)
downloadxen-07486ec49f025987359499eb2f06f0b794994d42.tar.gz
xen-07486ec49f025987359499eb2f06f0b794994d42.tar.bz2
xen-07486ec49f025987359499eb2f06f0b794994d42.zip
bitkeeper revision 1.111 (3e6882b5ERWU6qPXXUlLkYvavej4FQ)
xl_segment.c, xl_scsi.c, xl_ide.c, xl_block.h, xl_block.c: Partition tables are now revalidated on demand for all XL blkdevs (IDE, SCSI, and virtual).
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c
index ddbd22d5f1..68566799bd 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c
@@ -79,6 +79,8 @@ int xlscsi_init(xen_disk_info_t *xdi)
for ( i = 0; i < xdi->count; i++ )
if ( xdi->disks[i].type == XEN_DISK_SCSI ) units++;
+ if ( units == 0 ) return 0;
+
/* Construct an appropriate gendisk structure. */
minors = units * (1<<SCSI_PARTN_BITS);
gd = kmalloc(sizeof(struct gendisk), GFP_KERNEL);
@@ -89,7 +91,7 @@ int xlscsi_init(xen_disk_info_t *xdi)
gd->minor_shift = SCSI_PARTN_BITS;
gd->max_p = 1<<SCSI_PARTN_BITS;
gd->nr_real = units;
- gd->real_devices = NULL;
+ gd->real_devices = kmalloc(units * sizeof(xl_disk_t), GFP_KERNEL);
gd->next = NULL;
gd->fops = &xlscsi_block_fops;
gd->de_arr = kmalloc(sizeof(*gd->de_arr) * units, GFP_KERNEL);
@@ -98,6 +100,7 @@ int xlscsi_init(xen_disk_info_t *xdi)
memset(gd->part, 0, minors * sizeof(struct hd_struct));
memset(gd->de_arr, 0, sizeof(*gd->de_arr) * units);
memset(gd->flags, 0, sizeof(*gd->flags) * units);
+ memset(gd->real_devices, 0, sizeof(xl_disk_t) * units);
xlscsi_gendisk = gd;
add_gendisk(gd);
@@ -106,6 +109,8 @@ int xlscsi_init(xen_disk_info_t *xdi)
for ( i = 0; i < xdi->count; i++ )
{
if ( xdi->disks[i].type != XEN_DISK_SCSI ) continue;
+ ((xl_disk_t *)gd->real_devices)[disk].capacity =
+ xdi->disks[i].capacity;
register_disk(gd,
MKDEV(XLSCSI_MAJOR, disk<<SCSI_PARTN_BITS),
1<<SCSI_PARTN_BITS,