• Lachlan McIlroy's avatar
    [XFS] Fix race in xfs_write() between direct and buffered I/O with DMAPI · 25051158
    Lachlan McIlroy authored
    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: default avatarChristoph Hellwig <hch@infradead.org>
    Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
    25051158
xfs_lrw.c 22.6 KB