• Jan Kara's avatar
    udf: Fix lockdep warning from udf_symlink() · 4ea7772f
    Jan Kara authored
    Lockdep is complaining about UDF:
    =============================================
    [ INFO: possible recursive locking detected ]
    3.12.0+ #16 Not tainted
    ---------------------------------------------
    ln/7386 is trying to acquire lock:
     (&ei->i_data_sem){+.+...}, at: [<ffffffff8142f06d>] udf_get_block+0x8d/0x130
    
    but task is already holding lock:
     (&ei->i_data_sem){+.+...}, at: [<ffffffff81431a8d>] udf_symlink+0x8d/0x690
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&ei->i_data_sem);
      lock(&ei->i_data_sem);
    
     *** DEADLOCK ***
    
    This is because we hold i_data_sem of the symlink inode while calling
    udf_add_entry() for the directory. I don't think this can ever lead to
    deadlocks since we never hold i_data_sem for two inodes in any other
    place.
    
    The fix is simple - move unlock of i_data_sem for symlink inode up. We
    don't need it for anything when linking symlink inode to directory.
    Reported-by: default avatarChristoph Hellwig <hch@infradead.org>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    4ea7772f
namei.c 33.9 KB