Thread (33 messages) 33 messages, 3 authors, 2016-06-29

Re: [PATCH v9 06/12] kthread: Add kthread_drain_worker()

From: Petr Mladek <hidden>
Date: 2016-06-27 14:33:55
Also in: linux-mm, lkml

Hi,

On Fri 2016-06-24 11:54:47, Tejun Heo wrote:
On Fri, Jun 24, 2016 at 09:05:15AM +0200, Peter Zijlstra wrote:
quoted
quoted
Given how rare that is 
Could you then not remove/rework these few cases for workqueue as well
and make that 'better' too?
Usage of draining is rare for workqueue but that still means several
legitimate users.  With draining there, it's logical to use it during
shutdown.  I don't think it makes sense to change it on workqueue
side.
quoted
quoted
and the extra
complexity of identifying self-requeueing cases, let's forget about
draining and on destruction clear the worker pointer to block further
queueing and then flush whatever is in flight.
You're talking about regular workqueues here?
No, kthread worker.  It's unlikely that kthread worker is gonna need
chained draining especially given that most of its usages are gonna be
conversions from raw kthread usages.  We won't lose much if anything
by just ignoring draining and making the code simpler.
OK, so you suggest to do the following:

  1. Add a flag into struct kthread_worker that will prevent
     from further queuing.

  2. kthread_create_worker()/kthread_destroy_worker() will
     not longer dynamically allocate struct kthread_worker.
     They will just start/stop the kthread.


The result will be:

  a. User will not need the strict synchronization between
     the queue and create/destroy operations.

  b. We could get rid of drain_kthread_worker() because
     flush_kthread_worker() will be enough.


IMHO, the 1st change does not make sense without the 2nd one.
Otherwise, users could do an out-of-memory access when testing
the freed kthread_worker flag.

Do I get this correctly please?

Best Regards,
Petr
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help