Messages in this thread | | | Subject | Re: IDE issues with "choose_drive" | From | Benjamin Herrenschmidt <> | Date | Sat, 08 Oct 2005 11:15:03 +1000 |
| |
On Thu, 2005-10-06 at 11:02 +1000, Benjamin Herrenschmidt wrote: > > The first one is the one I'm trying to fix, it's basically a hang on > > wakeup from sleep. What happens is that both drives are blocked > > (suspended, drive->blocked is set). Their IO queues contains some > > requests that haven't been serviced yet. We receive the resume() > > callback for one of them. We react by inserting a wakeup request at the > > head of the queue and waiting for it to complete. However, when we reach > > ide_do_request(), choose_drive() may return the other drive (the one > > that is still sleeping). In this case, we hit the test for blocked queue > > and just break out of the loop. We end up never servicing the other > > drive queue which is the one we are trying to wakeup, thus we hang. > > Oh, and here's the ugly workaround beeing tested by the users who are > having the problem so far. Not really a proper fix though...
No reply ... it's a bit urgent as it may bite any system trying to suspend with a slave IDE disk at least (not including the other possible problems I've spotted with this code).
I'm tempted to just send my workaround patch to Linus & Andrew (might still make it into 2.6.14). That would at least fix the bug with resume from sleep. What do you think ?
Ben.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |