Re: RCU callback and scheduling while atomic!

From: Dipankar Sarma
Date: Tue Aug 31 2004 - 11:29:26 EST


On Tue, Aug 31, 2004 at 06:17:10PM +0200, Herbert Poetzl wrote:
>
> it seems that the RCU callback is not allowed
> to (re-)schedule, as it is done occasionally by
> put_namespace() for example, as I keep getting
> "bad: scheduling while atomic!", when I do so ...
>
> now the question: what is the 'correct' way to
> drop a reference to a namespace when freeing up
> a structure from an RCU callback?

You are right about not allowing schedule from callbacks. The callbacks
are called from softirq context.

Without your current code, it is difficult to say how to do this but here are
some guesses -

1. You could mark the freed up structure deleted on update, do
put_namspace() and do only the freeing in the rcu callback.
dentries do this.

2. If not performance critical, you could use a workqueue to
do the actual freeing including put_namespace(). Just wake up
from the rcu callback.

These may or may not be applicable to your case. More details will
help.

Thanks
Dipankar
-
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/