Lachlan McIlroy 25051158bb [XFS] Fix race in xfs_write() between direct and buffered I/O with DMAPI
The iolock is dropped and re-acquired around the call to XFS_SEND_NAMESP().
While the iolock is released the file can become cached.  We then
'goto retry' and - if we are doing direct I/O - mapping->nrpages may now be
non zero but need_i_mutex will be zero and we will hit the WARN_ON().

Since we have dropped the I/O lock then the file size may have also changed
so what we need to do here is 'goto start' like we do for the XFS_SEND_DATA()
DMAPI event.

We also need to update the filesize before releasing the iolock so that
needs to be done before the XFS_SEND_NAMESP event.  If we drop the iolock
before setting the filesize we could race with a truncate.

Reviewed-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
2008-12-24 14:07:32 +11:00
..
2008-10-27 08:40:17 -07:00
2008-08-20 15:40:32 -07:00
2008-10-13 09:47:43 +11:00
2008-11-13 13:22:34 -06:00
2008-11-06 15:41:22 -08:00
2008-04-29 08:06:00 -07:00
2008-11-01 09:49:46 -07:00
2008-10-23 05:12:58 -04:00
2008-10-17 02:38:36 +11:00
2008-12-01 19:55:25 -08:00
2008-12-16 18:26:16 -08:00
2008-11-18 15:08:56 +01:00
2008-12-10 08:01:54 -08:00
2008-11-27 17:38:28 +01:00
2008-07-26 20:53:40 -04:00
2008-07-26 12:00:08 -07:00
2008-10-16 11:21:38 -07:00
2008-10-09 08:57:05 +02:00
2008-12-04 04:22:57 -05:00
2008-11-27 17:38:28 +01:00
2008-10-23 05:12:59 -04:00
2008-05-01 13:08:16 -04:00
2008-12-09 19:36:38 -08:00
2008-10-30 11:38:45 -07:00
2008-11-19 18:49:59 -08:00
2008-11-12 17:17:17 -08:00
2008-02-14 21:13:33 -08:00
2008-11-01 09:49:46 -07:00
2008-07-25 10:53:35 -07:00
2008-10-30 11:38:45 -07:00