Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1395abb authored by Yunlei He's avatar Yunlei He Committed by Jaegeuk Kim
Browse files

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: default avatarYunlei He <heyunlei@huawei.com>
Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 7eacb5df
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -972,12 +972,10 @@ int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type)

		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