All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case
@ 2015-04-17  2:08 ` Naoya Horiguchi
  0 siblings, 0 replies; 8+ messages in thread
From: Naoya Horiguchi @ 2015-04-17  2:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Dean Nelson, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

Hwpoison injection via debugfs:hwpoison/corrupt-pfn takes a refcount of
the target page. But current code doesn't release it if the target page
is not supposed to be injected, which results in memory leak.
This patch simply adds the refcount releasing code.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
---
 mm/hwpoison-inject.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
index 329caf56df22..2b3f933e3282 100644
--- v4.0.orig/mm/hwpoison-inject.c
+++ v4.0/mm/hwpoison-inject.c
@@ -40,7 +40,7 @@ static int hwpoison_inject(void *data, u64 val)
 	 * This implies unable to support non-LRU pages.
 	 */
 	if (!PageLRU(p) && !PageHuge(p))
-		return 0;
+		goto put_out;
 
 	/*
 	 * do a racy check with elevated page count, to make sure PG_hwpoison
@@ -52,11 +52,14 @@ static int hwpoison_inject(void *data, u64 val)
 	err = hwpoison_filter(hpage);
 	unlock_page(hpage);
 	if (err)
-		return 0;
+		goto put_out;
 
 inject:
 	pr_info("Injecting memory failure at pfn %#lx\n", pfn);
 	return memory_failure(pfn, 18, MF_COUNT_INCREASED);
+put_out:
+	put_page(hpage);
+	return 0;
 }
 
 static int hwpoison_unpoison(void *data, u64 val)
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] mm/hwpoison-inject: check PageLRU of hpage
  2015-04-17  2:08 ` Naoya Horiguchi
@ 2015-04-17  2:08   ` Naoya Horiguchi
  -1 siblings, 0 replies; 8+ messages in thread
From: Naoya Horiguchi @ 2015-04-17  2:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Dean Nelson, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

Hwpoison injector checks PageLRU of the raw target page to find out whether
the page is an appropriate target, but current code now filters out thp tail
pages, which prevents us from testing for such cases via this interface.
So let's check hpage instead of p.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
---
 mm/hwpoison-inject.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
index 2b3f933e3282..4ca5fe0042e1 100644
--- v4.0.orig/mm/hwpoison-inject.c
+++ v4.0/mm/hwpoison-inject.c
@@ -34,12 +34,12 @@ static int hwpoison_inject(void *data, u64 val)
 	if (!hwpoison_filter_enable)
 		goto inject;
 
-	if (!PageLRU(p) && !PageHuge(p))
-		shake_page(p, 0);
+	if (!PageLRU(hpage) && !PageHuge(p))
+		shake_page(hpage, 0);
 	/*
 	 * This implies unable to support non-LRU pages.
 	 */
-	if (!PageLRU(p) && !PageHuge(p))
+	if (!PageLRU(hpage) && !PageHuge(p))
 		goto put_out;
 
 	/*
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case
@ 2015-04-17  2:08 ` Naoya Horiguchi
  0 siblings, 0 replies; 8+ messages in thread
From: Naoya Horiguchi @ 2015-04-17  2:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Dean Nelson, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

Hwpoison injection via debugfs:hwpoison/corrupt-pfn takes a refcount of
the target page. But current code doesn't release it if the target page
is not supposed to be injected, which results in memory leak.
This patch simply adds the refcount releasing code.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
---
 mm/hwpoison-inject.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
index 329caf56df22..2b3f933e3282 100644
--- v4.0.orig/mm/hwpoison-inject.c
+++ v4.0/mm/hwpoison-inject.c
@@ -40,7 +40,7 @@ static int hwpoison_inject(void *data, u64 val)
 	 * This implies unable to support non-LRU pages.
 	 */
 	if (!PageLRU(p) && !PageHuge(p))
