The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-123.1.2.vz7.5.13 ------> commit 64796a5a4e559059485cbb0809430e5d96aaeda6 Author: Vladimir Davydov <vdavy...@parallels.com> Date: Tue Jun 16 16:29:04 2015 +0400
ub/fs: account writeback io Patchset description: https://jira.sw.ru/browse/PSBM-34007 Vladimir Davydov (7): ioprio: move IOPRIO_WHO_UBC handling out of rcu section ub: zap ub_{init,fini}_ioprio ub: export ub_get_{mem,blkio}_css ub: ressurrect ioprio_set IOPRIO_WHO_UBC ub: ressurrect iostat and ioprio reporting ub: account writeback io ub: do not include block/blk-cgroup.h from io_prio.c This patch description: This patch ports hunks left from the following RH6 commits: diff-ubc-inode-wb-set-exec-to-dirtier diff-ubc-iostat-acct-writeback-io diff-ubc-iostat-acct-wb-at-req-insert Signed-off-by: Vladimir Davydov <vdavy...@parallels.com> Acked-by: Dmitry Monakhov <dmonak...@openvz.org> --- block/cfq-iosched.c | 10 ++++++++++ fs/fs-writeback.c | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index faf5cdd..5d8d665 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -2408,6 +2408,11 @@ static void cfq_bio_merged(struct request_queue *q, struct request *req, struct bio *bio) { cfqg_stats_update_io_merged(RQ_CFQG(req), bio->bi_rw); +#ifdef CONFIG_BC_IO_PRIORITY + if (get_exec_ub()->ub_bound_css[UB_BLKIO_CGROUP] != + &(RQ_CFQG(req))->pd.blkg->blkcg->css) + ub_writeback_io(0, bio_sectors(bio)); +#endif } static void @@ -3987,6 +3992,11 @@ static void cfq_insert_request(struct request_queue *q, struct request *rq) cfqg_stats_update_io_add(RQ_CFQG(rq), cfqd->serving_group, rq->cmd_flags); +#ifdef CONFIG_BC_IO_PRIORITY + if (get_exec_ub()->ub_bound_css[UB_BLKIO_CGROUP] != + &(RQ_CFQG(rq))->pd.blkg->blkcg->css) + ub_writeback_io(1, blk_rq_sectors(rq)); +#endif virtinfo_notifier_call_irq(VITYPE_IO, VIRTINFO_IO_OP_ACCOUNT, q); cfq_rq_enqueued(cfqd, cfqq, rq); } diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 8161c40..8362cc9 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -440,7 +440,7 @@ static void requeue_inode(struct inode *inode, struct bdi_writeback *wb, * setting I_SYNC flag and calling inode_sync_complete() to clear it. */ static int -__writeback_single_inode(struct inode *inode, struct writeback_control *wbc) +__do_writeback_single_inode(struct inode *inode, struct writeback_control *wbc) { struct address_space *mapping = inode->i_mapping; long nr_to_write = wbc->nr_to_write; @@ -488,6 +488,23 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc) return ret; } +static int +__writeback_single_inode(struct inode *inode, struct writeback_control *wbc) +{ + struct user_beancounter *ub = inode->i_mapping->dirtied_ub; + int ret; + + if (likely(get_exec_ub() == ub || !ub)) + return __do_writeback_single_inode(inode, wbc); + + ub = get_beancounter_rcu(ub) ? set_exec_ub(ub) : NULL; + ret = __do_writeback_single_inode(inode, wbc); + if (ub) + put_beancounter(set_exec_ub(ub)); + + return ret; +} + /* * Write out an inode's dirty pages. Either the caller has an active reference * on the inode or the inode has I_WILL_FREE set. _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel