mmc: core: add timeout for context_info->is_done_rcv
authorShawn Lin <shawn.lin@rock-chips.com>
Tue, 16 Jun 2015 10:01:40 +0000 (18:01 +0800)
committerShawn Lin <shawn.lin@rock-chips.com>
Tue, 23 Jun 2015 01:36:43 +0000 (09:36 +0800)
commit8f7ac8a82fcb69ef48708218a7ea7b2f57e492d6
tree84749716866e00510c3aa181e903d8c8adfc5a7c
parent5a2215a54f869f5b0aee6980b8516e5e459fcd2f
mmc: core: add timeout for context_info->is_done_rcv

  After dequeue a rq from blk and a accidental rq missing makes
bq->queue fails to fetch blk_rq again since !rq w/o been done.
Whatsoever was that, MUST ensure a schedule mechanisam to break
the dead loop, and issue the missing one again. We observe this
problem, all processes calling aio page writeback or commiting
journal were confined in io_schedule waiting for previous blk rq
to be completed, and cause os stucked.

page:c1337420 count:3 mapcount:0 mapping:dc8fdc34 index:0x502
page flags: 0x4000286c(referenced|uptodate|lru|active|private|writeback)
sleep_on_page: inode: dc8fdb58, 119091
CPU: 3 PID: 199 Comm: abc Not tainted 3.10.0 #298
[<c0013e44>] (unwind_backtrace+0x0/0xe0) from [<c001175c>] (show_stack+0x10/0x14)
[<c001175c>] (show_stack+0x10/0x14) from [<c00cadb8>] (sleep_on_page+0x6c/0x8c)
[<c00cadb8>] (sleep_on_page+0x6c/0x8c) from [<c0769a80>] (__wait_on_bit+0x54/0xa0)
[<c0769a80>] (__wait_on_bit+0x54/0xa0) from [<c00ca88c>] (wait_on_page_bit+0x8c/0x9c)
[<c00ca88c>] (wait_on_page_bit+0x8c/0x9c) from [<c00ca954>] (filemap_fdatawait_range+0x6c/0x110)
[<c00ca954>] (filemap_fdatawait_range+0x6c/0x110) from [<c00cbd8c>] (filemap_write_and_wait_range+0x54/0x78)
[<c00cbd8c>] (filemap_write_and_wait_range+0x54/0x78) from [<c0182e14>] (ext4_sync_file+0xdc/0x308)
[<c0182e14>] (ext4_sync_file+0xdc/0x308) from [<c01305f8>] (vfs_fsync_range+0x34/0x44)
[<c01305f8>] (vfs_fsync_range+0x34/0x44) from [<c01306b0>] (generic_write_sync+0x80/0x88)
[<c01306b0>] (generic_write_sync+0x80/0x88) from [<c00cc3fc>] (generic_file_aio_write+0xa0/0xb0)
[<c00cc3fc>] (generic_file_aio_write+0xa0/0xb0) from [<c0109198>] (do_sync_write+0x74/0x98)
[<c0109198>] (do_sync_write+0x74/0x98) from [<c0109ab8>] (vfs_write+0xd4/0x16c)
[<c0109ab8>] (vfs_write+0xd4/0x16c) from [<c0109df8>] (SyS_write+0x3c/0x60)
[<c0109df8>] (SyS_write+0x3c/0x60) from [<c000da00>] (ret_fast_syscall+0x0/0x30)

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Tested-by: Meiyou Chen <cmy@rock-chips.com>
drivers/mmc/core/core.c