Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp7032384imm; Tue, 24 Jul 2018 07:20:51 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcuqgnYAHlUdcsuFAa4PQrClt//9puteI708ywgLe1zI/qcb/MjlGckE/wb/+n0RfeHXPTr X-Received: by 2002:a17:902:8308:: with SMTP id bd8-v6mr17296983plb.329.1532442051692; Tue, 24 Jul 2018 07:20:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532442051; cv=none; d=google.com; s=arc-20160816; b=xHW+4e5XxSllK+QWAnO3gkeUs5wBQwSRwgUn5l2Rq/b5e4kh4hVwsr7nlMgocDBa5T 7qpKh4n3PWH0GV/uAu0TQk3VBi07/x7JEACGvjcYQE5k7PFkys0lmh3K6Vd2kH4y6LFW clESE6j7gHA/JDl1t0mvz5Ecq53yKKroWaVSVWqOVdUBMn3WX1mvmD9QJ74p5qz3+VSb hzYul4IApX0dpEDJlMVDIUECkndT14wRxHOx3I6v1CSc2mWVUMPSZFOEssbhaENw3ucK qOnKTKIjsQVIsOWU+ooDCRvqog9Yn/GWZ0ttI7KRffkCuDI1WaZvCbc5SQnlCXe+MpiH OcQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=rRQ2rfFjFEYT2Bln0s0a9PXagiKMnp1yUz/I3vCXpZ4=; b=b1NYI1m8TiRzXIffRN4EtEAlY7/vuMldOa7nC5970XtR91q8g4H0pAfPa7X3QVPm5q B0hr/5mWwWelgotcUsC1FlDuhCWf+Q0dACLPwZrrZAipJsUywOizN1H3cQsc7Q3UA6Pa BrJF7FJETEC6fbyPpLNPbBY5+ce7Fvw/FAjAjPGOMLCruOrMV6Zzym7yWWrLojMgWRO5 bar9tfQQlFHWaPhb60WsBH7xPVbv4pwphU1y5vCl49LBTH5kCuauLfSTpv8PrA+0iJWS F136swD18oi+LVz7IKqNelPVaV6NjlpbllqfICz7I2IuQl/8oKryVYxrJsKp/+mYGCJm dHgQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n34-v6si11461298pgm.28.2018.07.24.07.20.36; Tue, 24 Jul 2018 07:20:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388506AbeGXPYd (ORCPT + 99 others); Tue, 24 Jul 2018 11:24:33 -0400 Received: from mx2.suse.de ([195.135.220.15]:52332 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388445AbeGXPYd (ORCPT ); Tue, 24 Jul 2018 11:24:33 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 55FE1AD71; Tue, 24 Jul 2018 14:17:49 +0000 (UTC) Date: Tue, 24 Jul 2018 16:17:47 +0200 From: Michal Hocko To: Andrew Morton Cc: LKML , linux-mm@kvack.org, "David (ChunMing) Zhou" , Paolo Bonzini , Radim =?utf-8?B?S3LEjW3DocWZ?= , Alex Deucher , David Airlie , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Doug Ledford , Jason Gunthorpe , Mike Marciniszyn , Dennis Dalessandro , Sudeep Dutt , Ashutosh Dixit , Dimitri Sivanich , Boris Ostrovsky , Juergen Gross , =?iso-8859-1?B?Suly9G1l?= Glisse , Andrea Arcangeli , Felix Kuehling , kvm@vger.kernel.org, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-rdma@vger.kernel.org, xen-devel@lists.xenproject.org, Christian =?iso-8859-1?Q?K=F6nig?= , David Rientjes , Leon Romanovsky Subject: Re: [PATCH] mm, oom: distinguish blockable mode for mmu notifiers Message-ID: <20180724141747.GP28386@dhcp22.suse.cz> References: <20180716115058.5559-1-mhocko@kernel.org> <20180720170902.d1137060c23802d55426aa03@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180720170902.d1137060c23802d55426aa03@linux-foundation.org> User-Agent: Mutt/1.10.0 (2018-05-17) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri 20-07-18 17:09:02, Andrew Morton wrote: [...] > - Undocumented return value. > > - comment "failed to reap part..." is misleading - sounds like it's > referring to something which happened in the past, is in fact > referring to something which might happen in the future. > > - fails to call trace_finish_task_reaping() in one case > > - code duplication. > > - Increases mmap_sem hold time a little by moving > trace_finish_task_reaping() inside the locked region. So sue me ;) > > - Sharing the finish: path means that the trace event won't > distinguish between the two sources of finishing. > > Please take a look? oom_reap_task_mm should return false when __oom_reap_task_mm return false. This is what my patch did but it seems this changed by http://www.ozlabs.org/~akpm/mmotm/broken-out/mm-oom-remove-oom_lock-from-oom_reaper.patch so that one should be fixed. diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 104ef4a01a55..88657e018714 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -565,7 +565,7 @@ static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm) /* failed to reap part of the address space. Try again later */ if (!__oom_reap_task_mm(mm)) { up_read(&mm->mmap_sem); - return true; + return false; } pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n", On top of that the proposed cleanup looks as follows: diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 88657e018714..4e185a282b3d 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -541,8 +541,16 @@ bool __oom_reap_task_mm(struct mm_struct *mm) return ret; } +/* + * Reaps the address space of the give task. + * + * Returns true on success and false if none or part of the address space + * has been reclaimed and the caller should retry later. + */ static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm) { + bool ret = true; + if (!down_read_trylock(&mm->mmap_sem)) { trace_skip_task_reaping(tsk->pid); return false; @@ -555,28 +563,28 @@ static bool oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm) * down_write();up_write() cycle in exit_mmap(). */ if (test_bit(MMF_OOM_SKIP, &mm->flags)) { - up_read(&mm->mmap_sem); trace_skip_task_reaping(tsk->pid); - return true; + goto out_unlock; } trace_start_task_reaping(tsk->pid); /* failed to reap part of the address space. Try again later */ - if (!__oom_reap_task_mm(mm)) { - up_read(&mm->mmap_sem); - return false; - } + ret = __oom_reap_task_mm(mm); + if (!ret) + goto out_finish; pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n", task_pid_nr(tsk), tsk->comm, K(get_mm_counter(mm, MM_ANONPAGES)), K(get_mm_counter(mm, MM_FILEPAGES)), K(get_mm_counter(mm, MM_SHMEMPAGES))); +out_finish: + trace_finish_task_reaping(tsk->pid); +out_unlock: up_read(&mm->mmap_sem); - trace_finish_task_reaping(tsk->pid); - return true; + return ret; } #define MAX_OOM_REAP_RETRIES 10 -- Michal Hocko SUSE Labs