> > > > To fix this, I suggest a patch by emboding the mentioned solution. > > First, revive and rework cancel_freezing_and_thaw() function whitch > > stops the task from sleeping in refrigirator reliably. And, The task > > to be killed does not allow to freeze. > > Can't we simply change de_thread() to use freezable_schedule() ? > > Oleg.
We need to change freezable_schedule_timeout() instead. freezable_schedule also can't be frozen if sub-threads can't stop schedule(). Furthermore, I'm not sure if it is safe to freeze it at de_thread(). diff --git a/fs/exec.c b/fs/exec.c index 9c5ee2a..291cbd6 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -942,7 +942,7 @@ static int de_thread(struct task_struct *tsk) while (sig->notify_count) { __set_current_state(TASK_KILLABLE); spin_unlock_irq(lock); - schedule(); + while (!freezable_schedule_timeout(HZ)); if (unlikely(__fatal_signal_pending(tsk))) goto killed; spin_lock_irq(lock); Chanho