fix rmmod sbp2 hang in 2.6.7
PATCH 1/1 fix rmmod sbp2 hang in 2.6.7
Hi:
http://sourceforge.net/mailarchive/forum.php?thread_id=5036991&forum_id=5389
* modified files
drivers/base/driver.c +1 -1
@@ -106,8 +106,8 @@void driver_unregister (struct device_driver * drv) { -bus_remove_driver (drv);down (&drv->unload_sem); +bus_remove_driver (drv);up (&drv->unload_sem); }
---
Hu Gang / Steve
Linux Registered User 204016
GPG Public Key: http://soulinfo.com/~hugang/hugang.asc
On Wed, 14 Jul 2004 11:48:54 +0800
Hugang <[email protected]> wrote:
| Hi: | | http://sourceforge.net/mailarchive/forum.php?thread_id=5036991&forum_id=5389 | | * modified files | | --- orig/drivers/base/driver.c | +++ mod/drivers/base/driver.c | @@ -106,8 +106,8 @@ | | void driver_unregister(struct device_driver * drv) | { | - bus_remove_driver(drv); | down(&drv->unload_sem); | + bus_remove_driver(drv); | up(&drv->unload_sem); | } |
Sorry, the above patch, can't fix rmmod sbp2 complete,I still got hang when rmmod sbp2 in my PowerBook G4 sometimes.
Signature · 3 lines
Hu Gang / Steve Linux Registered User 204016 GPG Public Key: http://soulinfo.com/~hugang/hugang.asc
On Wed, 14 Jul 2004 16:13:57 +0800
Hugang <[email protected]> wrote:
| On Wed, 14 Jul 2004 11:48:54 +0800 | Hugang <[email protected]> wrote: | .... | Sorry, the above patch, can't fix rmmod sbp2 complete,I still got hang when | rmmod sbp2 in my PowerBook G4 sometimes. |
This new patch can complete fix the bug. That's really hack. Any comment are welcome.
drivers/base/driver.c +2 -2
@@ -107,8 +107,8 @@void driver_unregister (struct device_driver * drv) {bus_remove_driver (drv); -down (&drv->unload_sem); -up (&drv->unload_sem); +//down(&drv->unload_sem); +//up(&drv->unload_sem); }
Signature · 3 lines
Hu Gang / Steve Linux Registered User 204016 GPG Public Key: http://soulinfo.com/~hugang/hugang.asc
Quoted 10 lines · Hugang
On Wed, 14 Jul 2004 16:13:57 +0800
Hugang <[email protected]> wrote:| On Wed, 14 Jul 2004 11:48:54 +0800 | Hugang <[email protected]> wrote: | .... | Sorry, the above patch, can't fix rmmod sbp2 complete,I still got hang when | rmmod sbp2 in my PowerBook G4 sometimes. |
Quoted 2 lines
This new patch can complete fix the bug. That's really hack. Any comment are welcome.
This down+up prevents drivers from being unloaded until there are no references to their struct device_driver. By removing this, you open the very real possibility for an oops to occur.
If you're waiting inside that function for the last reference to be dropped, the real question is why you still have references to it.
Signature · 4 lines
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial coreOn Wed, 14 Jul 2004 10:24:17 +0100
Russell King <[email protected]> wrote:
| This down+up prevents drivers from being unloaded until there are no | references to their struct device_driver. By removing this, you open | the very real possibility for an oops to occur.
Yes, I agree with you. When sbp2 is using the module count is not zero, so I can rmmod it, So I think, for sbp2 that's safe, That's true on my laptop.
| | If you're waiting inside that function for the last reference to be | dropped, the real question is why you still have references to it.
There are tree places that reference ->unload_sem in linux kernel tree, but I don't known, why the same code in 2.6.4 can works fine. :)
bus.c:68: up(&drv->unload_sem); driver.c:110: down(&drv->unload_sem); driver.c:111: up(&drv->unload_sem);
Signature · 3 lines
Hu Gang / Steve Linux Registered User 204016 GPG Public Key: http://soulinfo.com/~hugang/hugang.asc
Quoted 8 lines · Hugang
On Wed, 14 Jul 2004 10:24:17 +0100
Russell King <[email protected]> wrote:| This down+up prevents drivers from being unloaded until there are no | references to their struct device_driver. By removing this, you open | the very real possibility for an oops to occur.Yes, I agree with you. When sbp2 is using the module count is not zero, so I can rmmod it, So I think, for sbp2 that's safe, That's true on my laptop.
The module count does not cover all cases, especially the case which this semaphore protects against.
Signature · 4 lines
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial coreQuoted 14 lines · Russell King
Quoted 10 lines · Hugang
On Wed, 14 Jul 2004 16:13:57 +0800
Hugang <[email protected]> wrote:| On Wed, 14 Jul 2004 11:48:54 +0800 | Hugang <[email protected]> wrote: | .... | Sorry, the above patch, can't fix rmmod sbp2 complete,I still got hang when | rmmod sbp2 in my PowerBook G4 sometimes. |Quoted 2 lines
This new patch can complete fix the bug. That's really hack. Any comment are welcome.
Quoted 6 lines
This down+up prevents drivers from being unloaded until there are no references to their struct
device_driver. By removing this, you open the very real possibility for an oops to occur.If you're waiting inside that function for the last reference to be dropped, the real question is why you still have references to it.
Seems like every 2 months or so I have to revisit the sbp2 module to see where the scsi layer has changed (or the driver model) so that I can get all the reference counting to equal out properly. Guess it's been two months again :)
Signature · 4 lines
Debian - http://www.debian.org/ Linux 1394 - http://www.linux1394.org/ Subversion - http://subversion.tigris.org/ WatchGuard - http://www.watchguard.com/
Here's a wild guess. Is the 'sg' driver loaded. This sounds similar to my complaint with trying to rmmod 'st'. When I load my SCSI HBA driver, it automagically pulls in st for my tape drive *and* sg. Now, if you try to remove it, it "hangs". It's because sg also got a reference. If you rmmod 'sg' then the rmmod of st frees up too.
The problem above is that st has module use count of 0, but that's a lie. sg has glommed on that device, and the true reference count is actually one (if you consider that st owns the tape device). It seems to me that what should happen is for the SCSI layer/drivers to handle kicking sg out when they want to unload. If the consensus is that this is desirable, I'm happy to go off and see what needs to be done. Otherwise, I'll crawl back into my hole :-)
Tim
Quoted 26 lines · Ben Collins
Quoted 14 lines · Russell King
Quoted 10 lines · Hugang
On Wed, 14 Jul 2004 16:13:57 +0800
Hugang <[email protected]> wrote:| On Wed, 14 Jul 2004 11:48:54 +0800 | Hugang <[email protected]> wrote: | .... | Sorry, the above patch, can't fix rmmod sbp2 complete,I still got hang when | rmmod sbp2 in my PowerBook G4 sometimes. |Quoted 2 lines
This new patch can complete fix the bug. That's really hack. Any comment are welcome.
Quoted 6 lines
This down+up prevents drivers from being unloaded until there are no references to their struct
device_driver. By removing this, you open the very real possibility for an oops to occur.If you're waiting inside that function for the last reference to be dropped, the real question is why you still have references to it.
Seems like every 2 months or so I have to revisit the sbp2 module to see where the scsi layer has changed (or the driver model) so that I can get all the reference counting to equal out properly. Guess it's been two months again :)
Signature · 2 lines
Tim Wright <[email protected]> Splhi