Hi Andrew Morton, The following message should be cc'ed to you. This is my negligence. thx! cyc On Wed, 2014-06-04 at 02:41 -0400, Naoya Horiguchi wrote: > On Wed, Jun 04, 2014 at 01:48:18PM +0800, Chen Yucong wrote: > > Until now, the kernel has the same policy to handle victimized page frames that > > belong to kernel-space(reserved/slab-subsystem) or non-LRU(unknown page state). > > In other word, the result of handling either of these victimized page frames is > > (IGNORED | FAILED), and the return value of memory_failure() is -EBUSY. > > > > This patch is to avoid that memory_failure() returns very soon due to the "true" > > value of (!PageLRU(p)), and it also ensures that action_result() can report more > > precise information("reserved kernel", "kernel slab", and "unknown page state") > > instead of "non LRU", especially for memory errors which are detected by memory-scrubbing. > > > > Changes since v1: http://www.spinics.net/lists/linux-mm/msg74044.html > > - Call goto just after if (hwpoison_filter(p)) block, and jump directly to just > > before the code determining the page_state, as suggested by Naoya Horiguchi. > > > > Signed-off-by: Chen Yucong <slaoub@xxxxxxxxx> > > Looks good to me, thanks! > > Acked-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> > > > --- > > mm/memory-failure.c | 9 +++++---- > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > > index e3154d9..1340b30 100644 > > --- a/mm/memory-failure.c > > +++ b/mm/memory-failure.c > > @@ -862,7 +862,7 @@ static int hwpoison_user_mappings(struct page *p, unsigned long pfn, > > struct page *hpage = *hpagep; > > struct page *ppage; > > > > - if (PageReserved(p) || PageSlab(p)) > > + if (PageReserved(p) || PageSlab(p) || !PageLRU(p)) > > return SWAP_SUCCESS; > > > > /* > > @@ -1126,9 +1126,6 @@ int memory_failure(unsigned long pfn, int trapno, int flags) > > action_result(pfn, "free buddy, 2nd try", DELAYED); > > return 0; > > } > > - action_result(pfn, "non LRU", IGNORED); > > - put_page(p); > > - return -EBUSY; > > } > > } > > > > @@ -1161,6 +1158,9 @@ int memory_failure(unsigned long pfn, int trapno, int flags) > > return 0; > > } > > > > + if (!PageHuge(p) && !PageTransTail(p) && !PageLRU(p)) > > + goto identify_page_state; > > + > > /* > > * For error on the tail page, we should set PG_hwpoison > > * on the head page to show that the hugepage is hwpoisoned > > @@ -1210,6 +1210,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) > > goto out; > > } > > > > +identify_page_state: > > res = -EBUSY; > > /* > > * The first check uses the current page flags which may not have any > > -- > > 1.7.10.4 > > > > -- > > To unsubscribe, send a message with 'unsubscribe linux-mm' in > > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > > see: http://www.linux-mm.org/ . > > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>