]> asedeno.scripts.mit.edu Git - linux.git/commit
f2fs: fix concurrent problem for updating free bitmap
authorLiFan <fanofcode.li@samsung.com>
Wed, 22 Nov 2017 08:07:23 +0000 (16:07 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 3 Jan 2018 03:27:27 +0000 (19:27 -0800)
commit5921aaa185908c07e1e30cbdaee417ddeb27cbf9
tree20e43145e86f971faa4dee6907ce051ab1d5d1b1
parent2ab56a59ca880eebb3b89704ca1952f388151d29
f2fs: fix concurrent problem for updating free bitmap

alloc_nid_failed and scan_nat_page can be called at the same time,
and we haven't protected add_free_nid and update_free_nid_bitmap
with the same nid_list_lock. That could lead to

Thread A Thread B
- __build_free_nids
 - scan_nat_page
  - add_free_nid
- alloc_nid_failed
 - update_free_nid_bitmap
  - update_free_nid_bitmap

scan_nat_page will clear the free bitmap since the nid is PREALLOC_NID,
but alloc_nid_failed needs to set the free bitmap. This results in
free nid with free bitmap cleared.
This patch update the bitmap under the same nid_list_lock in add_free_nid.
And use __GFP_NOFAIL to make sure to update status of free nid correctly.

Signed-off-by: Fan li <fanofcode.li@samsung.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/node.c