Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c734c79b authored by Lachlan McIlroy's avatar Lachlan McIlroy Committed by Lachlan McIlroy
Browse files

[XFS] Don't wait for pending I/Os when purging blocks beyond eof.



On last close of a file we purge blocks beyond eof. The same code is used
when we truncate the file size down. In this case we need to wait for any
pending I/Os for dirty pages beyond the new eof. For the last close case
we are not changing the file size and therefore do not need to wait for
any I/Os to complete. This fixes a performance bottleneck where writes
into the page cache and cache flushes can become mutually exclusive.

SGI-PV: 964002
SGI-Modid: xfs-linux-melb:xfs-kern:30220a

Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
Signed-off-by: default avatarPeter Leckie <pleckie@sgi.com>
parent c63a1190
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1459,7 +1459,9 @@ xfs_itruncate_start(
	mp = ip->i_mount;
	vp = XFS_ITOV(ip);

	vn_iowait(ip);  /* wait for the completion of any pending DIOs */
	/* wait for the completion of any pending DIOs */
	if (new_size < ip->i_size)
		vn_iowait(ip);

	/*
	 * Call toss_pages or flushinval_pages to get rid of pages