linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held
@ 2015-08-10  6:32 Wanpeng Li
  2015-08-10  8:10 ` Naoya Horiguchi
  0 siblings, 1 reply; 5+ messages in thread
From: Wanpeng Li @ 2015-08-10  6:32 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Naoya Horiguchi, linux-mm, linux-kernel, Wanpeng Li

THP pages will get a refcount in madvise_hwpoison() w/ MF_COUNT_INCREASED 
flag, however, the refcount is still held when fail to split THP pages.

Fix it by reducing the refcount of THP pages when fail to split THP.

Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
---
 mm/memory-failure.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 8077b1c..56b8a71 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1710,6 +1710,8 @@ int soft_offline_page(struct page *page, int flags)
 		if (PageAnon(hpage) && unlikely(split_huge_page(hpage))) {
 			pr_info("soft offline: %#lx: failed to split THP\n",
 				pfn);
+			if (flags & MF_COUNT_INCREASED)
+				put_page(page);
 			return -EBUSY;
 		}
 	}
-- 
1.7.1

--
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] 5+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held
  2015-08-10  6:32 [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held Wanpeng Li
@ 2015-08-10  8:10 ` Naoya Horiguchi
  2015-08-10  8:29   ` Wanpeng Li
  0 siblings, 1 reply; 5+ messages in thread
From: Naoya Horiguchi @ 2015-08-10  8:10 UTC (permalink / raw)
  To: Wanpeng Li; +Cc: Andrew Morton, linux-mm, linux-kernel

On Mon, Aug 10, 2015 at 02:32:30PM +0800, Wanpeng Li wrote:
> THP pages will get a refcount in madvise_hwpoison() w/ MF_COUNT_INCREASED 
> flag, however, the refcount is still held when fail to split THP pages.
> 
> Fix it by reducing the refcount of THP pages when fail to split THP.
> 
> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>

It seems that the same conditional put_page() would be added to
"soft offline: %#lx page already poisoned" branch too, right?

> ---
>  mm/memory-failure.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/mm/memory-failure.c b/mm/memory-failure.c
> index 8077b1c..56b8a71 100644
> --- a/mm/memory-failure.c
> +++ b/mm/memory-failure.c
> @@ -1710,6 +1710,8 @@ int soft_offline_page(struct page *page, int flags)
>  		if (PageAnon(hpage) && unlikely(split_huge_page(hpage))) {
>  			pr_info("soft offline: %#lx: failed to split THP\n",
>  				pfn);
> +			if (flags & MF_COUNT_INCREASED)
> +				put_page(page);
>  			return -EBUSY;
>  		}
>  	}
> -- 
> 1.7.1
> 
> --
> 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>
--
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] 5+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held
  2015-08-10  8:10 ` Naoya Horiguchi
@ 2015-08-10  8:29   ` Wanpeng Li
  2015-08-10  8:50     ` Naoya Horiguchi
  0 siblings, 1 reply; 5+ messages in thread
From: Wanpeng Li @ 2015-08-10  8:29 UTC (permalink / raw)
  To: Naoya Horiguchi; +Cc: Andrew Morton, linux-mm, linux-kernel

Hi Naoya,

On 8/10/15 4:10 PM, Naoya Horiguchi wrote:
> On Mon, Aug 10, 2015 at 02:32:30PM +0800, Wanpeng Li wrote:
>> THP pages will get a refcount in madvise_hwpoison() w/ MF_COUNT_INCREASED
>> flag, however, the refcount is still held when fail to split THP pages.
>>
>> Fix it by reducing the refcount of THP pages when fail to split THP.
>>
>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
> It seems that the same conditional put_page() would be added to
> "soft offline: %#lx page already poisoned" branch too, right?

PageHWPoison() is just called before the soft_offline_page() in 
madvise_hwpoion(). I think the PageHWPosion()
check in soft_offline_page() makes more sense for the other 
soft_offline_page() callsites which don't have the
refcount held.

Regards,
Wanpeng Li

>
>> ---
>>   mm/memory-failure.c |    2 ++
>>   1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/mm/memory-failure.c b/mm/memory-failure.c
>> index 8077b1c..56b8a71 100644
>> --- a/mm/memory-failure.c
>> +++ b/mm/memory-failure.c
>> @@ -1710,6 +1710,8 @@ int soft_offline_page(struct page *page, int flags)
>>   		if (PageAnon(hpage) && unlikely(split_huge_page(hpage))) {
>>   			pr_info("soft offline: %#lx: failed to split THP\n",
>>   				pfn);
>> +			if (flags & MF_COUNT_INCREASED)
>> +				put_page(page);
>>   			return -EBUSY;
>>   		}
>>   	}
>> -- 
>> 1.7.1
>>
>> --
>> 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>

