]> git.karo-electronics.de Git - karo-tx-linux.git/commit
xfs: don't serialise direct IO reads on page cache checks
authorDave Chinner <dchinner@redhat.com>
Thu, 25 Aug 2011 07:17:01 +0000 (07:17 +0000)
committerAlex Elder <aelder@sgi.com>
Thu, 25 Aug 2011 15:30:20 +0000 (10:30 -0500)
commit37b652ec6445be99d0193047d1eda129a1a315d3
tree9a4aaffb0ab3c55c77d32a2b518e729e220528cc
parent242d621964dd8641df53f7d51d4c6ead655cc5a6
xfs: don't serialise direct IO reads on page cache checks

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>
fs/xfs/xfs_file.c