diff -ruN dist-2.4.12+patches/drivers/scsi/scsi.c cvs-2.4.12+patches/drivers/scsi/scsi.c --- dist-2.4.12+patches/drivers/scsi/scsi.c Mon Oct 15 10:22:41 2001 +++ cvs-2.4.12+patches/drivers/scsi/scsi.c Mon Oct 15 10:22:41 2001 @@ -1836,6 +1837,8 @@ pcount = next_scsi_host; + MOD_INC_USE_COUNT; + /* The detect routine must carefully spinunlock/spinlock if it enables interrupts, since all interrupt handlers do spinlock as well. @@ -1966,8 +1968,6 @@ (scsi_init_memory_start - scsi_memory_lower_value) / 1024, (scsi_memory_upper_value - scsi_init_memory_start) / 1024); #endif - - MOD_INC_USE_COUNT; if (out_of_space) { scsi_unregister_host(tpnt); /* easiest way to clean up?? */ diff -ruN dist-2.4.12+patches/drivers/scsi/sd.c cvs-2.4.12+patches/drivers/scsi/sd.c --- dist-2.4.12+patches/drivers/scsi/sd.c Mon Oct 15 10:22:41 2001 +++ cvs-2.4.12+patches/drivers/scsi/sd.c Mon Oct 15 10:22:41 2001 @@ -152,6 +158,9 @@ int diskinfo[4]; SDev = rscsi_disks[DEVICE_NR(dev)].device; + if (!SDev) + return -ENODEV; + /* * If we are in the middle of error recovery, don't let anyone * else try and use this device. Also, if error recovery fails, it @@ -533,6 +546,8 @@ target = DEVICE_NR(inode->i_rdev); SDev = rscsi_disks[target].device; + if (!SDev) + return -ENODEV; SDev->access_count--;