-		return 0;
+		goto put_out;
 
 	/*
 	 * do a racy check with elevated page count, to make sure PG_hwpoison
@@ -52,11 +52,14 @@ static int hwpoison_inject(void *data, u64 val)
 	err = hwpoison_filter(hpage);
 	unlock_page(hpage);
 	if (err)
-		return 0;
+		goto put_out;
 
 inject:
 	pr_info("Injecting memory failure at pfn %#lx\n", pfn);
 	return memory_failure(pfn, 18, MF_COUNT_INCREASED);
+put_out:
+	put_page(hpage);
+	return 0;
 }
 
 static int hwpoison_unpoison(void *data, u64 val)
-- 
2.1.0

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] mm/hwpoison-inject: check PageLRU of hpage
@ 2015-04-17  2:08   ` Naoya Horiguchi
  0 siblings, 0 replies; 8+ messages in thread
From: Naoya Horiguchi @ 2015-04-17  2:08 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Dean Nelson, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

Hwpoison injector checks PageLRU of the raw target page to find out whether
the page is an appropriate target, but current code now filters out thp tail
pages, which prevents us from testing for such cases via this interface.
So let's check hpage instead of p.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
---
 mm/hwpoison-inject.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
index 2b3f933e3282..4ca5fe0042e1 100644
--- v4.0.orig/mm/hwpoison-inject.c
+++ v4.0/mm/hwpoison-inject.c
@@ -34,12 +34,12 @@ static int hwpoison_inject(void *data, u64 val)
 	if (!hwpoison_filter_enable)
 		goto inject;
 
-	if (!PageLRU(p) && !PageHuge(p))
-		shake_page(p, 0);
+	if (!PageLRU(hpage) && !PageHuge(p))
+		shake_page(hpage, 0);
 	/*
 	 * This implies unable to support non-LRU pages.
 	 */
