[GIT PULL] Cgroup writeback support for 4.2

From: Jens Axboe
Date: Thu Jun 25 2015 - 10:44:45 EST


Hi Linus,

This is the big pull request for adding cgroup writeback support. This
code has been in development for a long time, and it has been simmering
in for-next for a good chunk of this cycle too. This is one of those
problems that has been talked about for at least half a decade, finally
there's a solution and code to go with it.

Also see last weeks writeup on LWN:

http://lwn.net/Articles/648292/

This pull request is on top of for-4.2/core, sent out earlier.


Please pull!


git://git.kernel.dk/linux-block.git for-4.2/writeback


----------------------------------------------------------------
Greg Thelen (1):
memcg: add per cgroup dirty page accounting

Jens Axboe (1):
buffer: remove unusued 'ret' variable

Tejun Heo (83):
page_writeback: revive cancel_dirty_page() in a restricted form
blkcg: move block/blk-cgroup.h to include/linux/blk-cgroup.h
update !CONFIG_BLK_CGROUP dummies in include/linux/blk-cgroup.h
blkcg: always create the blkcg_gq for the root blkcg
memcg: add mem_cgroup_root_css
blkcg: add blkcg_root_css
cgroup, block: implement task_get_css() and use it in bio_associate_current()
blkcg: implement task_get_blkcg_css()
blkcg: implement bio_associate_blkcg()
memcg: implement mem_cgroup_css_from_page()
writeback: move backing_dev_info->state into bdi_writeback
writeback: move backing_dev_info->bdi_stat[] into bdi_writeback
writeback: move bandwidth related fields from backing_dev_info into bdi_writeback
writeback: s/bdi/wb/ in mm/page-writeback.c
writeback: move backing_dev_info->wb_lock and ->worklist into bdi_writeback
writeback: reorganize mm/backing-dev.c
writeback: separate out include/linux/backing-dev-defs.h
bdi: make inode_to_bdi() inline
writeback: add @gfp to wb_init()
bdi: separate out congested state into a separate struct
writeback: add {CONFIG|BDI_CAP|FS}_CGROUP_WRITEBACK
writeback: make backing_dev_info host cgroup-specific bdi_writebacks
writeback, blkcg: associate each blkcg_gq with the corresponding bdi_writeback_congested
writeback: attribute stats to the matching per-cgroup bdi_writeback
writeback: let balance_dirty_pages() work on the matching cgroup bdi_writeback
writeback: make congestion functions per bdi_writeback
writeback, blkcg: restructure blk_{set|clear}_queue_congested()
writeback, blkcg: propagate non-root blkcg congestion state
writeback: implement and use inode_congested()
writeback: implement WB_has_dirty_io wb_state flag
writeback: implement backing_dev_info->tot_write_bandwidth
writeback: make bdi_has_dirty_io() take multiple bdi_writeback's into account
writeback: don't issue wb_writeback_work if clean
writeback: make bdi->min/max_ratio handling cgroup writeback aware
writeback: implement bdi_for_each_wb()
writeback: remove bdi_start_writeback()
writeback: make laptop_mode_timer_fn() handle multiple bdi_writeback's
writeback: make writeback_in_progress() take bdi_writeback instead of backing_dev_info
writeback: make bdi_start_background_writeback() take bdi_writeback instead of backing_dev_info
writeback: make wakeup_flusher_threads() handle multiple bdi_writeback's
writeback: make wakeup_dirtytime_writeback() handle multiple bdi_writeback's
writeback: add wb_writeback_work->auto_free
writeback: implement bdi_wait_for_completion()
writeback: implement wb_wait_for_single_work()
writeback: restructure try_writeback_inodes_sb[_nr]()
writeback: make writeback initiation functions handle multiple bdi_writeback's
writeback: dirty inodes against their matching cgroup bdi_writeback's
buffer, writeback: make __block_write_full_page() honor cgroup writeback
mpage: make __mpage_writepage() honor cgroup writeback
ext2: enable cgroup writeback support
memcg: make mem_cgroup_read_{stat|event}() iterate possible cpus instead of online
writeback: clean up wb_dirty_limit()
writeback: reorganize [__]wb_update_bandwidth()
writeback: implement wb_domain
writeback: move global_dirty_limit into wb_domain
writeback: consolidate dirty throttle parameters into dirty_throttle_control
writeback: add dirty_throttle_control->wb_bg_thresh
writeback: make __wb_calc_thresh() take dirty_throttle_control
writeback: add dirty_throttle_control->pos_ratio
writeback: add dirty_throttle_control->wb_completions
writeback: add dirty_throttle_control->dom
writeback: make __wb_writeout_inc() and hard_dirty_limit() take wb_domaas a parameter
writeback: separate out domain_dirty_limits()
writeback: move over_bground_thresh() to mm/page-writeback.c
writeback: update wb_over_bg_thresh() to use wb_domain aware operations
writeback: implement memcg wb_domain
writeback: reset wb_domain->dirty_limit[_tstmp] when memcg domain size changes
writeback: implement memcg writeback domain based throttling
mm: vmscan: disable memcg direct reclaim stalling if cgroup writeback support is in use
writeback: relocate wb[_try]_get(), wb_put(), inode_{attach|detach}_wb()
writeback: make writeback_control track the inode being written back
writeback: implement foreign cgroup inode detection
writeback: implement [locked_]inode_to_wb_and_lock_list()
writeback: implement unlocked_inode_to_wb transaction and use it for stat updates
writeback: use unlocked_inode_to_wb transaction in inode_congested()
writeback: add lockdep annotation to inode_to_wb()
writeback: implement foreign cgroup inode bdi_writeback switching
writeback: disassociate inodes from dying bdi_writebacks
bdi: fix wrong error return value in cgwb_create()
v9fs: fix error handling in v9fs_session_init()
writeback: do foreign inode detection iff cgroup writeback is enabled
vfs, writeback: replace FS_CGROUP_WRITEBACK with SB_I_CGROUPWB
writeback, blkio: add documentation for cgroup writeback support

