[PATCH] jffs2: GC deadlock reading a page that is used in jffs2_write_begin()
Richard Weinberger
richard.weinberger at gmail.com
Tue Jul 18 00:17:26 PDT 2017
Kyeong Yoo,
On Mon, Jul 17, 2017 at 11:54 PM, Kyeong Yoo
<Kyeong.Yoo at alliedtelesis.co.nz> wrote:
> Hi,
>
> Can someone review this and give me any feedback?
>
> This patch is to prevent deadlock in jffs2 GC.
>
> Thanks,
> Kyeong
>
>
> On 04/07/17 16:22, Kyeong Yoo wrote:
>> GC task can deadlock in read_cache_page() because it may attempt
>> to release a page that is actually allocated by another task in
>> jffs2_write_begin().
>> The reason is that in jffs2_write_begin() there is a small window
>> a cache page is allocated for use but not set Uptodate yet.
>>
>> This ends up with a deadlock between two tasks:
>> 1) A task (e.g. file copy)
>> - jffs2_write_begin() locks a cache page
>> - jffs2_write_end() tries to lock "alloc_sem" from
>> jffs2_reserve_space() <-- STUCK
>> 2) GC task (jffs2_gcd_mtd3)
>> - jffs2_garbage_collect_pass() locks "alloc_sem"
>> - try to lock the same cache page in read_cache_page() <-- STUCK
Your description does not match the code. Are you seeing this on a
recent mainline kernel?
Can t be that your kernel does not has this commit?
commit 157078f64b8a9cd7011b6b900b2f2498df850748
Author: Thomas Betker <thomas.betker at rohde-schwarz.com>
Date: Tue Nov 10 22:18:15 2015 +0100
Revert "jffs2: Fix lock acquisition order bug in jffs2_write_begin"
This reverts commit 5ffd3412ae55
("jffs2: Fix lock acquisition order bug in jffs2_write_begin").
--
Thanks,
//richard
More information about the linux-mtd
mailing list