Re: [patch 3/3] mm: move page->mem_cgroup bad page handling into generic code

2014-11-04 Thread Kamezawa Hiroyuki
(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-04 Thread Kamezawa Hiroyuki
(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

2014-11-03 Thread Vladimir Davydov
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

2014-11-03 Thread Michal Hocko
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

2014-11-03 Thread Michal Hocko
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

2014-11-03 Thread Vladimir Davydov
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

2014-11-02 Thread David Miller
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

2014-11-02 Thread David Miller
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

2014-11-01 Thread Johannes Weiner
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

2014-11-01 Thread Johannes Weiner
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/