Filesystem use a seperate waitqueue for do_sync_work() to avoid a potential deadlock

Solution Verified - Updated -

Issue

  • The umount task can be blocked indefinitely with the following call trace
INFO: task umount:3880 blocked for more than 120 seconds.
      Not tainted 2.6.32-431.el6.x86_64 #1
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
umount        D 0000000000000001     0  3880   3368 0x00000080
 ffff88019fbe7bb8 0000000000000082 0000000000000000 ffffffff81068ff5
 ffff88019fbe7b28 ffff88023cea3538 ffff8800283968a8 ffff880028396840
 ffff88023ac81ab8 ffff88019fbe7fd8 000000000000fbc8 ffff88023ac81ab8
Call Trace:
 [<ffffffff81068ff5>] ? enqueue_entity+0x125/0x450
 [<ffffffff815287b5>] schedule_timeout+0x215/0x2e0
 [<ffffffff81528433>] wait_for_common+0x123/0x180
 [<ffffffff81065df0>] ? default_wake_function+0x0/0x20
 [<ffffffff81137000>] ? lru_add_drain_per_cpu+0x0/0x10
 [<ffffffff8152854d>] wait_for_completion+0x1d/0x20
 [<ffffffff81095937>] flush_work+0x77/0xc0
 [<ffffffff810951a0>] ? wq_barrier_func+0x0/0x20
 [<ffffffff81095ab3>] schedule_on_each_cpu+0x133/0x180
 [<ffffffff811be5c0>] ? invalidate_bh_lru+0x0/0x50
 [<ffffffff81136135>] lru_add_drain_all+0x15/0x20
 [<ffffffff811bf0ca>] invalidate_bdev+0x2a/0x50
 [<ffffffffa048a66b>] ext4_put_super+0x1bb/0x370 [ext4]
 [<ffffffff8118b24b>] generic_shutdown_super+0x5b/0xe0
 [<ffffffff8118b301>] kill_block_super+0x31/0x50
 [<ffffffff8118bad7>] deactivate_super+0x57/0x80
 [<ffffffff811aaaaf>] mntput_no_expire+0xbf/0x110
 [<ffffffff811ab5fb>] sys_umount+0x7b/0x3a0
 [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b

Environment

  • Red Hat Enterprise Linux 6
  • kernel-2.6.32-431.el6

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In