• Dave Chinner's avatar
    xfs: fix recursive splice read locking with DAX · a6d7636e
    Dave Chinner authored
    Doing a splice read (generic/249) generates a lockdep splat because
    we recursively lock the inode iolock in this path:
    
    SyS_sendfile64
    do_sendfile
    do_splice_direct
    splice_direct_to_actor
    do_splice_to
    xfs_file_splice_read			<<<<<< lock here
    default_file_splice_read
    vfs_readv
    do_readv_writev
    do_iter_readv_writev
    xfs_file_read_iter			<<<<<< then here
    
    The issue here is that for DAX inodes we need to avoid the page
    cache path and hence simply push it into the normal read path.
    Unfortunately, we can't tell down at xfs_file_read_iter() whether we
    are being called from the splice path and hence we cannot avoid the
    locking at this layer. Hence we simply have to drop the inode
    locking at the higher splice layer for DAX.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Tested-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    a6d7636e
xfs_file.c 44.4 KB