Messages in this thread | | | Date | Thu, 6 Apr 2017 15:39:03 +0200 | From | Michal Hocko <> | Subject | Re: [patch for-4.11] mm, thp: fix setting of defer+madvise thp defrag mode |
| |
On Wed 05-04-17 18:17:42, David Rientjes wrote: > Setting thp defrag mode of "defer+madvise" actually sets "defer" in the > kernel due to the name similarity and the out-of-order way the string is > checked in defrag_store(). > > Check the string in the correct order so that > TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG is set appropriately for > "defer+madvise". > > Fixes: 21440d7eb904 ("mm, thp: add new defer+madvise defrag option") > Signed-off-by: David Rientjes <rientjes@google.com>
Acked-by: Michal Hocko <mhocko@suse.com>
I will just note that this wouldn't be necessary if you didn't ignore the review feedback from Vlastimil [1].
[1] http://lkml.kernel.org/r/2099d74d-fa2c-e67e-b528-66598d072329@suse.cz
> --- > mm/huge_memory.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -240,18 +240,18 @@ static ssize_t defrag_store(struct kobject *kobj, > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG, &transparent_hugepage_flags); > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, &transparent_hugepage_flags); > set_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags); > - } else if (!memcmp("defer", buf, > - min(sizeof("defer")-1, count))) { > - clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags); > - clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG, &transparent_hugepage_flags); > - clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, &transparent_hugepage_flags); > - set_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG, &transparent_hugepage_flags); > } else if (!memcmp("defer+madvise", buf, > min(sizeof("defer+madvise")-1, count))) { > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags); > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG, &transparent_hugepage_flags); > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, &transparent_hugepage_flags); > set_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG, &transparent_hugepage_flags); > + } else if (!memcmp("defer", buf, > + min(sizeof("defer")-1, count))) { > + clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags); > + clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG, &transparent_hugepage_flags); > + clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG, &transparent_hugepage_flags); > + set_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG, &transparent_hugepage_flags); > } else if (!memcmp("madvise", buf, > min(sizeof("madvise")-1, count))) { > clear_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG, &transparent_hugepage_flags);
-- Michal Hocko SUSE Labs
| |