diff for duplicates of <20111115173656.GJ27150@suse.de> diff --git a/a/1.txt b/N1/1.txt index b8c41ab..a3280ea 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -8,19 +8,19 @@ On Wed, Nov 16, 2011 at 01:13:30AM +0900, Minchan Kim wrote: > > > > Colin Cross reported; > > -> > Under the following conditions, __alloc_pages_slowpath can loop forever: -> > gfp_mask & __GFP_WAIT is true -> > gfp_mask & __GFP_FS is false -> > reclaim and compaction make no progress -> > order <= PAGE_ALLOC_COSTLY_ORDER +> > Under the following conditions, __alloc_pages_slowpath can loop forever: +> > gfp_mask & __GFP_WAIT is true +> > gfp_mask & __GFP_FS is false +> > reclaim and compaction make no progress +> > order <= PAGE_ALLOC_COSTLY_ORDER > > -> > These conditions happen very often during suspend and resume, -> > when pm_restrict_gfp_mask() effectively converts all GFP_KERNEL -> > allocations into __GFP_WAIT. +> > These conditions happen very often during suspend and resume, +> > when pm_restrict_gfp_mask() effectively converts all GFP_KERNEL +> > allocations into __GFP_WAIT. > > -> > The oom killer is not run because gfp_mask & __GFP_FS is false, -> > but should_alloc_retry will always return true when order is less -> > than PAGE_ALLOC_COSTLY_ORDER. +> > The oom killer is not run because gfp_mask & __GFP_FS is false, +> > but should_alloc_retry will always return true when order is less +> > than PAGE_ALLOC_COSTLY_ORDER. > > > > In his fix, he avoided retrying the allocation if reclaim made no > > progress and __GFP_FS was not set. The problem is that this would @@ -31,7 +31,7 @@ On Wed, Nov 16, 2011 at 01:13:30AM +0900, Minchan Kim wrote: > > to behave like GFP_NOIO is that normally flushers will be cleaning > > pages and kswapd reclaims pages allowing GFP_NOIO to succeed after > > a short delay. The same does not necessarily apply during suspend as -> > the storage device may be suspended. Hence, this patch special cases +> > the storage device may be suspended. Hence, this patch special cases > > the suspend case to fail the page allocation if reclaim cannot make > > progress. This might cause suspend to abort but that is better than > > a livelock. @@ -40,49 +40,49 @@ On Wed, Nov 16, 2011 at 01:13:30AM +0900, Minchan Kim wrote: > > Reported-and-tested-by: Colin Cross <ccross@android.com> > > Signed-off-by: Mel Gorman <mgorman@suse.de> > > --- -> > mm/page_alloc.c | 22 ++++++++++++++++++++++ -> > 1 files changed, 22 insertions(+), 0 deletions(-) +> > mm/page_alloc.c | 22 ++++++++++++++++++++++ +> > 1 files changed, 22 insertions(+), 0 deletions(-) > > > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > > index 9dd443d..5402897 100644 > > --- a/mm/page_alloc.c > > +++ b/mm/page_alloc.c > > @@ -127,6 +127,20 @@ void pm_restrict_gfp_mask(void) -> > saved_gfp_mask = gfp_allowed_mask; -> > gfp_allowed_mask &= ~GFP_IOFS; -> > } +> > saved_gfp_mask = gfp_allowed_mask; +> > gfp_allowed_mask &= ~GFP_IOFS; +> > } > > + > > +static bool pm_suspending(void) > > +{ -> > + if ((gfp_allowed_mask & GFP_IOFS) == GFP_IOFS) -> > + return false; -> > + return true; +> > + if ((gfp_allowed_mask & GFP_IOFS) == GFP_IOFS) +> > + return false; +> > + return true; > > +} > > + > > +#else > > + > > +static bool pm_suspending(void) > > +{ -> > + return false; +> > + return false; > > +} -> > #endif /* CONFIG_PM_SLEEP */ +> > #endif /* CONFIG_PM_SLEEP */ > > -> > #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE +> > #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE > > @@ -2214,6 +2228,14 @@ rebalance: > > -> > goto restart; -> > } +> > goto restart; +> > } > > + -> > + /* -> > + * Suspend converts GFP_KERNEL to __GFP_WAIT which can -> > + * prevent reclaim making forward progress without -> > + * invoking OOM. Bail if we are suspending -> > + */ -> > + if (pm_suspending()) -> > + goto nopage; -> > } +> > + /* +> > + * Suspend converts GFP_KERNEL to __GFP_WAIT which can +> > + * prevent reclaim making forward progress without +> > + * invoking OOM. Bail if we are suspending +> > + */ +> > + if (pm_suspending()) +> > + goto nopage; +> > } > > -> > /* Check if we should retry the allocation */ +> > /* Check if we should retry the allocation */ > > > > I don't have much time to look into this problem so I miss some things. @@ -139,3 +139,10 @@ pm_suspended_storage() test. -- Mel Gorman SUSE Labs + +-- +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/ . +Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ +Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> diff --git a/a/content_digest b/N1/content_digest index 691a1d0..e9f33c2 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -24,19 +24,19 @@ "> >\n" "> > Colin Cross reported;\n" "> >\n" - "> > \302\240Under the following conditions, __alloc_pages_slowpath can loop forever:\n" - "> > \302\240gfp_mask & __GFP_WAIT is true\n" - "> > \302\240gfp_mask & __GFP_FS is false\n" - "> > \302\240reclaim and compaction make no progress\n" - "> > \302\240order <= PAGE_ALLOC_COSTLY_ORDER\n" + "> > Under the following conditions, __alloc_pages_slowpath can loop forever:\n" + "> > gfp_mask & __GFP_WAIT is true\n" + "> > gfp_mask & __GFP_FS is false\n" + "> > reclaim and compaction make no progress\n" + "> > order <= PAGE_ALLOC_COSTLY_ORDER\n" "> >\n" - "> > \302\240These conditions happen very often during suspend and resume,\n" - "> > \302\240when pm_restrict_gfp_mask() effectively converts all GFP_KERNEL\n" - "> > \302\240allocations into __GFP_WAIT.\n" + "> > These conditions happen very often during suspend and resume,\n" + "> > when pm_restrict_gfp_mask() effectively converts all GFP_KERNEL\n" + "> > allocations into __GFP_WAIT.\n" "> >\n" - "> > \302\240The oom killer is not run because gfp_mask & __GFP_FS is false,\n" - "> > \302\240but should_alloc_retry will always return true when order is less\n" - "> > \302\240than PAGE_ALLOC_COSTLY_ORDER.\n" + "> > The oom killer is not run because gfp_mask & __GFP_FS is false,\n" + "> > but should_alloc_retry will always return true when order is less\n" + "> > than PAGE_ALLOC_COSTLY_ORDER.\n" "> >\n" "> > In his fix, he avoided retrying the allocation if reclaim made no\n" "> > progress and __GFP_FS was not set. The problem is that this would\n" @@ -47,7 +47,7 @@ "> > to behave like GFP_NOIO is that normally flushers will be cleaning\n" "> > pages and kswapd reclaims pages allowing GFP_NOIO to succeed after\n" "> > a short delay. The same does not necessarily apply during suspend as\n" - "> > the storage device may be suspended. \302\240Hence, this patch special cases\n" + "> > the storage device may be suspended. Hence, this patch special cases\n" "> > the suspend case to fail the page allocation if reclaim cannot make\n" "> > progress. This might cause suspend to abort but that is better than\n" "> > a livelock.\n" @@ -56,49 +56,49 @@ "> > Reported-and-tested-by: Colin Cross <ccross@android.com>\n" "> > Signed-off-by: Mel Gorman <mgorman@suse.de>\n" "> > ---\n" - "> > \302\240mm/page_alloc.c | \302\240 22 ++++++++++++++++++++++\n" - "> > \302\2401 files changed, 22 insertions(+), 0 deletions(-)\n" + "> > mm/page_alloc.c | 22 ++++++++++++++++++++++\n" + "> > 1 files changed, 22 insertions(+), 0 deletions(-)\n" "> >\n" "> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c\n" "> > index 9dd443d..5402897 100644\n" "> > --- a/mm/page_alloc.c\n" "> > +++ b/mm/page_alloc.c\n" "> > @@ -127,6 +127,20 @@ void pm_restrict_gfp_mask(void)\n" - "> > \302\240 \302\240 \302\240 \302\240saved_gfp_mask = gfp_allowed_mask;\n" - "> > \302\240 \302\240 \302\240 \302\240gfp_allowed_mask &= ~GFP_IOFS;\n" - "> > \302\240}\n" + "> > saved_gfp_mask = gfp_allowed_mask;\n" + "> > gfp_allowed_mask &= ~GFP_IOFS;\n" + "> > }\n" "> > +\n" "> > +static bool pm_suspending(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 if ((gfp_allowed_mask & GFP_IOFS) == GFP_IOFS)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 return false;\n" - "> > + \302\240 \302\240 \302\240 return true;\n" + "> > + if ((gfp_allowed_mask & GFP_IOFS) == GFP_IOFS)\n" + "> > + return false;\n" + "> > + return true;\n" "> > +}\n" "> > +\n" "> > +#else\n" "> > +\n" "> > +static bool pm_suspending(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 return false;\n" + "> > + return false;\n" "> > +}\n" - "> > \302\240#endif /* CONFIG_PM_SLEEP */\n" + "> > #endif /* CONFIG_PM_SLEEP */\n" "> >\n" - "> > \302\240#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE\n" + "> > #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE\n" "> > @@ -2214,6 +2228,14 @@ rebalance:\n" "> >\n" - "> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240goto restart;\n" - "> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240}\n" + "> > goto restart;\n" + "> > }\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 /*\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240* Suspend converts GFP_KERNEL to __GFP_WAIT which can\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240* prevent reclaim making forward progress without\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240* invoking OOM. Bail if we are suspending\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240*/\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (pm_suspending())\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 goto nopage;\n" - "> > \302\240 \302\240 \302\240 \302\240}\n" + "> > + /*\n" + "> > + * Suspend converts GFP_KERNEL to __GFP_WAIT which can\n" + "> > + * prevent reclaim making forward progress without\n" + "> > + * invoking OOM. Bail if we are suspending\n" + "> > + */\n" + "> > + if (pm_suspending())\n" + "> > + goto nopage;\n" + "> > }\n" "> >\n" - "> > \302\240 \302\240 \302\240 \302\240/* Check if we should retry the allocation */\n" + "> > /* Check if we should retry the allocation */\n" "> >\n" "> \n" "> I don't have much time to look into this problem so I miss some things.\n" @@ -154,6 +154,13 @@ "\n" "-- \n" "Mel Gorman\n" - SUSE Labs + "SUSE Labs\n" + "\n" + "--\n" + "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n" + "the body to majordomo@kvack.org. For more info on Linux MM,\n" + "see: http://www.linux-mm.org/ .\n" + "Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/\n" + "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>" -edd0682cd787cfe8c60b1dfd4692e011604bb62b8c5f6aac04e8a102f37db2d0 +3fbd15f0e34ee348ad0b4cb67c4315225934c3f3879000f11bd6442901987c9b
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.