• Dave Chinner's avatar
    xfs: don't serialise direct IO reads on page cache checks · 0c38a251
    Dave Chinner authored
    There is no need to grab the i_mutex of the IO lock in exclusive
    mode if we don't need to invalidate the page cache. Taking these
    locks on every direct IO effective serialises them as taking the IO
    lock in exclusive mode has to wait for all shared holders to drop
    the lock. That only happens when IO is complete, so effective it
    prevents dispatch of concurrent direct IO reads to the same inode.
    
    Fix this by taking the IO lock shared to check the page cache state,
    and only then drop it and take the IO lock exclusively if there is
    work to be done. Hence for the normal direct IO case, no exclusive
    locking will occur.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Tested-by: default avatarJoern Engel <joern@logfs.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
    0c38a251
xfs_file.c 28.8 KB