[PATCH 2/2] UTRACE_STOP: nesting engine management (updated)

Oleg Nesterov oleg at redhat.com
Thu Mar 12 17:35:32 UTC 2009


On 03/12, Renzo Davoli wrote:
>
> I have update also the second patch. Please note that now this patch
> must be applied after the first one.
> This patch implements a consistent nesting model for utrace machines.
> (There is a full description in the messages I sent on Feb. 14 and Mar. 6)

This patch does 2 completely different things. I think you should
make separate patches.

Again, we need Roland's opinion, but could you explain why it would
be better to use _reverse in utrace_report_syscall_entry() ?

As for another change,

> --- linux-2.6.29-rc7-git5-utrace-p1/kernel/utrace.c	2009-03-12 11:05:50.000000000 +0100
> +++ linux-2.6.29-rc7-git5-utrace-p2/kernel/utrace.c	2009-03-12 13:37:27.000000000 +0100
> @@ -1405,6 +1405,7 @@
>  static bool finish_callback(struct utrace *utrace,
>  			    struct utrace_report *report,
>  			    struct utrace_engine *engine,
> +			    struct task_struct *task,
>  			    u32 ret)
>  {
>  	enum utrace_resume_action action = utrace_resume_action(ret);
> @@ -1426,6 +1427,7 @@
>  				spin_lock(&utrace->lock);
>  				mark_engine_wants_stop(engine);
>  				spin_unlock(&utrace->lock);
> +				utrace_stop(task, utrace);

I don't think this is safe. If we do utrace_stop() here, the next engine
can be detached before we return (UTRACE_DETACH assumes it it safe to
unlink the engine when the target is stopped). This means we can't
continue list_for_each_entry(engine, &utrace->attached, entry) after
return from finish_callback().

Oleg.




More information about the utrace-devel mailing list