diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-03-13 17:38:42 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2003-03-13 17:38:42 +0000 |
commit | 0ac392086ca11612e5d317b839bd53323cf8daac (patch) | |
tree | ea65c6065ca09b74689735dd7ff20cfe4edf0508 /xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/block/xl_scsi.c | |
parent | c568cc3fcf3ad2495d47a5a9787d8f98a89a5a65 (diff) | |
download | xen-0ac392086ca11612e5d317b839bd53323cf8daac.tar.gz xen-0ac392086ca11612e5d317b839bd53323cf8daac.tar.bz2 xen-0ac392086ca11612e5d317b839bd53323cf8daac.zip |
bitkeeper revision 1.122.1.12 (3e70c222sMX-OidE6LMQKldyEgrYWg)
xl_segment.c, xl_scsi.c, xl_ide.c:
Fix IDE/SCSI so that will not segfault on accessing non-existent devices.
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 | 16 |
1 files changed, 9 insertions, 7 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 75e379f1ba..f765d3f12e 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 @@ -42,6 +42,13 @@ int xlscsi_init(xen_disk_info_t *xdi) int i, result, units, minors, disk; struct gendisk *gd; + /* If we don't have any usable SCSI devices we may as well bail now. */ + units = 0; + for ( i = 0; i < xdi->count; i++ ) + if ( IS_SCSI_XENDEV(xdi->disks[i].device) && + ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++; + if ( units == 0 ) return 0; + SET_MODULE_OWNER(&xlscsi_block_fops); result = register_blkdev(XLSCSI_MAJOR, XLSCSI_MAJOR_NAME, @@ -74,13 +81,6 @@ int xlscsi_init(xen_disk_info_t *xdi) */ blk_queue_headactive(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR), 0); - /* If we don't have any usable SCSI devices we may as well bail now. */ - units = 0; - for ( i = 0; i < xdi->count; i++ ) - if ( IS_SCSI_XENDEV(xdi->disks[i].device) && - ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++; - if ( units == 0 ) return 0; - /* We may register up to 16 devices in a sparse identifier space. */ units = 16; @@ -134,6 +134,8 @@ int xlscsi_init(xen_disk_info_t *xdi) void xlscsi_cleanup(void) { + if ( xlscsi_gendisk == NULL ) return; + blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR)); xlscsi_gendisk = NULL; |