fixes an ide-scsi oops in 2.6-test5
PATCH 1/1 fixes an ide-scsi oops in 2.6-test5
The attached patch cleans up the ide-scsi driver model code and fixes the oops described below which is caused when doing a rmmod on the driver. The patch was built against 2.6-test5.
Mike Christie
[email protected]
Sep 12 17:00:14 dyn318274bld kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000024 Sep 12 17:00:14 dyn318274bld kernel: printing eip: Sep 12 17:00:14 dyn318274bld kernel: c01a9a25 Sep 12 17:00:14 dyn318274bld kernel: *pde = 00000000 Sep 12 17:00:14 dyn318274bld kernel: Oops: 0002 [#1] Sep 12 17:00:14 dyn318274bld kernel: CPU: 0 Sep 12 17:00:14 dyn318274bld kernel: EIP: 0060:[<c01a9a25>] Not tainted Sep 12 17:00:14 dyn318274bld kernel: EFLAGS: 00210202 Sep 12 17:00:14 dyn318274bld kernel: EIP is at simple_rmdir+0x35/0x50 Sep 12 17:00:14 dyn318274bld kernel: eax: 00000000 ebx: cb225c80 ecx: cb225c88 edx: ffffffd9 Sep 12 17:00:14 dyn318274bld kernel: esi: c50a8740 edi: c636b0e0 ebp: cb225c80 esp: c565fe90 Sep 12 17:00:14 dyn318274bld kernel: ds: 007b es: 007b ss: 0068 Sep 12 17:00:14 dyn318274bld kernel: Process rmmod (pid: 2916, threadinfo=c565e000 task=ca07c100) Sep 12 17:00:14 dyn318274bld kernel: Stack: cb225c80 c8e89740 c50a87c0 c50a8740 c01c7a70 c50a8740 cb225c80 00000000 Sep 12 17:00:14 dyn318274bld kernel: c565e000 cb225c80 cb225cb4 c01c7c51 cb225c80 cb225bc0 c01c7a70 c8e89740 Sep 12 17:00:14 dyn318274bld kernel: cb225b00 c59d50e8 c0500e80 c565e000 c59d510c c05008a8 d08aa7c0 00000000 Sep 12 17:00:14 dyn318274bld kernel: Call Trace: Sep 12 17:00:14 dyn318274bld kernel: [<c01c7a70>] remove_dir+0x70/0xb0 Sep 12 17:00:14 dyn318274bld kernel: [<c01c7c51>] sysfs_remove_dir+0x191/0x3c0 Sep 12 17:00:14 dyn318274bld kernel: [<c01c7a70>] remove_dir+0x70/0xb0 Sep 12 17:00:14 dyn318274bld kernel: [<c026ab73>] kobject_del+0x43/0x80 Sep 12 17:00:14 dyn318274bld kernel: [<c02e43bf>] device_del+0x7f/0xb0 Sep 12 17:00:14 dyn318274bld kernel: [<d08a81dd>] idescsi_cleanup+0x4d/0x60 [ide_scsi] Sep 12 17:00:14 dyn318274bld kernel: [<c03194bf>] ide_unregister_driver+0x12f/0x214 Sep 12 17:00:14 dyn318274bld kernel: [<c026a828>] unlink+0x48/0xb0 Sep 12 17:00:14 dyn318274bld kernel: [<d08a92c7>] exit_idescsi_module+0x27/0x29 [ide_scsi] Sep 12 17:00:14 dyn318274bld kernel: [<c01483d8>] sys_delete_module+0x168/0x1d0 Sep 12 17:00:14 dyn318274bld kernel: [<c010b269>] sysenter_past_esp+0x52/0x71 Sep 12 17:00:14 dyn318274bld kernel: Sep 12 17:00:14 dyn318274bld kernel: Code: ff 48 24 89 5c 24 04 89 34 24
e8 9c ff ff ff 31 d2 ff 4e 24
drivers/scsi/ide-scsi.c +2 -25
@@ -946,13 +946,6 @@ .proc_name = "ide-scsi", }; -static struct device idescsi_primary = { - .bus_id ="ide-scsi" , -}; -static struct bus_type idescsi_emu_bus = { - .name ="ide-scsi" , -}; -static int idescsi_attach (ide_drive_t *drive) {idescsi_scsi_t *idescsi;
@@ -975,7 +968,7 @@if (!err) {idescsi_setup (drive, idescsi); drive->disk->fops = &idescsi_ops; - err =scsi_add_host (host, &idescsi_primary); + err =scsi_add_host (host, &drive->gendev);if (!err) {scsi_scan_host (host);return 0 ;
@@ -990,27 +983,11 @@static int __init init_idescsi_module (void ) { -int err; - - err =bus_register (&idescsi_emu_bus); -if (!err) { - err =device_register (&idescsi_primary); -if (!err) { - err =ide_register_driver (&idescsi_driver); -if (!err) -return 0 ; - -device_unregister (&idescsi_primary); - } -bus_unregister (&idescsi_emu_bus); - } -return err; +return ide_register_driver (&idescsi_driver); } static void __exit exit_idescsi_module(void) { -device_unregister (&idescsi_primary); -bus_unregister (&idescsi_emu_bus);ide_unregister_driver (&idescsi_driver); }