Messages in this thread | | | Date | Tue, 25 Sep 2007 11:09:07 -0400 (EDT) | From | Alan Stern <> | Subject | Re: [PATCH 1/4] module: implement module_inhibit_unload() |
| |
On Tue, 25 Sep 2007, Tejun Heo wrote:
> Alan Stern wrote: > >> The unloading can proceed once module_unload_inhibit_cnt reaches zero. > >> An unloading thread only has to care about inhibition put in effect > >> before unloading has started, so there's no need to check again. > > > > You haven't fully answered Jon's question. Suppose > > module_unload_inhibit_cnt is nonzero, so the task adds itself to the > > module_unload_wait queue, changes to TASK_UNINTERRUPTIBLE, and calls > > schedule. There's nothing to prevent somebody else from waking the > > task back up before the original inhibition has been lifted. > > Hmmm... I might be missing something here. Who else can wake up a > thread in uninterruptible sleep?
In principle, anything can. There has never been any guarantee in the kernel that a task sleeping on a waitqueue will remain asleep until the waitqueue is signalled. That's part of the reason why things like __wait_event() are coded as loops.
Alan Stern
- 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/
| |