Skip to contentSkip to conversation

fixes an ide-scsi oops in 2.6-test5

PATCH New Mike Christie 1 participant 1 message Sep 13, 2003 SCSI

lore
Share & tools
lore
#0 lore raw

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);
 }