From f9f2d4777c0125c02e2bafa7175767278a129446 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Thu, 15 Sep 2016 09:50:04 -0700 Subject: Linux v4.7.4 --- ...ce-read-locked-section-of-cgroup_threadgr.patch | 112 --------------------- kernel.spec | 8 +- sources | 2 +- 3 files changed, 5 insertions(+), 117 deletions(-) delete mode 100644 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch diff --git a/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch b/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch deleted file mode 100644 index daad25310..000000000 --- a/0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 568ac888215c7fb2fabe8ea739b00ec3c1f5d440 Mon Sep 17 00:00:00 2001 -From: Balbir Singh -Date: Wed, 10 Aug 2016 15:43:06 -0400 -Subject: [PATCH] cgroup: reduce read locked section of - cgroup_threadgroup_rwsem during fork - -cgroup_threadgroup_rwsem is acquired in read mode during process exit -and fork. It is also grabbed in write mode during -__cgroups_proc_write(). I've recently run into a scenario with lots -of memory pressure and OOM and I am beginning to see - -systemd - - __switch_to+0x1f8/0x350 - __schedule+0x30c/0x990 - schedule+0x48/0xc0 - percpu_down_write+0x114/0x170 - __cgroup_procs_write.isra.12+0xb8/0x3c0 - cgroup_file_write+0x74/0x1a0 - kernfs_fop_write+0x188/0x200 - __vfs_write+0x6c/0xe0 - vfs_write+0xc0/0x230 - SyS_write+0x6c/0x110 - system_call+0x38/0xb4 - -This thread is waiting on the reader of cgroup_threadgroup_rwsem to -exit. The reader itself is under memory pressure and has gone into -reclaim after fork. There are times the reader also ends up waiting on -oom_lock as well. - - __switch_to+0x1f8/0x350 - __schedule+0x30c/0x990 - schedule+0x48/0xc0 - jbd2_log_wait_commit+0xd4/0x180 - ext4_evict_inode+0x88/0x5c0 - evict+0xf8/0x2a0 - dispose_list+0x50/0x80 - prune_icache_sb+0x6c/0x90 - super_cache_scan+0x190/0x210 - shrink_slab.part.15+0x22c/0x4c0 - shrink_zone+0x288/0x3c0 - do_try_to_free_pages+0x1dc/0x590 - try_to_free_pages+0xdc/0x260 - __alloc_pages_nodemask+0x72c/0xc90 - alloc_pages_current+0xb4/0x1a0 - page_table_alloc+0xc0/0x170 - __pte_alloc+0x58/0x1f0 - copy_page_range+0x4ec/0x950 - copy_process.isra.5+0x15a0/0x1870 - _do_fork+0xa8/0x4b0 - ppc_clone+0x8/0xc - -In the meanwhile, all processes exiting/forking are blocked almost -stalling the system. - -This patch moves the threadgroup_change_begin from before -cgroup_fork() to just before cgroup_canfork(). There is no nee to -worry about threadgroup changes till the task is actually added to the -threadgroup. This avoids having to call reclaim with -cgroup_threadgroup_rwsem held. - -tj: Subject and description edits. - -Signed-off-by: Balbir Singh -Acked-by: Zefan Li -Cc: Oleg Nesterov -Cc: Andrew Morton -Cc: stable@vger.kernel.org # v4.2+ -Signed-off-by: Tejun Heo ---- - kernel/fork.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/kernel/fork.c b/kernel/fork.c -index 52e725d..aaf7823 100644 ---- a/kernel/fork.c -+++ b/kernel/fork.c -@@ -1404,7 +1404,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, - p->real_start_time = ktime_get_boot_ns(); - p->io_context = NULL; - p->audit_context = NULL; -- threadgroup_change_begin(current); - cgroup_fork(p); - #ifdef CONFIG_NUMA - p->mempolicy = mpol_dup(p->mempolicy); -@@ -1556,6 +1555,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, - INIT_LIST_HEAD(&p->thread_group); - p->task_works = NULL; - -+ threadgroup_change_begin(current); - /* - * Ensure that the cgroup subsystem policies allow the new process to be - * forked. It should be noted the the new process's css_set can be changed -@@ -1656,6 +1656,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, - bad_fork_cancel_cgroup: - cgroup_cancel_fork(p); - bad_fork_free_pid: -+ threadgroup_change_end(current); - if (pid != &init_struct_pid) - free_pid(pid); - bad_fork_cleanup_thread: -@@ -1688,7 +1689,6 @@ bad_fork_cleanup_policy: - mpol_put(p->mempolicy); - bad_fork_cleanup_threadgroup_lock: - #endif -- threadgroup_change_end(current); - delayacct_tsk_free(p); - bad_fork_cleanup_count: - atomic_dec(&p->cred->user->processes); --- -2.7.4 - diff --git a/kernel.spec b/kernel.spec index 94a008dd4..268e381db 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 3 +%define stable_update 4 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -634,9 +634,6 @@ Patch858: 0001-OOM-detection-regressions-since-4.7.patch #rhbz 1360688 Patch859: rc-core-fix-repeat-events.patch -# https://lkml.org/lkml/2016/8/30/566 -Patch861: 0001-cgroup-reduce-read-locked-section-of-cgroup_threadgr.patch - #rhbz 1350174 Patch862: tip-x86-boot-x86-KASLR-x86-power-Remove-x86-hibernation-restrictions.patch @@ -2173,6 +2170,9 @@ fi # # %changelog +* Thu Sep 15 2016 Laura Abbott - 4.7.4-200 +- Linux v4.7.4 + * Wed Sep 14 2016 Laura Abbott - Fix for incorrect return checking in cpupower (rhbz 1374212) - Let iio tools build on older kernels diff --git a/sources b/sources index c33fe9c55..9c36889c8 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 5276563eb1f39a048e4a8a887408c031 linux-4.7.tar.xz fe259c02c75eec61d1aa4b1211f3c853 perf-man-4.7.tar.gz -803bdedd9b9cd4ef43d9d5d41801f234 patch-4.7.3.xz +150cff5d90bd90217848974269a770ee patch-4.7.4.xz -- cgit