linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
	linux-mm@kvack.org, "Alex Deucher" <alexander.deucher@amd.com>,
	"Alex Thorlton" <athorlton@sgi.com>,
	"Andrea Arcangeli" <aarcange@redhat.com>,
	"Andy Lutomirski" <luto@amacapital.net>,
	"Benjamin LaHaise" <bcrl@kvack.org>,
	"Christian König" <christian.koenig@amd.com>,
	"Daniel Vetter" <daniel.vetter@intel.com>,
	"Dave Hansen" <dave.hansen@linux.intel.com>,
	"David Airlie" <airlied@linux.ie>,
	"Davidlohr Bueso" <dave@stgolabs.net>,
	"David Rientjes" <rientjes@google.com>,
	"H . Peter Anvin" <hpa@zytor.com>,
	"Hugh Dickins" <hughd@google.com>,
	"Ingo Molnar" <mingo@kernel.org>,
	"Johannes Weiner" <hannes@cmpxchg.org>,
	"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
	"Konstantin Khlebnikov" <koct9i@gmail.com>,
	linux-arch@vger.kernel.org, "Mel Gorman" <mgorman@suse.de>,
	"Oleg Nesterov" <oleg@redhat.com>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Petr Cermak" <petrcermak@chromium.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Michal Hocko" <mhocko@suse.com>
Subject: [PATCH 07/18] mm, proc: make clear_refs killable
Date: Mon, 29 Feb 2016 14:26:46 +0100	[thread overview]
Message-ID: <1456752417-9626-8-git-send-email-mhocko@kernel.org> (raw)
Message-ID: <20160229132646.iJcnX6WWDQI5pUzXOSrrFGLHN_6hXQ5_8g3D4d3p7wU@z> (raw)
In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org>

From: Michal Hocko <mhocko@suse.com>

CLEAR_REFS_MM_HIWATER_RSS and CLEAR_REFS_SOFT_DIRTY are relying on
mmap_sem for write. If the waiting task gets killed by the oom killer
and it would operate on the current's mm it would block oom_reaper from
asynchronous address space reclaim and reduce the chances of timely OOM
resolving. Wait for the lock in the killable mode and return with EINTR
if the task got killed while waiting. This will also expedite the return
to the userspace and do_exit even if the mm is remote.

