From patchwork Thu Jan 25 03:49:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yajun Deng X-Patchwork-Id: 13529987 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 08614C47DDF for ; Thu, 25 Jan 2024 03:49:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 741396B0085; Wed, 24 Jan 2024 22:49:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6CA236B0087; Wed, 24 Jan 2024 22:49:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5453A6B0088; Wed, 24 Jan 2024 22:49:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 3BF6F6B0085 for ; Wed, 24 Jan 2024 22:49:57 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id E0C3040C76 for ; Thu, 25 Jan 2024 03:49:56 +0000 (UTC) X-FDA: 81716454792.30.FD93B38 Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) by imf18.hostedemail.com (Postfix) with ESMTP id 22E6A1C000D for ; Thu, 25 Jan 2024 03:49:54 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=TP9P8j4w; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf18.hostedemail.com: domain of yajun.deng@linux.dev designates 95.215.58.176 as permitted sender) smtp.mailfrom=yajun.deng@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706154595; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=i6+UflKme2rdjDNdZ2iFhopxIKTWi9f4kjyYutjoOt0=; b=R+tsD9GrpJbFK26fau90dXayUf1Q4TjE/AJMlqQTFub+0DDGlgvPy1n31t2LSM1Hjf3BKa rBsgHQeZtqwedEb+1gfQcbpF2PC4ukmhypPilI466GPj+fl69VTgY7xynHruGKd+uscmp3 JjdjBgD4tQ/oXenqAuNkcEmXVzAKWR0= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=TP9P8j4w; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf18.hostedemail.com: domain of yajun.deng@linux.dev designates 95.215.58.176 as permitted sender) smtp.mailfrom=yajun.deng@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706154595; a=rsa-sha256; cv=none; b=bvjaZCKJ8BbuoxUzKqb2lpPCDJ05orGP6hwCJNlYHhss/FjABqAVogKZ8gUlJYd3iP1Pmt uuC0kGuax560ywBj4Y1Leu3IK897oR4s3e5mi4stx5DjQZSkwqo47ahI/acjx/2Q92YizT gOAf8sJ7l7WIlMA5AywAFC6Pq2cXHEs= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1706154593; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i6+UflKme2rdjDNdZ2iFhopxIKTWi9f4kjyYutjoOt0=; b=TP9P8j4wYgzgj1xUO6g20xYqDXcVPDuvlJavt38IgPULE49lOg/3PDgmY31WgxvkrWC0OB zPmTNvyIyMZ2SPNVR06ETZJgsvj+dyVvmkfsvGAoKXc+s3tSZ4zq7dnfUVn4gLjT1aG2nI 2vTQC2TNOTx5zN5/dz4JuMv46KNioxI= From: Yajun Deng To: akpm@linux-foundation.org Cc: Liam.Howlett@Oracle.com, lstoakes@gmail.com, viro@zeniv.linux.org.uk, brauner@kernel.org, vbabka@suse.cz, willy@infradead.org, surenb@google.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yajun Deng Subject: [PATCH v2 2/2] mm/mmap: remove find_vma_intersection() in vma_merge() Date: Thu, 25 Jan 2024 11:49:22 +0800 Message-Id: <20240125034922.1004671-3-yajun.deng@linux.dev> In-Reply-To: <20240125034922.1004671-1-yajun.deng@linux.dev> References: <20240125034922.1004671-1-yajun.deng@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 22E6A1C000D X-Stat-Signature: dc9pwd1gibc3r3xeq8xc49chhiaunqku X-Rspam-User: X-HE-Tag: 1706154594-713300 X-HE-Meta: U2FsdGVkX18fQGcH081t8W0OZzSDY3v0RFcAimIZcXVMb7ZBLbj5tkIJBiisQhYv9VyWr1xOqxSZCspThv5F8S8e6KXEXskAv9r3jt/2tiMLQkmRdoTCL02OkhLaLw8L+8aZFnQ6alBdH5kmq4jC9xE7H28CQP1SOalfL67xt3JRxrGKU/9X2YE1DW74ncFZ3HJzjecrPXU0T52KcIkUfESr+oGteeVsE/XoqnDlfxuyG9E6p3k6cTgiK/A25JuspmSbCeQFG73WGoAzfOz/vJtBOpQMgWgI02/E5NqDEAAwVbQ8npO8x66GiW9G7N1IDoETn+mvd1ykSG0f40IkA0YuvclwHpjegTqDAZj/eYdudGXEo7eauoUMTAl8VnBWd/uMZmJXnfTRbg/v/3e2JO0OB6PvaB6yaLAa1oplaDBC40jRbnp8uDRgivBplRoyCBD6zfC5xxwhgM/Y+wnJoVFyhvor4QXQMKVvwdJBA5/FlyNIViFUMOBENBnzNi8kXZM/JEy+qdkXG5ghcpsz97LC8eW4cdX4E2VPCRnIob6h9YqnyJMiiMPR0qmuSP4UA4LOGJ8RK3Qbee9E4m0uka+9fB19kA9TIYramQ+++w1Q/I4YuPphjpPzx/m/lRh8R/h8m1WVIL2f7c9kGdvglIYN7hvFEM3s/Z7zDNE8mgk9Bw+gFzyvaBm382bHAwzpgQPuCSsrKbLEsnLRyYUXkGby6sBFC354SAkR3QRlkBy3JHw9yDJINZVO658JV0vuWr90QuniTOTa6ITNQjRSCA2ZRJ0aCGCpv/dhE79N4B3Szy9fz74X0OD7JCnE8cnh92U2yiW/DeuGg1FJTITurzZ6AbCZ9r2ToKduGbBH+OfUuL4w9ulnxnLKiP0t5xpkE7JGX032yP9kh5nChOw5zseXcpIW5wt5F8rDcTRjg/r+UUZsg0UDK+SmSfaVZmdpmP1YTBHd6j3JvmteTOw gfBvpI1L bWuwN2M9tsLhNwsA+HE8C6hg7Vv2mzn/4Zoijl4Jb/LPUuncUIKH6dOoqvyxO5zmCA0ORvvz7MTcTOCkpMfHM5dLf5hyxbT52d4VUMOXTegQF1oIdCLyuUw28lbdJFVcd/NEL X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: We need to find the current vma by find_vma_intersection() in vma_merge(). Since the src vma was passed, we can add a check to figure out if the current vma is NULL or the src vma directly. Remove find_vma_intersection() in vma_merge(). And initialize the next to NULL when defining it. Signed-off-by: Yajun Deng Reviewed-by: Liam R. Howlett --- mm/mmap.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index f19bc53bc08e..ea02fdc91aa2 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -869,7 +869,7 @@ static struct vm_area_struct struct mm_struct *mm = src->vm_mm; struct anon_vma *anon_vma = src->anon_vma; struct file *file = src->vm_file; - struct vm_area_struct *curr, *next, *res; + struct vm_area_struct *curr = src, *next = NULL, *res; struct vm_area_struct *vma, *adjust, *remove, *remove2; struct vm_area_struct *anon_dup = NULL; struct vma_prepare vp; @@ -890,14 +890,18 @@ static struct vm_area_struct if (vm_flags & VM_SPECIAL) return NULL; - /* Does the input range span an existing VMA? (cases 5 - 8) */ - curr = find_vma_intersection(mm, prev ? prev->vm_end : 0, end); + /* + * If the current vma and the prev vma are the same vma, it + * means the current vma is NULL. + * Does the input range span an existing VMA? (cases 5 - 8) + */ + if (prev == curr || addr != curr->vm_start || end > curr->vm_end) + curr = NULL; if (!curr || /* cases 1 - 4 */ end == curr->vm_end) /* cases 6 - 8, adjacent VMA */ next = vma_lookup(mm, end); - else - next = NULL; /* case 5 */ + /* case 5 set to NULL above */ if (prev) { vma_start = prev->vm_start; @@ -921,7 +925,6 @@ static struct vm_area_struct /* Verify some invariant that must be enforced by the caller. */ VM_WARN_ON(prev && addr <= prev->vm_start); - VM_WARN_ON(curr && (addr != curr->vm_start || end > curr->vm_end)); VM_WARN_ON(addr >= end); if (!merge_prev && !merge_next)