The commit is pushed to "branch-rh7-3.10.0-327.3.1-vz7.10.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.3.1.vz7.10.12 ------> commit 43cb9daab86c674bc435fff988f36b1fad996247 Author: Andrey Ryabinin <aryabi...@virtuozzo.com> Date: Thu Feb 18 15:01:05 2016 +0400
ve/fs/sync: don't skip dirty metadata on filtered sync Port of diff-ubc-dont-skip-dirty-metadata-on-filtered-sync patch from PCS6. Don't skip dirty metadata during per container sync[fs]. date: 2012/01/11 19:59:46; author: xemul; state: Exp; Author: Konstantin Khlebnikov Email: khlebni...@openvz.org Subject: ubc: disable filtered sync for too dirty inodes Date: Tue, 10 Jan 2012 17:45:25 +0400 Filter only inodes with clean meta-data. We cannot filter writes in this case. Actually we only move writes to the journal thread, and it submit them in not very effective way. Found-by: Alexey Kuznetsov <kuz...@parallels.com> Signed-off-by: Konstantin Khlebnikov <khlebni...@openvz.org> https://jira.sw.ru/browse/PSBM-39583 And the issue below is caused because we don't account metadata => inodes with dirty metadata could be detached from UB (mapping->dirtied_ub == NULL). So sync() will skip such inodes. With this patch sync() will skip inodes with dirty data only. https://jira.sw.ru/browse/PSBM-44125 Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com> Reviewed-by: Vladimir Davydov <vdavy...@virtuozzo.com> khorenko@: we still have 2 cases: 1) bindmount from host into a CT => dirtied_ub will be set, but not "ours", but we still want to sync inodes with dirty metadata because of the single journal 2) we've dropped vzfs, but still have simfs case: again a single journal => we should commit inodes with dirty metadata even in case they (inodes) do not belong to "our" Container. --- fs/fs-writeback.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index b6b33d0..101892a 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -714,6 +714,7 @@ static long writeback_sb_inodes(struct super_block *sb, continue; } if ((work->ub || work->filter_ub) && + ((inode->i_state & I_DIRTY) == I_DIRTY_PAGES) && ub_should_skip_writeback(work->ub, inode)) { spin_unlock(&inode->i_lock); redirty_tail(inode, wb); @@ -1411,7 +1412,8 @@ static void wait_sb_inodes(struct super_block *sb, struct user_beancounter *ub) spin_unlock(&inode->i_lock); continue; } - if (ub && (mapping->dirtied_ub != ub)) { + if (ub && (mapping->dirtied_ub != ub) && + ((inode->i_state & I_DIRTY) == I_DIRTY_PAGES)) { spin_unlock(&inode->i_lock); continue; } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel