diff options
| author | LiFan <fanofcode.li@samsung.com> | 2017-11-22 16:07:23 +0800 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-02-07 17:53:26 -0800 |
| commit | 55e2f89181ceff5dcebd87c0138d64dba8c3644d (patch) | |
| tree | c2c79c65fcd7667994440e3bfcc256713a346348 /fs/f2fs/sysfs.c | |
| parent | e1398f6554b462729062d986b100e022b290e7a4 (diff) | |
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>
Diffstat (limited to 'fs/f2fs/sysfs.c')
0 files changed, 0 insertions, 0 deletions
