Re: [PATCH] kthread: Enhance kthread_stop to abort interruptible sleeps

From: Oleg Nesterov
Date: Tue Apr 24 2007 - 16:28:11 EST


On 04/24, Eric W. Biederman wrote:
>
> I don't know if this is the problem but it certainly needs to be fixed.

I guess you will re-submit these patches soon. May I suggest you to put
this

> + spin_lock_irq(&tsk->sighand->siglock);
> + signal_wake_up(tsk, 1);
> + spin_unlock_irq(&tsk->sighand->siglock);

and this

> fastcall void recalc_sigpending_tsk(struct task_struct *t)
> {
> if (t->signal->group_stop_count > 0 ||
> - (freezing(t)) ||
> + (freezing(t)) || __kthread_should_stop(t) ||

into the separate patch?

Perhaps I am too paranoid, and most probably this change is good, but
still I'm afraid this very subtle change may break things. In that case
it would be easy to revert that only part (for example for the testing
purposes).

Consider,

current->flags |= PF_NOFREEZE;

while (!kthread_should_stop()) {

begin_something();

// I am a kernel thread, all signals are ignored.
// I don't want to contribute to loadavg, so I am
// waiting for the absoulutely critical event in
// TASK__INTERRUPTIBLE state.

if (wait_event_interruptible(condition))
panic("Impossible!");

commit_something();
}

Oleg.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/