All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@kernel.org>
To: <linux-mm@kvack.org>, Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Michal Hocko <mhocko@suse.com>, Oleg Nesterov <oleg@redhat.com>,
	Vlastimil Babka <vbabka@suse.cz>
Subject: [PATCH 11/18] coredump: make coredump_wait wait for mmap_sem for write killable
Date: Tue, 26 Apr 2016 14:56:18 +0200	[thread overview]
Message-ID: <1461675385-5934-12-git-send-email-mhocko@kernel.org> (raw)
In-Reply-To: <1461675385-5934-1-git-send-email-mhocko@kernel.org>

From: Michal Hocko <mhocko@suse.com>

coredump_wait waits for mmap_sem for write currently which can
prevent oom_reaper to reclaim the oom victims address space
asynchronously because that requires mmap_sem for read. This might
happen if the oom victim is multi threaded and some thread(s) is
holding mmap_sem for read (e.g. page fault) and it is stuck in
the page allocator while other thread(s) reached coredump_wait
already.

This patch simply uses down_write_killable and bails out with EINTR
if the lock got interrupted by the fatal signal. do_coredump will
return right away and do_group_exit will take care to zap the whole
thread group.

Acked-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 fs/coredump.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/coredump.c b/fs/coredump.c
index 47c32c3bfa1d..f2cef927789b 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -413,7 +413,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
 	core_state->dumper.task = tsk;
 	core_state->dumper.next = NULL;
 
-	down_write(&mm->mmap_sem);
+	if (down_write_killable(&mm->mmap_sem))
+		return -EINTR;
+
 	if (!mm->core_state)
 		core_waiters = zap_threads(tsk, mm, core_state, exit_code);
 	up_write(&mm->mmap_sem);
-- 
2.8.0.rc3

WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org>
To: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Michal Hocko <mhocko@suse.com>, Oleg Nesterov <oleg@redhat.com>,
	Vlastimil Babka <vbabka@suse.cz>
Subject: [PATCH 11/18] coredump: make coredump_wait wait for mmap_sem for write killable
Date: Tue, 26 Apr 2016 14:56:18 +0200	[thread overview]
Message-ID: <1461675385-5934-12-git-send-email-mhocko@kernel.org> (raw)
In-Reply-To: <1461675385-5934-1-git-send-email-mhocko@kernel.org>

From: Michal Hocko <mhocko@suse.com>

coredump_wait waits for mmap_sem for write currently which can
prevent oom_reaper to reclaim the oom victims address space
asynchronously because that requires mmap_sem for read. This might
happen if the oom victim is multi threaded and some thread(s) is
holding mmap_sem for read (e.g. page fault) and it is stuck in
the page allocator while other thread(s) reached coredump_wait
already.

This patch simply uses down_write_killable and bails out with EINTR
if the lock got interrupted by the fatal signal. do_coredump will
return right away and do_group_exit will take care to zap the whole
thread group.

Acked-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 fs/coredump.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/coredump.c b/fs/coredump.c
index 47c32c3bfa1d..f2cef927789b 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -413,7 +413,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
 	core_state->dumper.task = tsk;
 	core_state->dumper.next = NULL;
 
-	down_write(&mm->mmap_sem);
+	if (down_write_killable(&mm->mmap_sem))
+		return -EINTR;
+
 	if (!mm->core_state)
 		core_waiters = zap_threads(tsk, mm, core_state, exit_code);
 	up_write(&mm->mmap_sem);
-- 
2.8.0.rc3

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2016-04-26 12:56 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-26 12:56 [PATCH 0/18] change mmap_sem taken for write killable v2 Michal Hocko
2016-04-26 12:56 ` Michal Hocko
2016-04-26 12:56 ` [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 02/18] mm: make vm_mmap killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 03/18] mm: make vm_munmap killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 04/18] mm, aout: handle vm_brk failures Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 05/18] mm, elf: handle vm_brk error Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 06/18] mm: make vm_brk killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 07/18] mm, proc: make clear_refs killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 08/18] mm, fork: make dup_mmap wait for mmap_sem for write killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 09/18] ipc, shm: make shmem attach/detach wait for mmap_sem killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` Michal Hocko [this message]
2016-04-26 12:56   ` [PATCH 11/18] coredump: make coredump_wait " Michal Hocko
2016-04-26 12:56 ` [PATCH 12/18] aio: make aio_setup_ring killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 14/18] prctl: make PR_SET_THP_DISABLE wait " Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 15:18   ` Alex Thorlton
2016-04-26 15:18     ` Alex Thorlton
2016-04-26 12:56 ` [PATCH 15/18] uprobes: wait for mmap_sem for write killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 16/18] drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 17/18] drm/radeon: make radeon_mn_get " Michal Hocko
2016-04-26 12:56   ` Michal Hocko
2016-04-26 12:56 ` [PATCH 18/18] drm/amdgpu: make amdgpu_mn_get " Michal Hocko
2016-04-26 12:56   ` Michal Hocko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1461675385-5934-12-git-send-email-mhocko@kernel.org \
    --to=mhocko@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.com \
    --cc=oleg@redhat.com \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.