kernel_optimize_test/fs/xfs
Dave Chinner fbcc025613 xfs: Introduce writeback context for writepages
xfs_vm_writepages() calls generic_writepages to writeback a range of
a file, but then xfs_vm_writepage() clusters pages itself as it does
not have any context it can pass between->writepage calls from
__write_cache_pages().

Introduce a writeback context for xfs_vm_writepages() and call
__write_cache_pages directly with our own writepage callback so that
we can pass that context to each writepage invocation. This
encapsulates the current mapping, whether it is valid or not, the
current ioend and it's IO type and the ioend chain being built.

This requires us to move the ioend submission up to the level where
the writepage context is declared. This does mean we do not submit
IO until we packaged the entire writeback range, but with the block
plugging in the writepages call this is the way IO is submitted,
anyway.

It also means that we need to handle discontiguous page ranges.  If
the pages sent down by write_cache_pages to the writepage callback
are discontiguous, we need to detect this and put each discontiguous
page range into individual ioends. This is needed to ensure that the
ioend accurately represents the range of the file that it covers so
that file size updates during IO completion set the size correctly.
Failure to take into account the discontiguous ranges results in
files being too small when writeback patterns are non-sequential.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
2016-02-15 17:21:19 +11:00
..
libxfs Merge branch 'xfs-setxattr-promotion' into for-next 2016-01-19 08:16:08 +11:00
Kconfig
kmem.c xfs: more info from kmem deadlocks and high-level error msgs 2015-10-12 16:04:45 +11:00
kmem.h kmemcg: account certain kmem allocations to memcg 2016-01-14 16:00:49 -08:00
Makefile xfs: stats are no longer dependent on CONFIG_PROC_FS 2015-10-19 08:42:46 +11:00
mrlock.h
uuid.c
uuid.h
xfs_acl.c xfs: Change how listxattr generates synthetic attributes 2015-12-06 21:34:16 -05:00
xfs_acl.h xfs: Change how listxattr generates synthetic attributes 2015-12-06 21:34:16 -05:00
xfs_aops.c xfs: Introduce writeback context for writepages 2016-02-15 17:21:19 +11:00
xfs_aops.h xfs: Introduce writeback context for writepages 2016-02-15 17:21:19 +11:00
xfs_attr_inactive.c
xfs_attr_list.c xfs: per-filesystem stats counter implementation 2015-10-12 18:21:22 +11:00
xfs_attr.h
xfs_bmap_util.c xfs: eliminate committed arg from xfs_bmap_finish 2016-01-11 11:34:01 +11:00
xfs_bmap_util.h
xfs_buf_item.c
xfs_buf_item.h
xfs_buf.c xfs: Update 2 for 4.5-rc1 2016-01-22 10:54:13 -08:00
xfs_buf.h xfs: print name of verifier if it fails 2016-01-04 16:10:19 +11:00
xfs_dir2_readdir.c xfs: per-filesystem stats counter implementation 2015-10-12 18:21:22 +11:00
xfs_discard.c
xfs_discard.h
xfs_dquot_item.c
xfs_dquot_item.h
xfs_dquot.c xfs: eliminate committed arg from xfs_bmap_finish 2016-01-11 11:34:01 +11:00
xfs_dquot.h
xfs_error.c xfs: print name of verifier if it fails 2016-01-04 16:10:19 +11:00
xfs_error.h
xfs_export.c
xfs_export.h
xfs_extent_busy.c
xfs_extent_busy.h
xfs_extfree_item.c
xfs_extfree_item.h
xfs_file.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-01-23 12:24:56 -08:00
xfs_filestream.c
xfs_filestream.h
xfs_fsops.c
xfs_fsops.h
xfs_globals.c
xfs_icache.c xfs: per-filesystem stats counter implementation 2015-10-12 18:21:22 +11:00
xfs_icache.h
xfs_icreate_item.c
xfs_icreate_item.h
xfs_inode_item.c xfs: optimise away log forces on timestamp updates for fdatasync 2015-11-03 13:14:59 +11:00
xfs_inode_item.h xfs: optimise away log forces on timestamp updates for fdatasync 2015-11-03 13:14:59 +11:00
xfs_inode.c Merge branch 'xfs-setxattr-promotion' into for-next 2016-01-19 08:16:08 +11:00
xfs_inode.h
xfs_ioctl32.c xfs: prefix XATTR_LIST_MAX with XFS_ 2015-10-12 16:02:56 +11:00
xfs_ioctl32.h
xfs_ioctl.c xfs: introduce per-inode DAX enablement 2016-01-04 16:44:15 +11:00
xfs_ioctl.h
xfs_iomap.c Merge branch 'xfs-misc-fixes-for-4.5-2' into for-next 2016-01-12 07:04:30 +11:00
xfs_iomap.h
xfs_iops.c xfs: Update 2 for 4.5-rc1 2016-01-22 10:54:13 -08:00
xfs_iops.h
xfs_itable.c
xfs_itable.h
xfs_linux.h
xfs_log_cil.c
xfs_log_priv.h xfs: debug mode log record crc error injection 2016-01-05 07:41:16 +11:00
xfs_log_recover.c Merge branch 'xfs-misc-fixes-for-4.5-2' into for-next 2016-01-12 07:04:30 +11:00
xfs_log.c Merge branch 'xfs-misc-fixes-for-4.5' into for-next 2016-01-05 08:08:35 +11:00
xfs_log.h xfs: validate metadata LSNs against log on v5 superblocks 2015-10-12 15:59:25 +11:00
xfs_message.c xfs: more info from kmem deadlocks and high-level error msgs 2015-10-12 16:04:45 +11:00
xfs_message.h
xfs_mount.c Merge branch 'xfs-misc-fixes-for-4.4-2' into for-next 2015-11-03 13:27:58 +11:00
xfs_mount.h Merge branch 'xfs-dax-updates' into for-next 2015-11-03 13:28:41 +11:00
xfs_mru_cache.c
xfs_mru_cache.h
xfs_pnfs.c wrappers for ->i_mutex access 2016-01-22 18:04:28 -05:00
xfs_pnfs.h
xfs_qm_bhv.c
xfs_qm_syscalls.c
xfs_qm.c xfs: updates for 4.4-rc1 2015-11-11 20:18:48 -08:00
xfs_qm.h
xfs_quota.h
xfs_quotaops.c
xfs_rtalloc.c xfs: eliminate committed arg from xfs_bmap_finish 2016-01-11 11:34:01 +11:00
xfs_rtalloc.h
xfs_stats.c xfs: stats are no longer dependent on CONFIG_PROC_FS 2015-10-19 08:42:46 +11:00
xfs_stats.h xfs: per-filesystem stats counter implementation 2015-10-12 18:21:22 +11:00
xfs_super.c kmemcg: account certain kmem allocations to memcg 2016-01-14 16:00:49 -08:00
xfs_super.h
xfs_symlink.c xfs: eliminate committed arg from xfs_bmap_finish 2016-01-11 11:34:01 +11:00
xfs_symlink.h
xfs_sysctl.c
xfs_sysctl.h
xfs_sysfs.c xfs: debug mode log record crc error injection 2016-01-05 07:41:16 +11:00
xfs_sysfs.h
xfs_trace.c
xfs_trace.h xfs: add tracepoints to readpage calls 2016-01-08 11:28:35 +11:00
xfs_trans_ail.c Revert "xfs: clear PF_NOFREEZE for xfsaild kthread" 2016-01-19 08:21:46 +11:00
xfs_trans_buf.c
xfs_trans_dquot.c xfs: send warning of project quota to userspace via netlink 2016-01-04 16:10:42 +11:00
xfs_trans_extfree.c
xfs_trans_inode.c xfs: optimise away log forces on timestamp updates for fdatasync 2015-11-03 13:14:59 +11:00
xfs_trans_priv.h
xfs_trans.c xfs: per-filesystem stats counter implementation 2015-10-12 18:21:22 +11:00
xfs_trans.h
xfs_xattr.c xfs: Change how listxattr generates synthetic attributes 2015-12-06 21:34:16 -05:00
xfs.h