From: Yunlei He <heyunlei@huawei.com> Date: Thu, 21 Jun 2018 06:49:06 +0000 (+0800) Subject: f2fs: fix a hungtask problem caused by congestion_wait X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=2a63531a612f776ea754fee6272fc8f16a06b9d6;p=linux.git f2fs: fix a hungtask problem caused by congestion_wait This patch fix hungtask problem which can be reproduced as follow: Thread 0~3: while true do touch /xxx/test/file_xxx done Thread 4 write a new checkpoint every three seconds. In the meantime, fio start 16 threads for randwrite. With my debug info, cycles num will exceed 1000 in function f2fs_sync_dirty_inodes, and most of cycle will be dropped into congestion_wait() and sleep more than 20ms. Cycles num reduced to 3 with this patch. Signed-off-by: Yunlei He <heyunlei@huawei.com> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c index 502d7afd71a2d..e5cf2ff5b39dd 100644 --- a/fs/f2fs/checkpoint.c +++ b/fs/f2fs/checkpoint.c @@ -972,12 +972,10 @@ retry: iput(inode); /* We need to give cpu to another writers. */ - if (ino == cur_ino) { - congestion_wait(BLK_RW_ASYNC, HZ/50); + if (ino == cur_ino) cond_resched(); - } else { + else ino = cur_ino; - } } else { /* * We should submit bio, since it exists several