linux_dsm_epyc7002/fs/f2fs
Russ Knize 52ab956000 f2fs: don't GC or take an fs_lock from f2fs_initxattrs()
f2fs_initxattrs() is called internally from within F2FS and should
not call functions that are used by VFS handlers.  This avoids
certain deadlocks:

- vfs_create()
 - f2fs_create() <-- takes an fs_lock
  - f2fs_add_link()
   - __f2fs_add_link()
    - init_inode_metadata()
     - f2fs_init_security()
      - security_inode_init_security()
       - f2fs_initxattrs()
        - f2fs_setxattr() <-- also takes an fs_lock

If the caller happens to grab the same fs_lock from the pool in both
places, they will deadlock.  There are also deadlocks involving
multiple threads and mutexes:

- f2fs_write_begin()
 - f2fs_balance_fs() <-- takes gc_mutex
  - f2fs_gc()
   - write_checkpoint()
    - block_operations()
     - mutex_lock_all() <-- blocks trying to grab all fs_locks

- f2fs_mkdir() <-- takes an fs_lock
 - __f2fs_add_link()
  - f2fs_init_security()
   - security_inode_init_security()
    - f2fs_initxattrs()
     - f2fs_setxattr()
      - f2fs_balance_fs() <-- blocks trying to take gc_mutex

Signed-off-by: Russ Knize <Russ.Knize@motorola.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
2013-09-25 17:51:24 +09:00
..
acl.c f2fs: support xattr security labels 2013-06-11 16:01:03 +09:00
acl.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
checkpoint.c f2fs: don't let the orphan inode counter underflow 2013-09-25 17:49:12 +09:00
data.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
debug.c f2fs: use seq_puts()/seq_putc() rather than seq_printf() where possible 2013-07-30 15:17:03 +09:00
dir.c f2fs: fix handling orphan inodes 2013-07-30 15:17:03 +09:00
f2fs.h f2fs: optimize fs_lock for better performance 2013-09-24 17:45:48 +09:00
file.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
gc.c f2fs: optimize the victim searching loop slightly 2013-09-24 17:45:48 +09:00
gc.h f2fs: optimize gc for better performance 2013-09-05 13:50:32 +09:00
hash.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
inode.c f2fs: add flags for inline xattrs 2013-08-26 20:02:12 +09:00
Kconfig f2fs: support xattr security labels 2013-06-11 16:01:03 +09:00
Makefile f2fs: update Kconfig and Makefile 2012-12-11 13:43:42 +09:00
namei.c f2fs: use strncasecmp() simplify the string comparison 2013-08-27 21:50:12 +09:00
node.c f2fs: merge more bios of node block writes 2013-09-05 10:17:19 +09:00
node.h f2fs: fix the use of XATTR_NODE_OFFSET 2013-08-09 14:57:56 +09:00
recovery.c f2fs: remove unneeded write checkpoint in recover_fsync_data 2013-09-25 17:18:16 +09:00
segment.c f2fs: avoid allocating failure in bio_alloc 2013-09-24 17:45:48 +09:00
segment.h f2fs: avoid allocating failure in bio_alloc 2013-09-24 17:45:48 +09:00
super.c f2fs: reserve the xattr space dynamically 2013-08-26 20:15:01 +09:00
xattr.c f2fs: don't GC or take an fs_lock from f2fs_initxattrs() 2013-09-25 17:51:24 +09:00
xattr.h f2fs: support the inline xattrs 2013-08-26 20:15:23 +09:00