-	if (!PageLRU(p) && !PageHuge(p))
+	if (!PageLRU(hpage) && !PageHuge(p))
 		goto put_out;
 
 	/*
-- 
2.1.0

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case
  2015-04-17  2:08 ` Naoya Horiguchi
@ 2015-04-24  0:42   ` Dean Nelson
  -1 siblings, 0 replies; 8+ messages in thread
From: Dean Nelson @ 2015-04-24  0:42 UTC (permalink / raw)
  To: Naoya Horiguchi
  Cc: Andrew Morton, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

On 04/16/2015 09:08 PM, Naoya Horiguchi wrote:
> Hwpoison injection via debugfs:hwpoison/corrupt-pfn takes a refcount of
> the target page. But current code doesn't release it if the target page
> is not supposed to be injected, which results in memory leak.
> This patch simply adds the refcount releasing code.
> 
> Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>

Acked-by: Dean Nelson <dnelson@redhat.com>


> ---
>   mm/hwpoison-inject.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
> index 329caf56df22..2b3f933e3282 100644
> --- v4.0.orig/mm/hwpoison-inject.c
> +++ v4.0/mm/hwpoison-inject.c
> @@ -40,7 +40,7 @@ static int hwpoison_inject(void *data, u64 val)
>   	 * This implies unable to support non-LRU pages.
>   	 */
>   	if (!PageLRU(p) && !PageHuge(p))
> -		return 0;
> +		goto put_out;
>   
>   	/*
>   	 * do a racy check with elevated page count, to make sure PG_hwpoison
> @@ -52,11 +52,14 @@ static int hwpoison_inject(void *data, u64 val)
>   	err = hwpoison_filter(hpage);
>   	unlock_page(hpage);
>   	if (err)
> -		return 0;
> +		goto put_out;
>   
>   inject:
>   	pr_info("Injecting memory failure at pfn %#lx\n", pfn);
>   	return memory_failure(pfn, 18, MF_COUNT_INCREASED);
> +put_out:
> +	put_page(hpage);
> +	return 0;
>   }
>   
>   static int hwpoison_unpoison(void *data, u64 val)
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case
@ 2015-04-24  0:42   ` Dean Nelson
  0 siblings, 0 replies; 8+ messages in thread
From: Dean Nelson @ 2015-04-24  0:42 UTC (permalink / raw)
  To: Naoya Horiguchi
  Cc: Andrew Morton, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

On 04/16/2015 09:08 PM, Naoya Horiguchi wrote:
> Hwpoison injection via debugfs:hwpoison/corrupt-pfn takes a refcount of
> the target page. But current code doesn't release it if the target page
> is not supposed to be injected, which results in memory leak.
> This patch simply adds the refcount releasing code.
> 
> Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>

Acked-by: Dean Nelson <dnelson@redhat.com>


> ---
>   mm/hwpoison-inject.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
> index 329caf56df22..2b3f933e3282 100644
> --- v4.0.orig/mm/hwpoison-inject.c
> +++ v4.0/mm/hwpoison-inject.c
> @@ -40,7 +40,7 @@ static int hwpoison_inject(void *data, u64 val)
>   	 * This implies unable to support non-LRU pages.
>   	 */
>   	if (!PageLRU(p) && !PageHuge(p))
> -		return 0;
> +		goto put_out;
>   
>   	/*
>   	 * do a racy check with elevated page count, to make sure PG_hwpoison
> @@ -52,11 +52,14 @@ static int hwpoison_inject(void *data, u64 val)
>   	err = hwpoison_filter(hpage);
>   	unlock_page(hpage);
>   	if (err)
> -		return 0;
> +		goto put_out;
>   
>   inject:
>   	pr_info("Injecting memory failure at pfn %#lx\n", pfn);
>   	return memory_failure(pfn, 18, MF_COUNT_INCREASED);
> +put_out:
> +	put_page(hpage);
> +	return 0;
>   }
>   
>   static int hwpoison_unpoison(void *data, u64 val)
> 

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] mm/hwpoison-inject: check PageLRU of hpage
  2015-04-17  2:08   ` Naoya Horiguchi
@ 2015-04-24  0:42     ` Dean Nelson
  -1 siblings, 0 replies; 8+ messages in thread
From: Dean Nelson @ 2015-04-24  0:42 UTC (permalink / raw)
  To: Naoya Horiguchi
  Cc: Andrew Morton, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

On 04/16/2015 09:08 PM, Naoya Horiguchi wrote:
> Hwpoison injector checks PageLRU of the raw target page to find out whether
> the page is an appropriate target, but current code now filters out thp tail
> pages, which prevents us from testing for such cases via this interface.
> So let's check hpage instead of p.
> 
> Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>

Acked-by: Dean Nelson <dnelson@redhat.com>


> ---
>   mm/hwpoison-inject.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
> index 2b3f933e3282..4ca5fe0042e1 100644
> --- v4.0.orig/mm/hwpoison-inject.c
> +++ v4.0/mm/hwpoison-inject.c
> @@ -34,12 +34,12 @@ static int hwpoison_inject(void *data, u64 val)
>   	if (!hwpoison_filter_enable)
>   		goto inject;
>   
> -	if (!PageLRU(p) && !PageHuge(p))
> -		shake_page(p, 0);
> +	if (!PageLRU(hpage) && !PageHuge(p))
> +		shake_page(hpage, 0);
>   	/*
>   	 * This implies unable to support non-LRU pages.
>   	 */
> -	if (!PageLRU(p) && !PageHuge(p))
> +	if (!PageLRU(hpage) && !PageHuge(p))
>   		goto put_out;
>   
>   	/*
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] mm/hwpoison-inject: check PageLRU of hpage
@ 2015-04-24  0:42     ` Dean Nelson
  0 siblings, 0 replies; 8+ messages in thread
From: Dean Nelson @ 2015-04-24  0:42 UTC (permalink / raw)
  To: Naoya Horiguchi
  Cc: Andrew Morton, Andi Kleen, Andrea Arcangeli, Hidetoshi Seto,
	linux-mm, linux-kernel

On 04/16/2015 09:08 PM, Naoya Horiguchi wrote:
> Hwpoison injector checks PageLRU of the raw target page to find out whether
> the page is an appropriate target, but current code now filters out thp tail
> pages, which prevents us from testing for such cases via this interface.
> So let's check hpage instead of p.
> 
> Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>

Acked-by: Dean Nelson <dnelson@redhat.com>


> ---
>   mm/hwpoison-inject.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git v4.0.orig/mm/hwpoison-inject.c v4.0/mm/hwpoison-inject.c
> index 2b3f933e3282..4ca5fe0042e1 100644
> --- v4.0.orig/mm/hwpoison-inject.c
> +++ v4.0/mm/hwpoison-inject.c
> @@ -34,12 +34,12 @@ static int hwpoison_inject(void *data, u64 val)
>   	if (!hwpoison_filter_enable)
>   		goto inject;
>   
> -	if (!PageLRU(p) && !PageHuge(p))
> -		shake_page(p, 0);
> +	if (!PageLRU(hpage) && !PageHuge(p))
> +		shake_page(hpage, 0);
>   	/*
>   	 * This implies unable to support non-LRU pages.
>   	 */
> -	if (!PageLRU(p) && !PageHuge(p))
> +	if (!PageLRU(hpage) && !PageHuge(p))
>   		goto put_out;
>   
>   	/*
> 

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-04-24  0:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-17  2:08 [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case Naoya Horiguchi
2015-04-17  2:08 ` Naoya Horiguchi
2015-04-17  2:08 ` [PATCH 2/2] mm/hwpoison-inject: check PageLRU of hpage Naoya Horiguchi
2015-04-17  2:08   ` Naoya Horiguchi
2015-04-24  0:42   ` Dean Nelson
2015-04-24  0:42     ` Dean Nelson
2015-04-24  0:42 ` [PATCH 1/2] mm/hwpoison-inject: fix refcounting in no-injection case Dean Nelson
2015-04-24  0:42   ` Dean Nelson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.