On Dec 10, 2007 11:29 AM, Lachlan McIlroy <lachlan@xxxxxxx> wrote:
> 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.
How the following is addressed if we don't wait for I/O to complete during
close of the file and
- We didn't waited for the I/O to complete
- Truncated blocks beyond EOF.
- These blocks are re-used for another transaction as meta-data.
- Meta-data flush was induced. However the flush of meta-data
reached first before the data I/O
because of some issues with under-lying driver. Later the file I/O
over-written the meta-data I/O.
We have corruption of data.
It seems the corruption could be in various ways. Isn't this the reason why
truncate has to wait
for the I/O to complete? I believe fundamental problem is once the blocks
are free'ed, the re-association should
not expect some I/O in concurrent to those same block addresses.
> Date: Mon Dec 10 16:59:09 AEDT 2007
> Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-vniowait
> Inspected by: pleckie
> Author: lachlan
> The following file(s) were checked into:
> Modid: xfs-linux-melb:xfs-kern:30220a
> fs/xfs/xfs_inode.c - 1.489 - changed
> - Don't wait for pending I/Os when purging blocks beyond eof.
[[HTML alternate version deleted]]