Skip to content

Commit

Permalink
[XFS] Explain the race closed by the addition of vn_iowait() to the s…
Browse files Browse the repository at this point in the history
…tart

of xfs_itruncate_start().

SGI-PV: 947420
SGI-Modid: xfs-linux-melb:xfs-kern:25527a

Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>
  • Loading branch information
David Chinner authored and Nathan Scott committed Mar 22, 2006
1 parent 9fa8046 commit 38e2299
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions fs/xfs/xfs_inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1393,6 +1393,16 @@ xfs_itrunc_trace(
* calling into the buffer/page cache code and we can't hold the
* inode lock when we do so.
*
* We need to wait for any direct I/Os in flight to complete before we
* proceed with the truncate. This is needed to prevent the extents
* being read or written by the direct I/Os from being removed while the
* I/O is in flight as there is no other method of synchronising
* direct I/O with the truncate operation. Also, because we hold
* the IOLOCK in exclusive mode, we prevent new direct I/Os from being
* started until the truncate completes and drops the lock. Essentially,
* the vn_iowait() call forms an I/O barrier that provides strict ordering
* between direct I/Os and the truncate operation.
*
* The flags parameter can have either the value XFS_ITRUNC_DEFINITE
* or XFS_ITRUNC_MAYBE. The XFS_ITRUNC_MAYBE value should be used
* in the case that the caller is locking things out of order and
Expand Down

0 comments on commit 38e2299

Please sign in to comment.