Cc: Petr Cermak <petrcermak@chromium.org>
Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 fs/proc/task_mmu.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 9df431642042..fc303fa1f5c0 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
 		};
 
 		if (type == CLEAR_REFS_MM_HIWATER_RSS) {
+			if (down_write_killable(&mm->mmap_sem)) {
+				put_task_struct(task);
+				return -EINTR;
+			}
+
 			/*
 			 * Writing 5 to /proc/pid/clear_refs resets the peak
 			 * resident set size to this mm's current rss value.
 			 */
-			down_write(&mm->mmap_sem);
 			reset_mm_hiwater_rss(mm);
 			up_write(&mm->mmap_sem);
 			goto out_mm;
@@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
 				if (!(vma->vm_flags & VM_SOFTDIRTY))
 					continue;
 				up_read(&mm->mmap_sem);
-				down_write(&mm->mmap_sem);
+				if (down_write_killable(&mm->mmap_sem)) {
+					put_task_struct(task);
+					return -EINTR;
+				}
 				for (vma = mm->mmap; vma; vma = vma->vm_next) {
 					vma->vm_flags &= ~VM_SOFTDIRTY;
 					vma_set_page_prot(vma);
-- 
2.7.0


  parent reply	other threads:[~2016-02-29 13:27 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-29 13:26 [PATCH 0/18] change mmap_sem taken for write killable Michal Hocko
2016-02-29 13:26 ` Michal Hocko
2016-02-29 13:26 ` [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 13:44   ` kbuild test robot
2016-02-29 13:44     ` kbuild test robot
2016-02-29 13:44   ` kbuild test robot
2016-02-29 13:44     ` kbuild test robot
2016-03-10 15:47   ` Vlastimil Babka
2016-03-10 15:47     ` Vlastimil Babka
2016-03-10 15:56     ` Michal Hocko
2016-03-10 15:56       ` Michal Hocko
2016-02-29 13:26 ` [PATCH 02/18] mm: make vm_mmap killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11  9:59   ` Vlastimil Babka
2016-03-11  9:59     ` Vlastimil Babka
2016-03-11 12:12     ` Michal Hocko
2016-03-11 12:12       ` Michal Hocko
2016-03-11 12:43       ` Vlastimil Babka
2016-03-11 12:43         ` Vlastimil Babka
2016-03-11 12:55         ` Michal Hocko
2016-03-11 12:55           ` Michal Hocko
2016-02-29 13:26 ` [PATCH 03/18] mm: make vm_munmap killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 10:06   ` Vlastimil Babka
2016-03-11 10:06     ` Vlastimil Babka
2016-03-11 12:32     ` Michal Hocko
2016-03-11 12:32       ` Michal Hocko
2016-02-29 13:26 ` [PATCH 04/18] mm, aout: handle vm_brk failures Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 10:32   ` Vlastimil Babka
2016-03-11 10:32     ` Vlastimil Babka
2016-03-11 12:42     ` Michal Hocko
2016-03-11 12:42       ` Michal Hocko
2016-02-29 13:26 ` [PATCH 05/18] mm, elf: handle vm_brk error Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 10:35   ` Vlastimil Babka
2016-03-11 10:35     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 06/18] mm: make vm_brk killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 10:44   ` Vlastimil Babka
2016-03-11 10:44     ` Vlastimil Babka
2016-02-29 13:26 ` Michal Hocko [this message]
2016-02-29 13:26   ` [PATCH 07/18] mm, proc: make clear_refs killable Michal Hocko
2016-02-29 13:47   ` kbuild test robot
2016-02-29 13:47     ` kbuild test robot
2016-02-29 17:38   ` Oleg Nesterov
2016-02-29 17:38     ` Oleg Nesterov
2016-02-29 17:53     ` Michal Hocko
2016-02-29 17:53       ` Michal Hocko
2016-02-29 17:58       ` Oleg Nesterov
2016-02-29 17:58         ` Oleg Nesterov
2016-02-29 18:02         ` Michal Hocko
2016-02-29 18:02           ` Michal Hocko
2016-02-29 13:26 ` [PATCH 08/18] mm, fork: make dup_mmap wait for mmap_sem for write killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 13:48   ` kbuild test robot
2016-02-29 13:48     ` kbuild test robot
2016-02-29 17:54   ` Oleg Nesterov
2016-02-29 17:54     ` Oleg Nesterov
2016-02-29 13:26 ` [PATCH 09/18] ipc, shm: make shmem attach/detach wait for mmap_sem killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-08 19:15   ` Davidlohr Bueso
2016-03-08 19:15     ` Davidlohr Bueso
2016-03-09 10:16     ` Michal Hocko
2016-03-09 10:16       ` Michal Hocko
2016-02-29 13:26 ` [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 13:45   ` kbuild test robot
2016-02-29 13:45     ` kbuild test robot
2016-02-29 13:50   ` kbuild test robot
2016-02-29 13:50     ` kbuild test robot
2016-02-29 13:53   ` kbuild test robot
2016-02-29 13:53     ` kbuild test robot
2016-02-29 15:41   ` Andy Lutomirski
2016-02-29 15:41     ` Andy Lutomirski
2016-03-11 11:28   ` Vlastimil Babka
2016-03-11 11:28     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 11/18] coredump: make coredump_wait wait for mma_sem " Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 15:57   ` Oleg Nesterov
2016-02-29 15:57     ` Oleg Nesterov
2016-03-11 11:32   ` Vlastimil Babka
2016-03-11 11:32     ` Vlastimil Babka
2016-03-11 11:54     ` Vlastimil Babka
2016-03-11 11:54       ` Vlastimil Babka
2016-03-11 12:46       ` Michal Hocko
2016-03-11 12:46         ` Michal Hocko
2016-02-29 13:26 ` [PATCH 12/18] aio: make aio_setup_ring killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 16:17   ` Jeff Moyer
2016-02-29 16:17     ` Jeff Moyer
2016-03-11 11:57   ` Vlastimil Babka
2016-03-11 11:57     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 17:23   ` Oleg Nesterov
2016-02-29 17:23     ` Oleg Nesterov
2016-02-29 17:47     ` Michal Hocko
2016-02-29 17:47       ` Michal Hocko
2016-02-29 18:10       ` Oleg Nesterov
2016-02-29 18:10         ` Oleg Nesterov
2016-03-11 12:51   ` Vlastimil Babka
2016-03-11 12:51     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 14/18] prctl: make PR_SET_THP_DISABLE wait " Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 12:54   ` Vlastimil Babka
2016-03-11 12:54     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 15/18] uprobes: wait for mmap_sem for write killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 15:57   ` Oleg Nesterov
2016-02-29 15:57     ` Oleg Nesterov
2016-02-29 16:28     ` Michal Hocko
2016-02-29 16:28       ` Michal Hocko
2016-02-29 17:12       ` Oleg Nesterov
2016-02-29 17:12         ` Oleg Nesterov
2016-02-29 13:26 ` [PATCH 16/18] drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 15:23   ` Vlastimil Babka
2016-03-11 15:23     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 17/18] drm/radeon: make radeon_mn_get " Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-02-29 13:35   ` Christian König
2016-02-29 13:35     ` Christian König
2016-03-11 15:27   ` Vlastimil Babka
2016-03-11 15:27     ` Vlastimil Babka
2016-02-29 13:26 ` [PATCH 18/18] drm/amdgpu: make amdgpu_mn_get " Michal Hocko
2016-02-29 13:26   ` Michal Hocko
2016-03-11 15:29   ` Vlastimil Babka
2016-03-11 15:29     ` Vlastimil Babka
2016-02-29 13:31 ` [PATCH 0/18] change mmap_sem taken for write killable Michal Hocko
2016-02-29 13:31   ` Michal Hocko
2016-02-29 14:04 ` Kirill A. Shutemov
2016-02-29 14:04   ` Kirill A. Shutemov
2016-02-29 14:16   ` Michal Hocko
2016-02-29 14:16     ` Michal Hocko
2016-02-29 15:03     ` Kirill A. Shutemov
2016-02-29 15:03       ` Kirill A. Shutemov

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=1456752417-9626-8-git-send-email-mhocko@kernel.org \
    --to=mhocko@kernel.org \
    --cc=aarcange@redhat.com \
    --cc=airlied@linux.ie \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.deucher@amd.com \
    --cc=athorlton@sgi.com \
    --cc=bcrl@kvack.org \
    --cc=christian.koenig@amd.com \
    --cc=daniel.vetter@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave@stgolabs.net \
    --cc=hannes@cmpxchg.org \
    --cc=hpa@zytor.com \
    --cc=hughd@google.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=koct9i@gmail.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@amacapital.net \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.com \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=petrcermak@chromium.org \
    --cc=rientjes@google.com \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).