linux_dsm_epyc7002/fs/f2fs
Chao Yu ca7f76e680 f2fs: fix wrong discard space
Under heavy fsstress, we may triggle panic while issuing discard,
because __check_sit_bitmap() detects that discard command may earse
valid data blocks, the root cause is as below race stack described,
since we removed lock when flushing quota data, quota data writeback
may race with write_checkpoint(), so that it causes inconsistency in
between cached discard entry and segment bitmap.

- f2fs_write_checkpoint
 - block_operations
  - set_sbi_flag(sbi, SBI_QUOTA_SKIP_FLUSH)
 - f2fs_flush_sit_entries
  - add_discard_addrs
   - __set_bit_le(i, (void *)de->discard_map);
						- f2fs_write_data_pages
						 - f2fs_write_single_data_page
						   : inode is quota one, cp_rwsem won't be locked
						  - f2fs_do_write_data_page
						   - f2fs_allocate_data_block
						    - f2fs_wait_discard_bio
						      : discard entry has not been added yet.
						    - update_sit_entry
 - f2fs_clear_prefree_segments
  - f2fs_issue_discard
  : add discard entry

In order to fix this, this patch uses node_write to serialize
f2fs_allocate_data_block and checkpoint.

Fixes: 435cbab95e ("f2fs: fix quota_sync failure due to f2fs_lock_op")
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2020-05-30 08:17:52 -07:00
..
acl.c f2fs: Replace spaces with tab 2019-05-08 21:23:11 -07:00
acl.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
checkpoint.c f2fs: flush dirty meta pages when flushing them 2020-05-18 10:47:24 -07:00
compress.c f2fs: compress: don't compress any datas after cp stop 2020-05-28 12:00:43 -07:00
data.c f2fs: add compressed/gc data read IO stat 2020-05-11 20:37:13 -07:00
debug.c f2fs: show mounted time 2020-03-19 11:41:25 -07:00
dir.c f2fs: rework filename handling 2020-05-11 20:36:46 -07:00
extent_cache.c f2fs: introduce f2fs_<level> macros to wrap f2fs_printk() 2019-07-02 15:40:40 -07:00
f2fs.h f2fs: fix checkpoint=disable:%u%% 2020-05-18 10:47:24 -07:00
file.c f2fs: protect new segment allocation in expand_inode_data 2020-05-28 12:00:43 -07:00
gc.c f2fs: add compressed/gc data read IO stat 2020-05-11 20:37:13 -07:00
gc.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
hash.c f2fs: rework filename handling 2020-05-11 20:36:46 -07:00
inline.c f2fs: rework filename handling 2020-05-11 20:36:46 -07:00
inode.c f2fs: fix potential .flags overflow on 32bit architecture 2020-03-30 20:46:25 -07:00
Kconfig f2fs: compress: support lzo-rle compress algorithm 2020-05-11 20:36:46 -07:00
Makefile f2fs: support data compression 2020-01-17 16:48:07 -08:00
namei.c f2fs: fix wrong value of tracepoint parameter 2020-05-28 12:00:43 -07:00
node.c f2fs: avoid inifinite loop to wait for flushing node pages at cp_error 2020-05-24 20:54:34 -07:00
node.h f2fs: shrink spinlock coverage 2020-05-11 20:36:46 -07:00
recovery.c f2fs: rework filename handling 2020-05-11 20:36:46 -07:00
segment.c f2fs: fix wrong discard space 2020-05-30 08:17:52 -07:00
segment.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
shrinker.c f2fs: fix inconsistent comments 2020-03-10 09:18:33 -07:00
super.c f2fs: fix checkpoint=disable:%u%% 2020-05-18 10:47:24 -07:00
sysfs.c f2fs: add compressed/gc data read IO stat 2020-05-11 20:37:13 -07:00
trace.c f2fs: do not use mutex lock in atomic context 2019-03-05 19:58:06 -08:00
trace.h f2fs: Use the correct style for SPDX License Identifier 2020-05-08 06:55:55 -07:00
verity.c fs-verity: implement readahead of Merkle tree pages 2020-01-14 13:27:32 -08:00
xattr.c f2fs: use kmem_cache pool during inline xattr lookups 2020-03-22 21:16:27 -07:00
xattr.h f2fs: code cleanup by removing ifdef macro surrounding 2020-05-26 18:56:10 -07:00