15 Sep, 2016

1 commit


26 Jul, 2016

1 commit


04 Nov, 2014

1 commit

  • Previously, init_inode_metadata does not hold any parent directory's inode
    page. So, f2fs_init_acl can grab its parent inode page without any problem.
    But, when we use inline_dentry, that page is grabbed during f2fs_add_link,
    so that we can fall into deadlock condition like below.

    INFO: task mknod:11006 blocked for more than 120 seconds.
    Tainted: G OE 3.17.0-rc1+ #13
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    mknod D ffff88003fc94580 0 11006 11004 0x00000000
    ffff880007717b10 0000000000000002 ffff88003c323220 ffff880007717fd8
    0000000000014580 0000000000014580 ffff88003daecb30 ffff88003c323220
    ffff88003fc94e80 ffff88003ffbb4e8 ffff880007717ba0 0000000000000002
    Call Trace:
    [] ? bit_wait+0x50/0x50
    [] io_schedule+0x9d/0x130
    [] bit_wait_io+0x2c/0x50
    [] __wait_on_bit_lock+0x4b/0xb0
    [] __lock_page+0x67/0x70
    [] ? autoremove_wake_function+0x40/0x40
    [] pagecache_get_page+0x14c/0x1e0
    [] get_node_page+0x59/0x130 [f2fs]
    [] read_all_xattrs+0x24d/0x430 [f2fs]
    [] f2fs_getxattr+0x52/0xe0 [f2fs]
    [] f2fs_get_acl+0x41/0x2d0 [f2fs]
    [] get_acl+0x47/0x70
    [] posix_acl_create+0x5a/0x150
    [] f2fs_init_acl+0x29/0xcb [f2fs]
    [] init_inode_metadata+0x5d/0x340 [f2fs]
    [] f2fs_add_inline_entry+0x12a/0x2e0 [f2fs]
    [] __f2fs_add_link+0x45/0x4a0 [f2fs]
    [] ? f2fs_new_inode+0x146/0x220 [f2fs]
    [] f2fs_mknod+0x86/0xf0 [f2fs]
    [] vfs_mknod+0xe1/0x160
    [] SyS_mknod+0x1f6/0x200
    [] tracesys+0xe1/0xe6

    Signed-off-by: Jaegeuk Kim

    Jaegeuk Kim
     

26 Jan, 2014

1 commit


28 Oct, 2013

2 commits

  • The deadlock is found through the following scenario.

    sys_mkdir()
    -> f2fs_add_link()
    -> __f2fs_add_link()
    -> init_inode_metadata()
    : lock_page(inode);
    -> f2fs_init_acl()
    -> f2fs_set_acl()
    -> f2fs_setxattr(..., NULL)
    : This NULL page incurs a deadlock at update_inode_page().

    So, likewise f2fs_init_security(), this patch adds a parameter to transfer the
    locked inode page to f2fs_setxattr().

    Found by Linux File System Verification project (linuxtesting.org).

    Reported-by: Alexey Khoroshilov
    Signed-off-by: Jaegeuk Kim

    Jaegeuk Kim
     
  • This patch cleans up a couple of acl codes.

    Signed-off-by: Jaegeuk Kim

    Jaegeuk Kim
     

11 Dec, 2012

2 commits