[SCSI] fix potential panic with proc on module removal
authorJames Bottomley <James.Bottomley@steeleye.com>
Sun, 2 Oct 2005 17:59:49 +0000 (12:59 -0500)
committerJames Bottomley <jejb@mulgrave.(none)>
Sun, 2 Oct 2005 20:20:03 +0000 (15:20 -0500)
There's a problem in our host release in that it calls
scsi_proc_hostdir_rm(). However, if you hold a reference to the host as
you remove the module, the host template (which proc uses) will be freed
and the system will panic when the host device is finally released.

Fix this by moving scsi_proc_hostdir_rm() to where it should be: in
scsi_remove_host().

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/hosts.c

index f2a72d33132c4e24e9e9b5f29fb4126276ea089d..02fe371b0ab87142b718e2d707bf365427f08ea9 100644 (file)
@@ -176,6 +176,7 @@ void scsi_remove_host(struct Scsi_Host *shost)
        transport_unregister_device(&shost->shost_gendev);
        class_device_unregister(&shost->shost_classdev);
        device_del(&shost->shost_gendev);
+       scsi_proc_hostdir_rm(shost->hostt);
 }
 EXPORT_SYMBOL(scsi_remove_host);
 
@@ -262,7 +263,6 @@ static void scsi_host_dev_release(struct device *dev)
        if (shost->work_q)
                destroy_workqueue(shost->work_q);
 
-       scsi_proc_hostdir_rm(shost->hostt);
        scsi_destroy_command_freelist(shost);
        kfree(shost->shost_data);