diff options
author | kaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk> | 2003-03-07 11:29:57 +0000 |
---|---|---|
committer | kaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk> | 2003-03-07 11:29:57 +0000 |
commit | 07486ec49f025987359499eb2f06f0b794994d42 (patch) | |
tree | d5ca0fe98a09dc1f3f2d8c8089d5ae7b4489b699 /xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c | |
parent | d0ec9023281a5d6ed0aee9341c7889320664e862 (diff) | |
download | xen-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.c | 7 |
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, |