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 73997df7ea94fc95b7b0db70fbacc1c791a89acb Author: Vladimir Davydov <vdavy...@parallels.com> Date: Tue Jun 16 19:14:09 2015 +0400
ub/fs: access dirtied_ub under rcu lock in __writeback_single_inode Related to patchset: 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: Unlike RH6, we are not holding any locks in __writeback_single_inode, so we must dereference dirtied_ub carefully, under rcu read lock. Also, if dirtied_ub == NULL, account writeback to ub0 as suggested by dmonakhov@. Signed-off-by: Vladimir Davydov <vdavy...@parallels.com> --- fs/fs-writeback.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 8362cc9..b2f77f4 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -491,16 +491,18 @@ __do_writeback_single_inode(struct inode *inode, struct writeback_control *wbc) static int __writeback_single_inode(struct inode *inode, struct writeback_control *wbc) { - struct user_beancounter *ub = inode->i_mapping->dirtied_ub; + struct user_beancounter *ub; int ret; - if (likely(get_exec_ub() == ub || !ub)) - return __do_writeback_single_inode(inode, wbc); + rcu_read_lock(); + ub = rcu_dereference(inode->i_mapping->dirtied_ub); + if (!ub || !get_beancounter_rcu(ub)) + ub = get_beancounter(get_ub0()); + rcu_read_unlock(); - ub = get_beancounter_rcu(ub) ? set_exec_ub(ub) : NULL; + ub = set_exec_ub(ub); ret = __do_writeback_single_inode(inode, wbc); - if (ub) - put_beancounter(set_exec_ub(ub)); + put_beancounter(set_exec_ub(ub)); return ret; } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel