linux/fs/f2fs
Jaegeuk Kim 60979115a6 f2fs: fix double lock for inode page during roll-foward recovery
If the inode is same and its data index are needed to truncate, we can fall into
double lock for its inode page via get_dnode_of_data.

Error case is like this.

1. write data 1, 2, 3, 4, 5 in inode #4.
2. write data 100, 102, 103, 104, 105 in dnode #6 of inode #4.
3. sync
4. update data 100->106 in dnode #6.
5. fsync inode #4.
6. power-cut

-> Then,
1. go back to #3's checkpoint
2. in do_recover_data, get_dnode_of_data() gets inode #4.
3. detect 100->106 in dnode #6.
4. check_index_in_prev_nodes tries to truncate 100 in dnode #6.
5. to trigger truncate_hole, get_dnode_of_data should grab inode #4.
6. detect *kernel hang*

This patch should resolve that bug.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2014-09-16 04:10:47 -07:00
..
acl.c f2fs: remove the redundant validation check of acl 2014-07-09 14:04:25 -07:00
acl.h f2fs: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
checkpoint.c f2fs: use nm_i->next_scan_nid as default for next_free_nid 2014-09-16 04:10:45 -07:00
data.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
debug.c f2fs: fix typo 2014-08-19 10:01:33 -07:00
dir.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
f2fs.h f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
file.c f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
gc.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
gc.h f2fs: fix typo 2014-08-19 10:01:33 -07:00
hash.c f2fs: fix wrong casting for dentry name 2014-08-29 00:26:50 -07:00
inline.c f2fs: need fsck.f2fs when f2fs_bug_on is triggered 2014-09-09 13:15:02 -07:00
inode.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
Kconfig f2fs: fix typo 2014-08-19 10:01:33 -07:00
Makefile f2fs: key functions to handle inline data 2013-12-26 20:40:09 +09:00
namei.c f2fs: introduce F2FS_I_SB, F2FS_M_SB, and F2FS_P_SB 2014-09-03 17:37:13 -07:00
node.c f2fs: refactor flush_sit_entries codes for reducing SIT writes 2014-09-09 13:15:05 -07:00
node.h f2fs: fix a race condition in next_free_nid 2014-09-16 04:10:46 -07:00
recovery.c f2fs: fix double lock for inode page during roll-foward recovery 2014-09-16 04:10:47 -07:00
segment.c f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
segment.h f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
super.c f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
xattr.c f2fs: need fsck.f2fs when f2fs_bug_on is triggered 2014-09-09 13:15:02 -07:00
xattr.h f2fs: pass flags field to setxattr functions 2014-05-07 10:21:56 +09:00