Documentation/cgroups/blkio-controller.txt | 83 +-
Documentation/cgroups/memory.txt | 1 +
block/bio.c | 35 +-
block/blk-cgroup.c | 124 +-
block/blk-core.c | 70 +-
block/blk-integrity.c | 1 +
block/blk-sysfs.c | 3 +-
block/blk-throttle.c | 2 +-
block/bounce.c | 1 +
block/cfq-iosched.c | 2 +-
block/elevator.c | 2 +-
block/genhd.c | 1 +
drivers/block/drbd/drbd_int.h | 1 +
drivers/block/drbd/drbd_main.c | 10 +-
drivers/block/pktcdvd.c | 1 +
drivers/char/raw.c | 1 +
drivers/md/bcache/request.c | 1 +
drivers/md/dm.c | 2 +-
drivers/md/dm.h | 1 +
drivers/md/md.h | 1 +
drivers/md/raid1.c | 4 +-
drivers/md/raid10.c | 2 +-
drivers/mtd/devices/block2mtd.c | 1 +
.../lustre/include/linux/lustre_patchless_compat.h | 4 +-
fs/9p/v9fs.c | 50 +-
fs/9p/vfs_super.c | 8 +-
fs/block_dev.c | 9 +-
fs/buffer.c | 64 +-
fs/ext2/super.c | 1 +
fs/ext4/extents.c | 1 +
fs/ext4/mballoc.c | 1 +
fs/ext4/super.c | 1 +
fs/f2fs/node.c | 4 +-
fs/f2fs/segment.h | 3 +-
fs/fat/file.c | 1 +
fs/fat/inode.c | 1 +
fs/fs-writeback.c | 1167 +++++++++++++++----
fs/fuse/file.c | 12 +-
fs/gfs2/super.c | 2 +-
fs/hfs/super.c | 1 +
fs/hfsplus/super.c | 1 +
fs/inode.c | 1 +
fs/mpage.c | 3 +
fs/nfs/filelayout/filelayout.c | 1 +
fs/nfs/internal.h | 2 +-
fs/nfs/write.c | 3 +-
fs/ocfs2/file.c | 1 +
fs/reiserfs/super.c | 1 +
fs/ufs/super.c | 1 +
fs/xfs/xfs_aops.c | 12 +-
fs/xfs/xfs_file.c | 1 +
include/linux/backing-dev-defs.h | 255 ++++
include/linux/backing-dev.h | 557 ++++++---
include/linux/bio.h | 3 +
{block => include/linux}/blk-cgroup.h | 32 +-
include/linux/blkdev.h | 21 +-
include/linux/cgroup.h | 25 +
include/linux/fs.h | 26 +-
include/linux/memcontrol.h | 29 +
include/linux/mm.h | 8 +-
include/linux/pagemap.h | 3 +-
include/linux/writeback.h | 221 +++-
include/trace/events/writeback.h | 15 +-
init/Kconfig | 5 +
mm/backing-dev.c | 649 ++++++++---
mm/fadvise.c | 2 +-
mm/filemap.c | 34 +-
mm/madvise.c | 1 +
mm/memcontrol.c | 223 +++-
mm/page-writeback.c | 1231 +++++++++++++-------
mm/readahead.c | 2 +-
mm/rmap.c | 2 +
mm/truncate.c | 18 +-
mm/vmscan.c | 79 +-
74 files changed, 3898 insertions(+), 1250 deletions(-)
create mode 100644 include/linux/backing-dev-defs.h
rename {block => include/linux}/blk-cgroup.h (96%)

--
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/