f2fs: avoid race in between atomic_read & atomic_inc
authorChao Yu <yuchao0@huawei.com>
Thu, 31 Aug 2017 10:56:05 +0000 (18:56 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 5 Sep 2017 17:50:22 +0000 (10:50 -0700)
commitedd748e6c8e824a8281f8a8450f12c4a95ec61ee
tree69d2f53faab82737599b1c93534721c716f214ff
parent025d63a486aad611b20fa39184fc86e4b76d260e
f2fs: avoid race in between atomic_read & atomic_inc

Previously, we will miss merging flush command during fsync due to below
race condition:

Thread A  Thread B Thread C
- f2fs_issue_flush
 - atomic_read(&issing_flush)
- f2fs_issue_flush
 - atomic_read(&issing_flush)
- f2fs_issue_flush
 - atomic_read(&issing_flush)
  - atomic_inc(&issing_flush)
  - atomic_inc(&issing_flush)
  - atomic_inc(&issing_flush)
   - submit_flush_wait
   - submit_flush_wait
   - submit_flush_wait

It needs to use atomic_inc_return instead to avoid such race.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c