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>
This commit is contained in:
@@ -972,12 +972,10 @@ retry:
|
|||||||
|
|
||||||
iput(inode);
|
iput(inode);
|
||||||
/* We need to give cpu to another writers. */
|
/* We need to give cpu to another writers. */
|
||||||
if (ino == cur_ino) {
|
if (ino == cur_ino)
|
||||||
congestion_wait(BLK_RW_ASYNC, HZ/50);
|
|
||||||
cond_resched();
|
cond_resched();
|
||||||
} else {
|
else
|
||||||
ino = cur_ino;
|
ino = cur_ino;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* We should submit bio, since it exists several
|
* We should submit bio, since it exists several
|
||||||
|
Reference in New Issue
Block a user