On Tue, 2011-11-01 at 09:30 -0700, Tejun Heo wrote: > Hello, Jeff. > > On Tue, Nov 01, 2011 at 06:59:58AM -0400, Jeff Layton wrote: > > > I suppose we could look at going back to the world of complicated > > > signal handling and TASK_INTERRUPTIBLE, but that's not a trivial change > > > either. The TASK_WAKE_FREEZABLE flag you mention might make more sense > > > than doing that. > > I see. > > > Also, since task state and signal handling clearly isn't my forte...can > > you clarify what the main difference is in using a TASK_KILLABLE sleep > > vs. TASK_INTERRUPTIBLE with all signals but SIGKILL blocked? > > > > I know that the process state would end up different (S vs. D state). > > Is there anything else we'd need to be concerned with if we converted > > all these call sites to use such a scheme in lieu of a new > > TASK_WAKE_FREEZABLE flag or similar? > > Manipulating sigmask would work in most cases but there are corner > cases (e.g. debug signals will force the mask off) and diddling with > sigmask in kernel generally isn't a good idea. > > If TASK_KILLABLE is only used for killable && freezable, that probably > would be the cleanest solution but given the name and the fact that > people are in general much more aware of SIGKILL's then freezer, I > think adding such assumption is likely to cause very subtle bugs. For > example, mem_cgroup_handle_oom() seems to assume that if it's waken > from TASK_KILLABLE either the condition it was waiting for is true or > it is dying. > > If there are only a handful sites which need this type of behavior, > wouldn't something like the following work? > > #define wait_event_freezekillable(wq, condition) \ > do { \ > DEFINE_WAIT(__wait); \ > for (;;) { \ > prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ > if (condition || fatal_signal_pending(current)) \ > break; \ > schedule(); \ > try_to_freeze(); \ > } \ > finish_wait(&wq, &__wait); \ > } while (0) Err... Won't this end up busy-waiting if a non-fatal signal is received? -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html