xfs: avoid direct I/O write vs buffered I/O race
authorChristoph Hellwig <hch@infradead.org>
Thu, 1 Dec 2011 23:27:40 +0000 (17:27 -0600)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Dec 2011 16:54:29 +0000 (08:54 -0800)
commit6a426248da83e544995fc8a494630285260ec4ee
tree592bbae08e1db5db4192c89fe41c5af6d3c41534
parent686da49e5aa50117d8d824c579c3fd9e0318fbc6
xfs: avoid direct I/O write vs buffered I/O race

commit c58cb165bd44de8aaee9755a144136ae743be116 upstream.

Currently a buffered reader or writer can add pages to the pagecache
while we are waiting for the iolock in xfs_file_dio_aio_write.  Prevent
this by re-checking mapping->nrpages after we got the iolock, and if
nessecary upgrade the lock to exclusive mode.  To simplify this a bit
only take the ilock inside of xfs_file_aio_write_checks.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
Cc: Ben Myers <bpm@sgi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/xfs/xfs_file.c