[RFC PATCH 07/18] kthread: Make iterant kthreads freezable by default

Petr Mladek pmladek at suse.cz
Fri Jun 5 08:01:06 PDT 2015


Many kthreads already calls set_freezable() before they enter the main
cycle. One of the reasons for creating iterant kthreads is to create
a safe point for freezing and make even more kthreads properly
freezable. Therefore it would make sense to set all iterant
kthreads freezable by default.

However some kthreads might be hard to make properly freezable.
For example, if they do non-interruptible sleeps. They would
need to explicitly clear PF_NOFREEZE flag in the init() call.
But it should be avoided whenever possible.

Signed-off-by: Petr Mladek <pmladek at suse.cz>
---
 kernel/kthread.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/kernel/kthread.c b/kernel/kthread.c
index 185902d0e293..e34f67cb8ecf 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -412,13 +412,20 @@ struct task_struct *kthread_create_on_cpu(int (*threadfn)(void *data),
  *
  * This function defines the work flow of iterant kthreads. It calls
  * the given callbacks. Also it defines and implements a common
- * check point for freezing and stopping.
+ * check point for freezing, stopping, and signal handling.
+ *
+ * IMPORTANT: Iterant kthreads are freezable by default. The functions
+ * defined in the given struct kthread_iterant still have to explicitly
+ * call try_to_freeze() after each interruptible sleep. They must avoid
+ * non-interruptible sleep if freezing is allowed.
  */
 static int kthread_iterant_fn(void *kti_ptr)
 {
 	struct kthread_iterant *kti = kti_ptr;
 	void *data = kti->data;
 
+	set_freezable();
+
 	if (kti->init)
 		kti->init(data);
 
-- 
1.8.5.6




More information about the linux-mtd mailing list