linux/fs/f2fs
Jaegeuk Kim 531ad7d58c f2fs: avoid deadlock during evict after f2fs_gc
o Deadlock case #1

Thread 1:
- writeback_sb_inodes
 - do_writepages
  - f2fs_write_data_pages
   - write_cache_pages
    - f2fs_write_data_page
     - f2fs_balance_fs
      - wait mutex_lock(gc_mutex)

Thread 2:
- f2fs_balance_fs
 - mutex_lock(gc_mutex)
 - f2fs_gc
  - f2fs_iget
   - wait iget_locked(inode->i_lock)

Thread 3:
- do_unlinkat
 - iput
  - lock(inode->i_lock)
   - evict
    - inode_wait_for_writeback

o Deadlock case #2

Thread 1:
- __writeback_single_inode
 : set I_SYNC
  - do_writepages
   - f2fs_write_data_page
    - f2fs_balance_fs
     - f2fs_gc
      - iput
       - evict
        - inode_wait_for_writeback(I_SYNC)

In order to avoid this, even though iput is called with the zero-reference
count, we need to stop the eviction procedure if the inode is on writeback.
So this patch links f2fs_drop_inode which checks the I_SYNC flag.

Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
2013-05-08 19:54:08 +09:00
..
acl.c f2fs: avoid null dereference in f2fs_acl_from_disk 2013-01-04 09:46:27 +09:00
acl.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
checkpoint.c f2fs: check truncation of mapping after lock_page 2013-04-29 11:19:32 +09:00
data.c f2fs: avoid deadlock during evict after f2fs_gc 2013-05-08 19:54:08 +09:00
debug.c f2fs: remove useless #include <linux/proc_fs.h> as we're now using sysfs as debug entry. 2013-04-30 12:07:32 +09:00
dir.c f2fs: give a chance to merge IOs by IO scheduler 2013-04-26 10:35:10 +09:00
f2fs.h f2fs: enhance alloc_nid and build_free_nids flows 2013-04-29 11:19:21 +09:00
file.c f2fs: check truncation of mapping after lock_page 2013-04-29 11:19:32 +09:00
gc.c f2fs: remove useless #include <linux/proc_fs.h> as we're now using sysfs as debug entry. 2013-04-30 12:07:32 +09:00
gc.h f2fs: avoid frequent background GC 2013-04-26 10:35:03 +09:00
hash.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
inode.c f2fs: add tracepoints for sync & inode operations 2013-04-23 15:30:27 +09:00
Kconfig f2fs: resolve build failures 2012-12-11 13:43:43 +09:00
Makefile f2fs: update Kconfig and Makefile 2012-12-11 13:43:42 +09:00
namei.c f2fs: avoid deadlock during evict after f2fs_gc 2013-05-08 19:54:08 +09:00
node.c f2fs: modify the number of issued pages to merge IOs 2013-04-30 12:07:32 +09:00
node.h f2fs: fix the logic of IS_DNODE() 2013-04-09 18:21:24 +09:00
recovery.c f2fs: introduce a new global lock scheme 2013-04-09 18:21:18 +09:00
segment.c f2fs: modify the number of issued pages to merge IOs 2013-04-30 12:07:32 +09:00
segment.h f2fs: modify the number of issued pages to merge IOs 2013-04-30 12:07:32 +09:00
super.c f2fs: avoid deadlock during evict after f2fs_gc 2013-05-08 19:54:08 +09:00
xattr.c f2fs: introduce a new global lock scheme 2013-04-09 18:21:18 +09:00
xattr.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00