On 01/03/2018 06:03 AM, Coly Li wrote: > Kernel thread routine bch_writeback_thread() has the following code block, > > 452 set_current_state(TASK_INTERRUPTIBLE); > 453 > 454 if (kthread_should_stop()) > 455 return 0; > 456 > 457 schedule(); > 458 continue; > > At line 452, its status is set to TASK_INTERRUPTIBLE, and at line 454 if > kthread_should_stop() is true, a "return 0" at line 455 will to function > kernel/kthread.c:kthread() and call do_exit(). > > It is not good to enter do_exit() with task state TASK_INTERRUPTIBLE, in > following code path might_sleep() is called and a warning message is > reported by __might_sleep(): "WARNING: do not call blocking ops when > !TASK_RUNNING; state=1 set at [xxxx]". > > Indeed it does not hurt when kernel thread exits with TASK_INTERRUPTIBLE > state, but this warning message scares users, makes them feel there might > be something risky with bcache and hurt their data. > > In this patch, TASK_INTERRUPTIBLE is set after kthread_should_stop(), > so writeback kernel thread can exist and enter do_exit() with > TASK_RUNNING state. Warning message from might_sleep() is removed. > > Signed-off-by: Coly Li <colyli@xxxxxxx> Reviewed-by: Michael Lyle <mlyle@xxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-bcache" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html