• Eric Ren's avatar
    ocfs2: fix deadlock caused by recursive locking in xattr · 092702fa
    Eric Ren authored
    commit 8818efaa upstream.
    
    Another deadlock path caused by recursive locking is reported.  This
    kind of issue was introduced since commit 743b5f14 ("ocfs2: take
    inode lock in ocfs2_iop_set/get_acl()").  Two deadlock paths have been
    fixed by commit b891fa50 ("ocfs2: fix deadlock issue when taking
    inode lock at vfs entry points").  Yes, we intend to fix this kind of
    case in incremental way, because it's hard to find out all possible
    paths at once.
    
    This one can be reproduced like this.  On node1, cp a large file from
    home directory to ocfs2 mountpoint.  While on node2, run
    setfacl/getfacl.  Both nodes will hang up there.  The backtraces:
    
    On node1:
      __ocfs2_cluster_lock.isra.39+0x357/0x740 [ocfs2]
      ocfs2_inode_lock_full_nested+0x17d/0x840 [ocfs2]
      ocfs2_write_begin+0x43/0x1a0 [ocfs2]
      generic_perform_write+0xa9/0x180
      __generic_file_write_iter+0x1aa/0x1d0
      ocfs2_file_write_iter+0x4f4/0xb40 [ocfs2]
      __vfs_write+0xc3/0x130
      vfs_write+0xb1/0x1a0
      SyS_write+0x46/0xa0
    
    On node2:
      __ocfs2_cluster_lock.isra.39+0x357/0x740 [ocfs2]
      ocfs2_inode_lock_full_nested+0x17d/0x840 [ocfs2]
      ocfs2_xattr_set+0x12e/0xe80 [ocfs2]
      ocfs2_set_acl+0x22d/0x260 [ocfs2]
      ocfs2_iop_set_acl+0x65/0xb0 [ocfs2]
      set_posix_acl+0x75/0xb0
      posix_acl_xattr_set+0x49/0xa0
      __vfs_setxattr+0x69/0x80
      __vfs_setxattr_noperm+0x72/0x1a0
      vfs_setxattr+0xa7/0xb0
      setxattr+0x12d/0x190
      path_setxattr+0x9f/0xb0
      SyS_setxattr+0x14/0x20
    
    Fix this one by using ocfs2_inode_{lock|unlock}_tracker, which is
    exported by commit 439a36b8 ("ocfs2/dlmglue: prepare tracking logic
    to avoid recursive cluster lock").
    
    Link: http://lkml.kernel.org/r/20170622014746.5815-1-zren@suse.com
    Fixes: 743b5f14 ("ocfs2: take inode lock in ocfs2_iop_set/get_acl()")
    Signed-off-by: default avatarEric Ren <zren@suse.com>
    Reported-by: default avatarThomas Voegtle <tv@lio96.de>
    Tested-by: default avatarThomas Voegtle <tv@lio96.de>
    Reviewed-by: default avatarJoseph Qi <jiangqi903@gmail.com>
    Cc: Mark Fasheh <mfasheh@versity.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    092702fa
xattr.c 193 KB