On 2016/4/28 22:03, Peter Zijlstra wrote:
> On Thu, Apr 28, 2016 at 07:51:04PM +0800, Chao Yu wrote:
>>> On Wed, Apr 27, 2016 at 09:41:48PM +0800, Chao Yu wrote:
>>>> From: Chao Yu <[email protected]>
>>>>
>>>> The following condition can happen in a preemptible kernel, it may cause
>>>> checkpointer hunging.
>>>>
>>>> CPU0:                                      CPU1:
>>>>  - write_checkpoint
>>>>   - do_checkpoint
>>>>    - wait_on_all_pages_writeback
>>>>                                     - f2fs_write_end_io
>>>>                                      - wake_up
>>>>                                    this is last writebacked page, but
>>>>                                    no sleeper in sbi->cp_wait wait
>>>>                                    queue, wake_up is not been called.
>>>>     - prepare_to_wait(TASK_UNINTERRUPTIBLE)
>>>>     Here, current task can been preempted,
>>>>     but there will be no waker since last
>>>>     write_end_io has bypassed wake_up. So
>>>>     current task will sleep forever.
> 
> But here, you should be verifying if you really should go sleep; as the
> code did; it tests for !get_pages(, F2FS_WRITEBACK), and if you've just
> completed that very last one, this will break out.

You mean after being preempted with TASK_UNINTERRUPTIBLE status, that task still
has chance to be scheduled to check '!get_pages(, F2FS_WRITEBACK)', is that 
right?

> 
>>>>     - io_schedule_timeout
>>>

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to