diff options
author | Alex Shi <alex.shi@linaro.org> | 2017-06-08 12:11:49 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2017-06-08 12:11:49 +0800 |
commit | dfb9fdffcea66d74eb9fbe4318471450242790dd (patch) | |
tree | 5252eebc058a0df384788aad7e956b9ab06713b6 /mm | |
parent | 9fd33d009e8cc0363961601fcdf4eeae1ce624d7 (diff) | |
parent | 4bbbc769640554a216a25b2dbaa3d4d2869bbf79 (diff) |
Merge tag 'v4.4.71' into linux-linaro-lsk-v4.4
This is the 4.4.71 stable release
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory-failure.c | 8 | ||||
-rw-r--r-- | mm/mlock.c | 5 | ||||
-rw-r--r-- | mm/slub.c | 6 |
3 files changed, 9 insertions, 10 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 750b7893ee3a..43aee7ab143e 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1619,12 +1619,8 @@ static int soft_offline_huge_page(struct page *page, int flags) if (ret) { pr_info("soft offline: %#lx: migration failed %d, type %lx\n", pfn, ret, page->flags); - /* - * We know that soft_offline_huge_page() tries to migrate - * only one hugepage pointed to by hpage, so we need not - * run through the pagelist here. - */ - putback_active_hugepage(hpage); + if (!list_empty(&pagelist)) + putback_movable_pages(&pagelist); if (ret > 0) ret = -EIO; } else { diff --git a/mm/mlock.c b/mm/mlock.c index d6006b146fea..9d2e773f3a95 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -277,7 +277,7 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone) { int i; int nr = pagevec_count(pvec); - int delta_munlocked; + int delta_munlocked = -nr; struct pagevec pvec_putback; int pgrescued = 0; @@ -297,6 +297,8 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone) continue; else __munlock_isolation_failed(page); + } else { + delta_munlocked++; } /* @@ -308,7 +310,6 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone) pagevec_add(&pvec_putback, pvec->pages[i]); pvec->pages[i] = NULL; } - delta_munlocked = -nr + pagevec_count(&pvec_putback); __mod_zone_page_state(zone, NR_MLOCK, delta_munlocked); spin_unlock_irq(&zone->lru_lock); diff --git a/mm/slub.c b/mm/slub.c index 41f7cae64a49..d6fe997c0577 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -5343,6 +5343,7 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) char mbuf[64]; char *buf; struct slab_attribute *attr = to_slab_attr(slab_attrs[i]); + ssize_t len; if (!attr || !attr->store || !attr->show) continue; @@ -5367,8 +5368,9 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) buf = buffer; } - attr->show(root_cache, buf); - attr->store(s, buf, strlen(buf)); + len = attr->show(root_cache, buf); + if (len > 0) + attr->store(s, buf, len); } if (buffer) |