Linux v4.7.4
This commit is contained in:
parent
1eab470c4d
commit
f9f2d4777c
|
@ -1,112 +0,0 @@
|
|||
From 568ac888215c7fb2fabe8ea739b00ec3c1f5d440 Mon Sep 17 00:00:00 2001
|
||||
From: Balbir Singh <bsingharora@gmail.com>
|
||||
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 <bsingharora@gmail.com>
|
||||
Acked-by: Zefan Li <lizefan@huawei.com>
|
||||
Cc: Oleg Nesterov <oleg@redhat.com>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
Cc: stable@vger.kernel.org # v4.2+
|
||||
Signed-off-by: Tejun Heo <tj@kernel.org>
|
||||
---
|
||||
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
|
||||
|
|
@ -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 <labbott@fedoraproject.org> - 4.7.4-200
|
||||
- Linux v4.7.4
|
||||
|
||||
* Wed Sep 14 2016 Laura Abbott <labbott@fedoraproject.org>
|
||||
- Fix for incorrect return checking in cpupower (rhbz 1374212)
|
||||
- Let iio tools build on older kernels
|
||||
|
|
Loading…
Reference in New Issue