2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-18 02:04:05 +08:00
linux-next/fs/f2fs
Chao Yu 04d47e6738 f2fs: fix to account total free nid correctly
Thread A		Thread B		Thread C
- f2fs_create
 - f2fs_new_inode
  - f2fs_lock_op
   - alloc_nid
    alloc last nid
  - f2fs_unlock_op
			- f2fs_create
			 - f2fs_new_inode
			  - f2fs_lock_op
			   - alloc_nid
			    as node count still not
			    be increased, we will
			    loop in alloc_nid
						- f2fs_write_node_pages
						 - f2fs_balance_fs_bg
						  - f2fs_sync_fs
						   - write_checkpoint
						    - block_operations
						     - f2fs_lock_all
 - f2fs_lock_op

While creating new inode, we do not allocate and account nid atomically,
so that when there is almost no free nids left, we may encounter deadloop
like above stack.

In order to avoid that, reuse nm_i::available_nids for accounting free nids
and make nid allocation and counting being atomical during node creation.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2016-11-25 10:16:01 -08:00
..
acl.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
acl.h f2fs: remove dead code f2fs_check_acl 2016-09-14 16:52:36 -07:00
checkpoint.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
data.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
debug.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
dir.c f2fs: report error of f2fs_fill_dentries 2016-11-23 12:11:12 -08:00
extent_cache.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
f2fs.h f2fs: fix to account total free nid correctly 2016-11-25 10:16:01 -08:00
file.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
gc.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
gc.h f2fs: detect idle time depending on user behavior 2016-01-11 15:56:37 -08:00
hash.c f2fs: introduce dot and dotdot name check 2015-05-28 15:41:34 -07:00
inline.c f2fs: report error of f2fs_fill_dentries 2016-11-23 12:11:12 -08:00
inode.c f2fs: record inode updating status correctly 2016-11-23 12:11:25 -08:00
Kconfig f2fs: add mount option to select fault injection ratio 2016-05-07 10:32:22 -07:00
Makefile fs crypto: move per-file encryption from f2fs tree to fs/crypto 2016-03-17 21:19:33 -07:00
namei.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
node.c f2fs: fix to account total free nid correctly 2016-11-25 10:16:01 -08:00
node.h f2fs: split free nid list 2016-11-23 12:11:00 -08:00
recovery.c Revert "f2fs: do not recover from previous remained wrong dnodes" 2016-11-23 12:11:30 -08:00
segment.c f2fs: don't wait writeback for datas during checkpoint 2016-11-25 10:15:59 -08:00
segment.h f2fs: use BIO_MAX_PAGES for bio allocation 2016-11-23 12:11:07 -08:00
shrinker.c f2fs: avoid casted negative value as shrink count 2016-11-23 12:11:03 -08:00
super.c f2fs: support multiple devices 2016-11-25 10:15:13 -08:00
trace.c f2fs: use bio op accessors 2016-06-07 13:41:38 -06:00
trace.h f2fs: add sbi and page pointer in f2fs_io_info 2015-05-28 15:41:32 -07:00
xattr.c f2fs: keep dirty inodes selectively for checkpoint 2016-11-23 12:11:08 -08:00
xattr.h f2fs: add missing argument to f2fs_setxattr stub 2016-03-17 21:19:47 -07:00