Warn people about flush_scheduled_work()

From: Alan Stern
Date: Mon Dec 14 2009 - 16:33:49 EST


Tejun:

You've spent some time working on the workqueue implementation, right?
I'd like to add comments or kerneldoc warning people about how
dangerous it can be to use flush_scheduled_work() and related
functions. Something like this:

Think twice before calling this function! It's very easy
to get into trouble if you don't take great care. Either
of the following situations will lead to deadlock:

Your code is running in the context of a scheduled
work routine.

Your code or its caller holds a lock needed by
one of the work items currently on the workqueue.

Since you generally don't know who your caller is, what locks
it holds, or what locks are needed by the items on the
workqueue, avoiding these situations is quite difficult.

Consider using cancel_work_sync() or cancel_delayed_work_sync()
instead. In most situations they will accomplish what you
need.

Does this sound like a good idea? Certainly flush_scheduled_work()
is used in places where it shouldn't be.

If comments like this are added, where do you think would be a good
place to put them?

Alan Stern

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