GFS2: Fix incorrect invalidation for DIO/buffered I/O
authorSteven Whitehouse <swhiteho@redhat.com>
Wed, 18 Dec 2013 14:14:52 +0000 (14:14 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Jan 2014 17:42:12 +0000 (09:42 -0800)
commitd23a87af40a35e7bedb349d071c4a1c5dcf050e2
treebb272e54ac0bb2f87bc921ee0d03deb44659b7d9
parentaf7cf2107d3a05709799e441a55c2a646e7b5a45
GFS2: Fix incorrect invalidation for DIO/buffered I/O

commit dfd11184d894cd0a92397b25cac18831a1a6a5bc upstream.

In patch 209806aba9d540dde3db0a5ce72307f85f33468f we allowed
local deferred locks to be granted against a cached exclusive
lock. That opened up a corner case which this patch now
fixes.

The solution to the problem is to check whether we have cached
pages each time we do direct I/O and if so to unmap, flush
and invalidate those pages. Since the glock state machine
normally does that for us, mostly the code will be a no-op.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/gfs2/aops.c