[ Linux 4.4 stable ] missing 'printk: set may_schedule for some of console_trylock() callers'

From: Michael Wang
Date: Tue Jul 25 2017 - 04:28:24 EST


Hi, greg k-h

During our testing with 4.4.73 we got soft lockup like:

NMI watchdog: BUG: soft lockup - CPU#2 stuck for 23s! [systemd-udevd:856]
...
Call Trace:
[<ffffffff8109d139>] vprintk_emit+0x319/0x4a0
[<ffffffff8112182d>] printk_emit+0x33/0x3b
[<ffffffff812f9e9c>] ? simple_strtoull+0x2c/0x50
[<ffffffff8109d39a>] devkmsg_write+0xaa/0x100
[<ffffffff8109d2f0>] ? vprintk+0x30/0x30
[<ffffffff811915f2>] do_readv_writev+0x1c2/0x270
[<ffffffff8117899d>] ? kmem_cache_free+0x7d/0x1a0
[<ffffffff81191729>] vfs_writev+0x39/0x50
[<ffffffff8119240a>] SyS_writev+0x4a/0xd0
[<ffffffff8158bc97>] entry_SYSCALL_64_fastpath+0x12/0x6a

Currently in 4.4 the console_unlock() called by vprintk_emit() is with
preemption disabled, so the cond_resched is not working, and soft lockup
appear if it take too much time on writing data into every console.

We found the upstream patch:
commit 6b97a20d3a79 printk: set may_schedule for some of console_trylock() callers

which should have addressed this issue, but not included in the latest 4.4.78 stable
yet, is there any plan on backport it in future?

Regards,
Michael Wang