Re: [patch 3/3] mm: move page->mem_cgroup bad page handling into generic code
(2014/11/02 12:15), Johannes Weiner wrote: > Now that the external page_cgroup data structure and its lookup is > gone, let the generic bad_page() check for page->mem_cgroup sanity. > > Signed-off-by: Johannes Weiner Acked-by: KAMEZAWA Hiroyuki -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page-mem_cgroup bad page handling into generic code
(2014/11/02 12:15), Johannes Weiner wrote: Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page-mem_cgroup sanity. Signed-off-by: Johannes Weiner han...@cmpxchg.org Acked-by: KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page->mem_cgroup bad page handling into generic code
On Sat, Nov 01, 2014 at 11:15:56PM -0400, Johannes Weiner wrote: > Now that the external page_cgroup data structure and its lookup is > gone, let the generic bad_page() check for page->mem_cgroup sanity. > > Signed-off-by: Johannes Weiner Acked-by: Vladimir Davydov -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page->mem_cgroup bad page handling into generic code
On Sat 01-11-14 23:15:56, Johannes Weiner wrote: > Now that the external page_cgroup data structure and its lookup is > gone, let the generic bad_page() check for page->mem_cgroup sanity. > > Signed-off-by: Johannes Weiner Acked-by: Michal Hocko > --- > include/linux/memcontrol.h | 4 > mm/debug.c | 5 - > mm/memcontrol.c| 15 --- > mm/page_alloc.c| 12 > 4 files changed, 12 insertions(+), 24 deletions(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index dafba59b31b4..e789551d4db0 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -173,10 +173,6 @@ static inline void mem_cgroup_count_vm_event(struct > mm_struct *mm, > void mem_cgroup_split_huge_fixup(struct page *head); > #endif > > -#ifdef CONFIG_DEBUG_VM > -bool mem_cgroup_bad_page_check(struct page *page); > -void mem_cgroup_print_bad_page(struct page *page); > -#endif > #else /* CONFIG_MEMCG */ > struct mem_cgroup; > > diff --git a/mm/debug.c b/mm/debug.c > index 5ce45c9a29b5..0e58f3211f89 100644 > --- a/mm/debug.c > +++ b/mm/debug.c > @@ -95,7 +95,10 @@ void dump_page_badflags(struct page *page, const char > *reason, > dump_flags(page->flags & badflags, > pageflag_names, ARRAY_SIZE(pageflag_names)); > } > - mem_cgroup_print_bad_page(page); > +#ifdef CONFIG_MEMCG > + if (page->mem_cgroup) > + pr_alert("page->mem_cgroup:%p\n", page->mem_cgroup); > +#endif > } > > void dump_page(struct page *page, const char *reason) > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index fbb41a170eae..3645641513a1 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -3157,21 +3157,6 @@ static inline int > mem_cgroup_move_swap_account(swp_entry_t entry, > } > #endif > > -#ifdef CONFIG_DEBUG_VM > -bool mem_cgroup_bad_page_check(struct page *page) > -{ > - if (mem_cgroup_disabled()) > - return false; > - > - return page->mem_cgroup != NULL; > -} > - > -void mem_cgroup_print_bad_page(struct page *page) > -{ > - pr_alert("page->mem_cgroup:%p\n", page->mem_cgroup); > -} > -#endif > - > static DEFINE_MUTEX(memcg_limit_mutex); > > static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 6a952237a677..161da09fcda2 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -653,8 +653,10 @@ static inline int free_pages_check(struct page *page) > bad_reason = "PAGE_FLAGS_CHECK_AT_FREE flag(s) set"; > bad_flags = PAGE_FLAGS_CHECK_AT_FREE; > } > - if (unlikely(mem_cgroup_bad_page_check(page))) > - bad_reason = "cgroup check failed"; > +#ifdef CONFIG_MEMCG > + if (unlikely(page->mem_cgroup)) > + bad_reason = "page still charged to cgroup"; > +#endif > if (unlikely(bad_reason)) { > bad_page(page, bad_reason, bad_flags); > return 1; > @@ -920,8 +922,10 @@ static inline int check_new_page(struct page *page) > bad_reason = "PAGE_FLAGS_CHECK_AT_PREP flag set"; > bad_flags = PAGE_FLAGS_CHECK_AT_PREP; > } > - if (unlikely(mem_cgroup_bad_page_check(page))) > - bad_reason = "cgroup check failed"; > +#ifdef CONFIG_MEMCG > + if (unlikely(page->mem_cgroup)) > + bad_reason = "page still charged to cgroup"; > +#endif > if (unlikely(bad_reason)) { > bad_page(page, bad_reason, bad_flags); > return 1; > -- > 2.1.3 > -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page-mem_cgroup bad page handling into generic code
On Sat 01-11-14 23:15:56, Johannes Weiner wrote: Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page-mem_cgroup sanity. Signed-off-by: Johannes Weiner han...@cmpxchg.org Acked-by: Michal Hocko mho...@suse.cz --- include/linux/memcontrol.h | 4 mm/debug.c | 5 - mm/memcontrol.c| 15 --- mm/page_alloc.c| 12 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index dafba59b31b4..e789551d4db0 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -173,10 +173,6 @@ static inline void mem_cgroup_count_vm_event(struct mm_struct *mm, void mem_cgroup_split_huge_fixup(struct page *head); #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page); -void mem_cgroup_print_bad_page(struct page *page); -#endif #else /* CONFIG_MEMCG */ struct mem_cgroup; diff --git a/mm/debug.c b/mm/debug.c index 5ce45c9a29b5..0e58f3211f89 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -95,7 +95,10 @@ void dump_page_badflags(struct page *page, const char *reason, dump_flags(page-flags badflags, pageflag_names, ARRAY_SIZE(pageflag_names)); } - mem_cgroup_print_bad_page(page); +#ifdef CONFIG_MEMCG + if (page-mem_cgroup) + pr_alert(page-mem_cgroup:%p\n, page-mem_cgroup); +#endif } void dump_page(struct page *page, const char *reason) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index fbb41a170eae..3645641513a1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3157,21 +3157,6 @@ static inline int mem_cgroup_move_swap_account(swp_entry_t entry, } #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page) -{ - if (mem_cgroup_disabled()) - return false; - - return page-mem_cgroup != NULL; -} - -void mem_cgroup_print_bad_page(struct page *page) -{ - pr_alert(page-mem_cgroup:%p\n, page-mem_cgroup); -} -#endif - static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6a952237a677..161da09fcda2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -653,8 +653,10 @@ static inline int free_pages_check(struct page *page) bad_reason = PAGE_FLAGS_CHECK_AT_FREE flag(s) set; bad_flags = PAGE_FLAGS_CHECK_AT_FREE; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = cgroup check failed; +#ifdef CONFIG_MEMCG + if (unlikely(page-mem_cgroup)) + bad_reason = page still charged to cgroup; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; @@ -920,8 +922,10 @@ static inline int check_new_page(struct page *page) bad_reason = PAGE_FLAGS_CHECK_AT_PREP flag set; bad_flags = PAGE_FLAGS_CHECK_AT_PREP; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = cgroup check failed; +#ifdef CONFIG_MEMCG + if (unlikely(page-mem_cgroup)) + bad_reason = page still charged to cgroup; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; -- 2.1.3 -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page-mem_cgroup bad page handling into generic code
On Sat, Nov 01, 2014 at 11:15:56PM -0400, Johannes Weiner wrote: Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page-mem_cgroup sanity. Signed-off-by: Johannes Weiner han...@cmpxchg.org Acked-by: Vladimir Davydov vdavy...@parallels.com -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page->mem_cgroup bad page handling into generic code
From: Johannes Weiner Date: Sat, 1 Nov 2014 23:15:56 -0400 > Now that the external page_cgroup data structure and its lookup is > gone, let the generic bad_page() check for page->mem_cgroup sanity. > > Signed-off-by: Johannes Weiner Acked-by: David S. Miller -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [patch 3/3] mm: move page-mem_cgroup bad page handling into generic code
From: Johannes Weiner han...@cmpxchg.org Date: Sat, 1 Nov 2014 23:15:56 -0400 Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page-mem_cgroup sanity. Signed-off-by: Johannes Weiner han...@cmpxchg.org Acked-by: David S. Miller da...@davemloft.net -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[patch 3/3] mm: move page->mem_cgroup bad page handling into generic code
Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page->mem_cgroup sanity. Signed-off-by: Johannes Weiner --- include/linux/memcontrol.h | 4 mm/debug.c | 5 - mm/memcontrol.c| 15 --- mm/page_alloc.c| 12 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index dafba59b31b4..e789551d4db0 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -173,10 +173,6 @@ static inline void mem_cgroup_count_vm_event(struct mm_struct *mm, void mem_cgroup_split_huge_fixup(struct page *head); #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page); -void mem_cgroup_print_bad_page(struct page *page); -#endif #else /* CONFIG_MEMCG */ struct mem_cgroup; diff --git a/mm/debug.c b/mm/debug.c index 5ce45c9a29b5..0e58f3211f89 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -95,7 +95,10 @@ void dump_page_badflags(struct page *page, const char *reason, dump_flags(page->flags & badflags, pageflag_names, ARRAY_SIZE(pageflag_names)); } - mem_cgroup_print_bad_page(page); +#ifdef CONFIG_MEMCG + if (page->mem_cgroup) + pr_alert("page->mem_cgroup:%p\n", page->mem_cgroup); +#endif } void dump_page(struct page *page, const char *reason) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index fbb41a170eae..3645641513a1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3157,21 +3157,6 @@ static inline int mem_cgroup_move_swap_account(swp_entry_t entry, } #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page) -{ - if (mem_cgroup_disabled()) - return false; - - return page->mem_cgroup != NULL; -} - -void mem_cgroup_print_bad_page(struct page *page) -{ - pr_alert("page->mem_cgroup:%p\n", page->mem_cgroup); -} -#endif - static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6a952237a677..161da09fcda2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -653,8 +653,10 @@ static inline int free_pages_check(struct page *page) bad_reason = "PAGE_FLAGS_CHECK_AT_FREE flag(s) set"; bad_flags = PAGE_FLAGS_CHECK_AT_FREE; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = "cgroup check failed"; +#ifdef CONFIG_MEMCG + if (unlikely(page->mem_cgroup)) + bad_reason = "page still charged to cgroup"; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; @@ -920,8 +922,10 @@ static inline int check_new_page(struct page *page) bad_reason = "PAGE_FLAGS_CHECK_AT_PREP flag set"; bad_flags = PAGE_FLAGS_CHECK_AT_PREP; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = "cgroup check failed"; +#ifdef CONFIG_MEMCG + if (unlikely(page->mem_cgroup)) + bad_reason = "page still charged to cgroup"; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; -- 2.1.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[patch 3/3] mm: move page-mem_cgroup bad page handling into generic code
Now that the external page_cgroup data structure and its lookup is gone, let the generic bad_page() check for page-mem_cgroup sanity. Signed-off-by: Johannes Weiner han...@cmpxchg.org --- include/linux/memcontrol.h | 4 mm/debug.c | 5 - mm/memcontrol.c| 15 --- mm/page_alloc.c| 12 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index dafba59b31b4..e789551d4db0 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -173,10 +173,6 @@ static inline void mem_cgroup_count_vm_event(struct mm_struct *mm, void mem_cgroup_split_huge_fixup(struct page *head); #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page); -void mem_cgroup_print_bad_page(struct page *page); -#endif #else /* CONFIG_MEMCG */ struct mem_cgroup; diff --git a/mm/debug.c b/mm/debug.c index 5ce45c9a29b5..0e58f3211f89 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -95,7 +95,10 @@ void dump_page_badflags(struct page *page, const char *reason, dump_flags(page-flags badflags, pageflag_names, ARRAY_SIZE(pageflag_names)); } - mem_cgroup_print_bad_page(page); +#ifdef CONFIG_MEMCG + if (page-mem_cgroup) + pr_alert(page-mem_cgroup:%p\n, page-mem_cgroup); +#endif } void dump_page(struct page *page, const char *reason) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index fbb41a170eae..3645641513a1 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3157,21 +3157,6 @@ static inline int mem_cgroup_move_swap_account(swp_entry_t entry, } #endif -#ifdef CONFIG_DEBUG_VM -bool mem_cgroup_bad_page_check(struct page *page) -{ - if (mem_cgroup_disabled()) - return false; - - return page-mem_cgroup != NULL; -} - -void mem_cgroup_print_bad_page(struct page *page) -{ - pr_alert(page-mem_cgroup:%p\n, page-mem_cgroup); -} -#endif - static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6a952237a677..161da09fcda2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -653,8 +653,10 @@ static inline int free_pages_check(struct page *page) bad_reason = PAGE_FLAGS_CHECK_AT_FREE flag(s) set; bad_flags = PAGE_FLAGS_CHECK_AT_FREE; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = cgroup check failed; +#ifdef CONFIG_MEMCG + if (unlikely(page-mem_cgroup)) + bad_reason = page still charged to cgroup; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; @@ -920,8 +922,10 @@ static inline int check_new_page(struct page *page) bad_reason = PAGE_FLAGS_CHECK_AT_PREP flag set; bad_flags = PAGE_FLAGS_CHECK_AT_PREP; } - if (unlikely(mem_cgroup_bad_page_check(page))) - bad_reason = cgroup check failed; +#ifdef CONFIG_MEMCG + if (unlikely(page-mem_cgroup)) + bad_reason = page still charged to cgroup; +#endif if (unlikely(bad_reason)) { bad_page(page, bad_reason, bad_flags); return 1; -- 2.1.3 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/