]> www.infradead.org Git - users/jedix/linux-maple.git/commit
xfs: dont serialise direct IO reads on page cache
authorDave Chinner <dchinner@redhat.com>
Sat, 19 Nov 2011 18:13:40 +0000 (13:13 -0500)
committerMaxim Uvarov <maxim.uvarov@oracle.com>
Thu, 8 Dec 2011 19:19:20 +0000 (11:19 -0800)
commit1b06009de72c6ec6f53ebdc9ab09719274a13175
tree44bd6955fff06d19b4642055cb2a33cc7c71c003
parent0b55a8f65b085185704a60b3ebd9bc86482efdf4
xfs: dont serialise direct IO reads on page cache

commit 0c38a2512df272b14ef4238b476a2e4f70da1479 upstream.

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: Dave Chinner <dchinner@redhat.com>
Tested-by: Joern Engel <joern@logfs.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/xfs/linux-2.6/xfs_file.c