lkml.org 
[lkml]   [2012]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/3] mm: adjust rss counters for migration entiries
    On Fri, 06 Jan 2012 21:38:56 +0400
    Konstantin Khlebnikov <khlebnikov@openvz.org> wrote:

    > Memory migration fill pte with migration entry and it didn't update rss counters.
    > Then it replace migration entry with new page (or old one if migration was failed).
    > But between this two passes this pte can be unmaped, or task can fork child and
    > it will get copy of this migration entry. Nobody account this into rss counters.
    >
    > This patch properly adjust rss counters for migration entries in zap_pte_range()
    > and copy_one_pte(). Thus we avoid extra atomic operations on migration fast-path.
    >
    > Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org>

    It's better to show wheter this is a bug-fix or not in changelog.

    IIUC, the bug-fix is the 1st harf of this patch + patch [2/3].
    Your new bug-check code is in patch[1/3] and 2nd half of this patch.

    I think it's better to do bug-fix 1st and add bug-check later.

    So, could you reorder patches to bug-fix and new-bug-check ?

    To the logic itself,
    Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Please CC when you repost.



    > ---
    > mm/memory.c | 37 ++++++++++++++++++++++++++++---------
    > 1 files changed, 28 insertions(+), 9 deletions(-)
    >
    > diff --git a/mm/memory.c b/mm/memory.c
    > index 829d437..2f96ffc 100644
    > --- a/mm/memory.c
    > +++ b/mm/memory.c
    > @@ -878,15 +878,24 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
    > }
    > if (likely(!non_swap_entry(entry)))
    > rss[MM_SWAPENTS]++;
    > - else if (is_write_migration_entry(entry) &&
    > - is_cow_mapping(vm_flags)) {
    > - /*
    > - * COW mappings require pages in both parent
    > - * and child to be set to read.
    > - */
    > - make_migration_entry_read(&entry);
    > - pte = swp_entry_to_pte(entry);
    > - set_pte_at(src_mm, addr, src_pte, pte);
    > + else if (is_migration_entry(entry)) {
    > + page = migration_entry_to_page(entry);
    > +
    > + if (PageAnon(page))
    > + rss[MM_ANONPAGES]++;
    > + else
    > + rss[MM_FILEPAGES]++;
    > +
    > + if (is_write_migration_entry(entry) &&
    > + is_cow_mapping(vm_flags)) {
    > + /*
    > + * COW mappings require pages in both
    > + * parent and child to be set to read.
    > + */
    > + make_migration_entry_read(&entry);
    > + pte = swp_entry_to_pte(entry);
    > + set_pte_at(src_mm, addr, src_pte, pte);
    > + }
    > }
    > }
    > goto out_set_pte;
    > @@ -1191,6 +1200,16 @@ again:
    >
    > if (!non_swap_entry(entry))
    > rss[MM_SWAPENTS]--;
    > + else if (is_migration_entry(entry)) {
    > + struct page *page;
    > +
    > + page = migration_entry_to_page(entry);
    > +
    > + if (PageAnon(page))
    > + rss[MM_ANONPAGES]--;
    > + else
    > + rss[MM_FILEPAGES]--;
    > + }
    > if (unlikely(!free_swap_and_cache(entry)))
    > print_bad_pte(vma, addr, ptent, NULL);
    > }
    >
    > --
    > To unsubscribe, send a message with 'unsubscribe linux-mm' in
    > the body to majordomo@kvack.org. For more info on Linux MM,
    > see: http://www.linux-mm.org/ .
    > Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
    > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
    >



    \
     
     \ /
      Last update: 2012-01-11 06:45    [W:0.027 / U:31.252 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site