• Mikael Pettersson's avatar
    fix ide-cd/ide-scsi oopses after module unload · 5885ddb0
    Mikael Pettersson authored
    In 2.5 (the bug's been there since 2.5.42), rmmod:ing a
    modular IDE subdriver like ide-cd or ide-scsi and then
    rebooting causes an oops in device_shutdown(). This is because
    the IDE layer doesn't reset the drive->gendev.driver pointer
    that it previously set up to point to data structures in the
    subdriver module. device_shutdown() sees a non-NULL ->driver,
    dereferences it, and oopses.
    
    The patch below for 2.5.54 fixes two generic bugs related to
    unloading of modular IDE subdrivers, and one specific to ide-scsi:
    
    1. ata_attach() needs to set drive->gendev.driver = NULL
       when no specific driver claims the drive. This prevents a
       drive previously owned by a subdriver module from keeping
       its ->gendev.driver pointing into that module.
    
    2. ide_unregister_driver() needs to unregister &driver->gen_driver;
       this is to balance the corresponding register call in
       ide_register_driver(). [This part of the patch is originally
       by Patrick Mochel.]
    
    3. ide-scsi.c abuses ide_driver_t's busy field as a counter
       while the field in fact is a single-bit boolean. This causes
       the busyness of the driver to be incorrect while the driver
       is active. (From my recent patch for 2.4.20-ac2/2.4.21-pre2.)
    5885ddb0
ide-scsi.c 29.4 KB