--
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] 5+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held
  2015-08-10  8:29   ` Wanpeng Li
@ 2015-08-10  8:50     ` Naoya Horiguchi
  2015-08-10  9:15       ` Wanpeng Li
  0 siblings, 1 reply; 5+ messages in thread
From: Naoya Horiguchi @ 2015-08-10  8:50 UTC (permalink / raw)
  To: Wanpeng Li; +Cc: Andrew Morton, linux-mm, linux-kernel

On Mon, Aug 10, 2015 at 04:29:18PM +0800, Wanpeng Li wrote:
> Hi Naoya,
> 
> On 8/10/15 4:10 PM, Naoya Horiguchi wrote:
> >On Mon, Aug 10, 2015 at 02:32:30PM +0800, Wanpeng Li wrote:
> >>THP pages will get a refcount in madvise_hwpoison() w/ MF_COUNT_INCREASED
> >>flag, however, the refcount is still held when fail to split THP pages.
> >>
> >>Fix it by reducing the refcount of THP pages when fail to split THP.
> >>
> >>Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
> >It seems that the same conditional put_page() would be added to
> >"soft offline: %#lx page already poisoned" branch too, right?
> 
> PageHWPoison() is just called before the soft_offline_page() in
> madvise_hwpoion(). I think the PageHWPosion()
> check in soft_offline_page() makes more sense for the other
> soft_offline_page() callsites which don't have the
> refcount held.

What I am worried is a race like below:

  CPU0                              CPU1

  madvise_hwpoison
  get_user_pages_fast
  PageHWPoison check (false)
                                    memory_failure
                                    TestSetPageHWPoison
  soft_offline_page
  PageHWPoison check (true)
  return -EBUSY (without put_page)

It's rare and madvise_hwpoison() is testing feature, so this never causes
real problems in production systems, so it's not a big deal.
My suggestion is maybe just for code correctness thing ...

Thanks,
Naoya Horiguchi
--
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] 5+ messages in thread

* Re: [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held
  2015-08-10  8:50     ` Naoya Horiguchi
@ 2015-08-10  9:15       ` Wanpeng Li
  0 siblings, 0 replies; 5+ messages in thread
From: Wanpeng Li @ 2015-08-10  9:15 UTC (permalink / raw)
  To: Naoya Horiguchi; +Cc: Andrew Morton, linux-mm, linux-kernel



On 8/10/15 4:50 PM, Naoya Horiguchi wrote:
> On Mon, Aug 10, 2015 at 04:29:18PM +0800, Wanpeng Li wrote:
>> Hi Naoya,
>>
>> On 8/10/15 4:10 PM, Naoya Horiguchi wrote:
>>> On Mon, Aug 10, 2015 at 02:32:30PM +0800, Wanpeng Li wrote:
>>>> THP pages will get a refcount in madvise_hwpoison() w/ MF_COUNT_INCREASED
>>>> flag, however, the refcount is still held when fail to split THP pages.
>>>>
>>>> Fix it by reducing the refcount of THP pages when fail to split THP.
>>>>
>>>> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
>>> It seems that the same conditional put_page() would be added to
>>> "soft offline: %#lx page already poisoned" branch too, right?
>> PageHWPoison() is just called before the soft_offline_page() in
>> madvise_hwpoion(). I think the PageHWPosion()
>> check in soft_offline_page() makes more sense for the other
>> soft_offline_page() callsites which don't have the
>> refcount held.
> What I am worried is a race like below:
>
>   CPU0                              CPU1
>
>   madvise_hwpoison
>   get_user_pages_fast
>   PageHWPoison check (false)
>                                     memory_failure
>                                     TestSetPageHWPoison
>   soft_offline_page
>   PageHWPoison check (true)
>   return -EBUSY (without put_page)

Indeed, there is a race even through it is rared happen.

>
> It's rare and madvise_hwpoison() is testing feature, so this never causes
> real problems in production systems, so it's not a big deal.
> My suggestion is maybe just for code correctness thing ...

Thanks for your proposal, I will add your suggestion in v2 and post out
after we have a uniform solution for patch 2/2. :)

Regards,
Wanpeng Li

>
> Thanks,
> Naoya Horiguchi

--
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] 5+ messages in thread

end of thread, other threads:[~2015-08-10  9:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-10  6:32 [PATCH 1/2] mm/hwpoison: fix fail to split THP w/ refcount held Wanpeng Li
2015-08-10  8:10 ` Naoya Horiguchi
2015-08-10  8:29   ` Wanpeng Li
2015-08-10  8:50     ` Naoya Horiguchi
2015-08-10  9:15       ` Wanpeng Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox