Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp4920614imm; Tue, 7 Aug 2018 09:29:00 -0700 (PDT) X-Google-Smtp-Source: AAOMgpddZJqTwQCTnqiV38oxWSCivSo9M5mLMpBNivtEo27gTd9HFB33ZWQ6yc0qJwpFhnPRJLzW X-Received: by 2002:a17:902:904c:: with SMTP id w12-v6mr18610881plz.95.1533659340836; Tue, 07 Aug 2018 09:29:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533659340; cv=none; d=google.com; s=arc-20160816; b=VmdME9UKAf4YZfTPt7Fhp2sFZ6B/e8ZN6nDjEMA5ykKocEIpXuRXM5W5xBCyb3eVbC tRn2lUEAvPTRDMuLQZXqIghD8daxX8tyBi5EKnIMXQnihPWS/s7M93gDgV2BCwtH6aP0 yu7m9QmsYHvNxfwf3Jk01OSefszdcsQ4Dv40BmOmdcAbrL+Gf9kxcWWOV7KMo+HLz55Z 4QgvT7KXQ18FgYqYUNXv8PP8PZomaQljfgdbqcwIQU/CC8941wIMAeiCPtXyWpYDocGS UCV1noNnfCAj4iJEBBDpPef99onX2ojgmtyHAPuLmECX3wt1MymgzcJ77T+yRIBsjwCY /XEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:autocrypt:openpgp:from:references:cc:to:subject :arc-authentication-results; bh=GnofENtAIqy9H+nSfgerilKcgMpm25GYuxnhiudmQZo=; b=GZoTA+vDRWYi6Ly2i9gs2J6osVKQxbqDLaHNHdgFfZhj04fexfvrGvYuZXJLuvGH+V oaJLJFX8mDnPc6TjCDwqPE7HcjlMqbT0ECAcRjiRcl1k2F8SvtzpYqexBw4tTD3aTJig fHhN1Tcrxv569Y7PT0Fo81MJHyzBe/vpbApOY0NMfCmH826n0ysTGTzlpmNTZlyQ+zJN 0e6SYmGHBw1Ylv3NRbsBg9j9x08EL6LZ/V8IvQk5P6bEhTfGGDsHcdSbE3FyItste7IR bIFUP4HjMyQvy8Auk6I6WD7HwdFE5GHWu+5udK2x0dsIjregrLxwQS+cv7CIwjPqiccM wriQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m10-v6si1561659pfe.133.2018.08.07.09.28.46; Tue, 07 Aug 2018 09:29:00 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389844AbeHGROc (ORCPT + 99 others); Tue, 7 Aug 2018 13:14:32 -0400 Received: from mx2.suse.de ([195.135.220.15]:60208 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389544AbeHGROc (ORCPT ); Tue, 7 Aug 2018 13:14:32 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 258C5AE04; Tue, 7 Aug 2018 14:59:47 +0000 (UTC) Subject: Re: [RFC v6 PATCH 1/2] mm: refactor do_munmap() to extract the common part To: Yang Shi , mhocko@kernel.org, willy@infradead.org, ldufour@linux.vnet.ibm.com, kirill@shutemov.name, akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <1532628614-111702-1-git-send-email-yang.shi@linux.alibaba.com> <1532628614-111702-2-git-send-email-yang.shi@linux.alibaba.com> From: Vlastimil Babka Openpgp: preference=signencrypt Autocrypt: addr=vbabka@suse.cz; prefer-encrypt=mutual; keydata= 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 cqmP8roqufIAj+Ohhzs= Message-ID: <0289d239-80f1-23e1-331d-6d83f762aeb4@suse.cz> Date: Tue, 7 Aug 2018 16:59:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <1532628614-111702-2-git-send-email-yang.shi@linux.alibaba.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/26/2018 08:10 PM, Yang Shi wrote: > Introduces three new helper functions: > * munmap_addr_sanity() > * munmap_lookup_vma() > * munmap_mlock_vma() > > They will be used by do_munmap() and the new do_munmap with zapping > large mapping early in the later patch. > > There is no functional change, just code refactor. > > Reviewed-by: Laurent Dufour > Signed-off-by: Yang Shi > --- > mm/mmap.c | 120 ++++++++++++++++++++++++++++++++++++++++++-------------------- > 1 file changed, 82 insertions(+), 38 deletions(-) > > diff --git a/mm/mmap.c b/mm/mmap.c > index d1eb87e..2504094 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -2686,34 +2686,44 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, > return __split_vma(mm, vma, addr, new_below); > } > > -/* Munmap is split into 2 main parts -- this part which finds > - * what needs doing, and the areas themselves, which do the > - * work. This now handles partial unmappings. > - * Jeremy Fitzhardinge > - */ > -int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, > - struct list_head *uf) > +static inline bool munmap_addr_sanity(unsigned long start, size_t len) Since it's returning bool, the proper naming scheme would be something like "munmap_addr_ok()". I don't know how I would replace the "munmap_" prefix myself though. > { > - unsigned long end; > - struct vm_area_struct *vma, *prev, *last; > - > if ((offset_in_page(start)) || start > TASK_SIZE || len > TASK_SIZE-start) > - return -EINVAL; > + return false; > > - len = PAGE_ALIGN(len); > - if (len == 0) > - return -EINVAL; > + if (PAGE_ALIGN(len) == 0) > + return false; > + > + return true; > +} > + > +/* > + * munmap_lookup_vma: find the first overlap vma and split overlap vmas. > + * @mm: mm_struct > + * @vma: the first overlapping vma > + * @prev: vma's prev > + * @start: start address > + * @end: end address > + * > + * returns 1 if successful, 0 or errno otherwise > + */ > +static int munmap_lookup_vma(struct mm_struct *mm, struct vm_area_struct **vma, > + struct vm_area_struct **prev, unsigned long start, > + unsigned long end) Agree with Michal that you could simply return vma, NULL, or error. Caller can easily find out prev from that, it's not like we have to count each cpu cycle here. It will be a bit less tricky code as well, which is a plus. ... > +static inline void munmap_mlock_vma(struct vm_area_struct *vma, > + unsigned long end) This function does munlock, not mlock. You could call it e.g. munlock_vmas(). > +{ > + struct vm_area_struct *tmp = vma; > + > + while (tmp && tmp->vm_start < end) { > + if (tmp->vm_flags & VM_LOCKED) { > + vma->vm_mm->locked_vm -= vma_pages(tmp); You keep 'vma' just for the vm_mm? Better extract mm pointer first and then you don't need the 'tmp'. > + munlock_vma_pages_all(tmp); > + } > + tmp = tmp->vm_next; > + } > +}