From: Greg Kroah-Hartman Date: Mon, 15 Aug 2016 19:08:36 +0000 (+0200) Subject: updated 4.4 memcontrol patches X-Git-Tag: v3.14.76~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=14ca91313e0f60232a19c51fc6651d6f4ffa738e;p=thirdparty%2Fkernel%2Fstable-queue.git updated 4.4 memcontrol patches --- diff --git a/queue-4.4/mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch b/queue-4.4/mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch index 84b87406e4a..6b592dd3a52 100644 --- a/queue-4.4/mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch +++ b/queue-4.4/mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch @@ -74,9 +74,9 @@ Signed-off-by: Greg Kroah-Hartman --- include/linux/memcontrol.h | 8 +++ - mm/memcontrol.c | 95 ++++++++++++++++++++++++++++++++++++--------- + mm/memcontrol.c | 91 ++++++++++++++++++++++++++++++++++++--------- mm/slab_common.c | 4 - - 3 files changed, 86 insertions(+), 21 deletions(-) + 3 files changed, 83 insertions(+), 20 deletions(-) --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -188,36 +188,32 @@ Signed-off-by: Greg Kroah-Hartman static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *memcg, int node) { struct mem_cgroup_per_node *pn; -@@ -4171,17 +4211,27 @@ static struct mem_cgroup *mem_cgroup_all - if (!memcg) - return NULL; +@@ -4178,6 +4218,12 @@ static struct mem_cgroup *mem_cgroup_all + if (memcg_wb_domain_init(memcg, GFP_KERNEL)) + goto out_free_stat; + memcg->id.id = idr_alloc(&mem_cgroup_idr, NULL, + 1, MEM_CGROUP_ID_MAX, + GFP_KERNEL); + if (memcg->id.id < 0) -+ goto out_free; ++ goto out_free_stat; + - memcg->stat = alloc_percpu(struct mem_cgroup_stat_cpu); - if (!memcg->stat) -- goto out_free; -+ goto out_idr; - - if (memcg_wb_domain_init(memcg, GFP_KERNEL)) - goto out_free_stat; - -+ idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); return memcg; out_free_stat: - free_percpu(memcg->stat); -+out_idr: -+ if (memcg->id.id > 0) -+ idr_remove(&mem_cgroup_idr, memcg->id.id); - out_free: - kfree(memcg); - return NULL; -@@ -4277,8 +4327,9 @@ mem_cgroup_css_online(struct cgroup_subs +@@ -4263,9 +4309,11 @@ mem_cgroup_css_alloc(struct cgroup_subsy + #ifdef CONFIG_CGROUP_WRITEBACK + INIT_LIST_HEAD(&memcg->cgwb_list); + #endif ++ idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); + return &memcg->css; + + free_out: ++ idr_remove(&mem_cgroup_idr, memcg->id.id); + __mem_cgroup_free(memcg); + return ERR_PTR(error); + } +@@ -4277,8 +4325,9 @@ mem_cgroup_css_online(struct cgroup_subs struct mem_cgroup *parent = mem_cgroup_from_css(css->parent); int ret; @@ -229,7 +225,7 @@ Signed-off-by: Greg Kroah-Hartman if (!parent) return 0; -@@ -4352,6 +4403,8 @@ static void mem_cgroup_css_offline(struc +@@ -4352,6 +4401,8 @@ static void mem_cgroup_css_offline(struc memcg_deactivate_kmem(memcg); wb_memcg_offline(memcg); @@ -238,7 +234,7 @@ Signed-off-by: Greg Kroah-Hartman } static void mem_cgroup_css_released(struct cgroup_subsys_state *css) -@@ -5685,6 +5738,7 @@ void mem_cgroup_swapout(struct page *pag +@@ -5685,6 +5736,7 @@ void mem_cgroup_swapout(struct page *pag if (!memcg) return; @@ -246,7 +242,7 @@ Signed-off-by: Greg Kroah-Hartman oldid = swap_cgroup_record(entry, mem_cgroup_id(memcg)); VM_BUG_ON_PAGE(oldid, page); mem_cgroup_swap_statistics(memcg, true); -@@ -5703,6 +5757,9 @@ void mem_cgroup_swapout(struct page *pag +@@ -5703,6 +5755,9 @@ void mem_cgroup_swapout(struct page *pag VM_BUG_ON(!irqs_disabled()); mem_cgroup_charge_statistics(memcg, page, -1); memcg_check_events(memcg, page); @@ -256,7 +252,7 @@ Signed-off-by: Greg Kroah-Hartman } /** -@@ -5726,7 +5783,7 @@ void mem_cgroup_uncharge_swap(swp_entry_ +@@ -5726,7 +5781,7 @@ void mem_cgroup_uncharge_swap(swp_entry_ if (!mem_cgroup_is_root(memcg)) page_counter_uncharge(&memcg->memsw, 1); mem_cgroup_swap_statistics(memcg, false); diff --git a/queue-4.4/mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch b/queue-4.4/mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch index c20f2017aef..3b3382b8fb0 100644 --- a/queue-4.4/mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch +++ b/queue-4.4/mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch @@ -17,11 +17,11 @@ Link: http://lkml.kernel.org/r/9ce297c64954a42dc90b543bc76106c4a94f07e8.14702198 Signed-off-by: Vladimir Davydov Acked-by: Michal Hocko Acked-by: Johannes Weiner -Cc: [3.19+] Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Michal Hocko Signed-off-by: Greg Kroah-Hartman + --- mm/memcontrol.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) @@ -69,7 +69,7 @@ Signed-off-by: Greg Kroah-Hartman /** * mem_cgroup_from_id - look up a memcg from a memcg id * @id: the memcg id to look up -@@ -4856,6 +4866,8 @@ static void __mem_cgroup_clear_mc(void) +@@ -4854,6 +4864,8 @@ static void __mem_cgroup_clear_mc(void) if (!mem_cgroup_is_root(mc.from)) page_counter_uncharge(&mc.from->memsw, mc.moved_swap); @@ -78,7 +78,7 @@ Signed-off-by: Greg Kroah-Hartman /* * we charged both to->memory and to->memsw, so we * should uncharge to->memory. -@@ -4863,9 +4875,9 @@ static void __mem_cgroup_clear_mc(void) +@@ -4861,9 +4873,9 @@ static void __mem_cgroup_clear_mc(void) if (!mem_cgroup_is_root(mc.to)) page_counter_uncharge(&mc.to->memory, mc.moved_swap); diff --git a/queue-4.4/mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch b/queue-4.4/mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch index 52027194623..0a47bc51799 100644 --- a/queue-4.4/mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch +++ b/queue-4.4/mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch @@ -30,6 +30,7 @@ Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Michal Hocko Signed-off-by: Greg Kroah-Hartman + --- mm/memcontrol.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) @@ -61,7 +62,7 @@ Signed-off-by: Greg Kroah-Hartman static void mem_cgroup_id_put(struct mem_cgroup *memcg) { if (atomic_dec_and_test(&memcg->id.ref)) { -@@ -5723,7 +5741,7 @@ subsys_initcall(mem_cgroup_init); +@@ -5721,7 +5739,7 @@ subsys_initcall(mem_cgroup_init); */ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) { @@ -70,7 +71,7 @@ Signed-off-by: Greg Kroah-Hartman unsigned short oldid; VM_BUG_ON_PAGE(PageLRU(page), page); -@@ -5738,16 +5756,27 @@ void mem_cgroup_swapout(struct page *pag +@@ -5736,16 +5754,27 @@ void mem_cgroup_swapout(struct page *pag if (!memcg) return; diff --git a/queue-4.4/series b/queue-4.4/series index 1ffd0b1cff5..7059f87fba8 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -29,9 +29,6 @@ x86-xen-pat-remove-pat-table-init-code-from-xen.patch x86-pat-document-the-pat-initialization-sequence.patch x86-mm-pat-fix-bug_on-in-mmap_mem-on-qemu-i386.patch drm-i915-pretend-cursor-is-always-on-for-ilk-style-wm-calculations-v2.patch -mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch -mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch -mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch x86-syscalls-64-add-compat_sys_keyctl-for-32-bit-userspace.patch block-fix-use-after-free-in-seq-file.patch sysv-ipc-fix-security-layer-leaking.patch @@ -47,3 +44,6 @@ ext4-don-t-call-ext4_should_journal_data-on-the-journal-inode.patch ext4-validate-s_reserved_gdt_blocks-on-mount.patch ext4-short-cut-orphan-cleanup-on-error.patch ext4-fix-reference-counting-bug-on-block-allocation-error.patch +mm-memcontrol-fix-cgroup-creation-failure-after-many-small-jobs.patch +mm-memcontrol-fix-swap-counter-leak-on-swapout-from-offline-cgroup.patch +mm-memcontrol-fix-memcg-id-ref-counter-on-swap-charge-move.patch