diff options
author | Christoph Hellwig <hch@infradead.org> | 2012-03-13 08:41:05 +0000 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2012-03-13 16:30:49 -0500 |
commit | 281627df3eb55e1b729b9bb06fff5ff112929646 (patch) | |
tree | ffb2d00056f661073f62fa42693970a4485b87b9 /fs/xfs/xfs_aops.h | |
parent | 84803fb78237014cbbc86c0f012b273a199f4691 (diff) | |
download | lwn-281627df3eb55e1b729b9bb06fff5ff112929646.tar.gz lwn-281627df3eb55e1b729b9bb06fff5ff112929646.zip |
xfs: log file size updates at I/O completion time
Do not use unlogged metadata updates and the VFS dirty bit for updating
the file size after writeback. In addition to causing various problems
with updates getting delayed for far too long this also drags in the
unscalable VFS dirty tracking, and is one of the few remaining unlogged
metadata updates.
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_aops.h')
-rw-r--r-- | fs/xfs/xfs_aops.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/xfs/xfs_aops.h b/fs/xfs/xfs_aops.h index 06e4caf38203..84eafbcb0d9d 100644 --- a/fs/xfs/xfs_aops.h +++ b/fs/xfs/xfs_aops.h @@ -46,12 +46,14 @@ typedef struct xfs_ioend { int io_error; /* I/O error code */ atomic_t io_remaining; /* hold count */ unsigned int io_isasync : 1; /* needs aio_complete */ + unsigned int io_isdirect : 1;/* direct I/O */ struct inode *io_inode; /* file being written to */ struct buffer_head *io_buffer_head;/* buffer linked list head */ struct buffer_head *io_buffer_tail;/* buffer linked list tail */ size_t io_size; /* size of the extent */ xfs_off_t io_offset; /* offset in the file */ struct work_struct io_work; /* xfsdatad work queue */ + struct xfs_trans *io_append_trans;/* xact. for size update */ struct kiocb *io_iocb; int io_result; } xfs_ioend_t; |