From patchwork Thu Mar 9 11:12:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vlastimil Babka X-Patchwork-Id: 13167262 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 C4F37C64EC4 for ; Thu, 9 Mar 2023 11:13:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 70079280001; Thu, 9 Mar 2023 06:13:16 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D1806B007D; Thu, 9 Mar 2023 06:13:16 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1F4226B007E; Thu, 9 Mar 2023 06:13:16 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id F3A8E280003 for ; Thu, 9 Mar 2023 06:13:15 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 17DD51410CD for ; Thu, 9 Mar 2023 11:13:15 +0000 (UTC) X-FDA: 80549098350.18.8C140EC Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf20.hostedemail.com (Postfix) with ESMTP id 1E1C11C0010 for ; Thu, 9 Mar 2023 11:13:12 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=L4GQl+rC; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=RqUUZs3z; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678360393; 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=Gbf95vBZ5k9dAL8M3+AX1LlYXPAiH98C9Dqf/EiMlS8=; b=r0wqWAj/8xuidn0J3BhizmskRiUhN80gp9XlAWm2L+kuex+IpP58qkjNvL9un7mCeBkMnx 1ZHrGOTuiMQhIYBQkbNZ12qxqdo0V8g/ex6cTko0DFIi2Sz+Eezfd9ZDZG5TOEbSQiNolc iGYXWxbRRqmrMG6Swoz1pTLmlZN59cU= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=L4GQl+rC; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=RqUUZs3z; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=vbabka@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678360393; a=rsa-sha256; cv=none; b=Vhh9CsJ7iVWNXL1O1ZtrDJht/A2mav5YpsQfQtKsBYaLHFlotPT4C/9hoBatjeX8Vztgut vDxB0my800nDkEcQElS4WqnTWmFM6laTeWmXtAvFL+MC5mP7WR0Wqa4ULbzFWVcINMlyn+ duvVjRNhbEbkCdt/505TKBgUwXX7IPw= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id BA22820038; Thu, 9 Mar 2023 11:13:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1678360391; h=from:from:reply-to: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=Gbf95vBZ5k9dAL8M3+AX1LlYXPAiH98C9Dqf/EiMlS8=; b=L4GQl+rCi7b/MlyiNCdlvP2/QHKYSvrumdcDGMrBzztwmi38bCFmnGky5OC57tE0RHNqs1 7ixmN+UDKQDs7qdXNJXp8kM4Yh6i0SgG3yx2LHagLLa6elEk0YbHrXOHaRnzB3yiNaZ15O 06yPlYNnALxdXMnr1zP8jY0WKHDijDI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1678360391; h=from:from:reply-to: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=Gbf95vBZ5k9dAL8M3+AX1LlYXPAiH98C9Dqf/EiMlS8=; b=RqUUZs3zze8kfxz8IeZ6c3MJNo33G7eXkX3dJBPrfXidjrYIU6s49P6pyslGajl/2z7Pgk kkgN3lTDU9B34LBw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 9F19A1391B; Thu, 9 Mar 2023 11:13:11 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 4KlAJke/CWRiRwAAMHmgww (envelope-from ); Thu, 09 Mar 2023 11:13:11 +0000 From: Vlastimil Babka To: Andrew Morton Cc: "Liam R. Howlett" , Matthew Wilcox , linux-mm@kvack.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, maple-tree@lists.infradead.org, Vlastimil Babka Subject: [PATCH 06/10] mm/mmap/vma_merge: set mid to NULL if not applicable Date: Thu, 9 Mar 2023 12:12:54 +0100 Message-Id: <20230309111258.24079-7-vbabka@suse.cz> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230309111258.24079-1-vbabka@suse.cz> References: <20230309111258.24079-1-vbabka@suse.cz> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 1E1C11C0010 X-Stat-Signature: 4p9fquizairejenc4sx6fh4133erh1sr X-HE-Tag: 1678360392-210427 X-HE-Meta: U2FsdGVkX1/VFpHEk/Wm9173KjqgunkQgNof6arg9Vma26ZiiY4Yy536b1D9UU3CaFlTqGZF+z5+aE7exQ1pzsnOunewTMGlr5VMxnrCkHrNWDXjTPae74r+XN8SCnLiiOcm0XCrrf+z5j4UvNsBKsZ28/EeA3qUtEDFvk5VK/Qqtvar6ies+e04Ew9VUdEGQVQ2fbCRo+K7dQ5OErk2xXTsakQHMYZfZXuddC/+4V2cP7Gdj7PrvUWlAYXBF8Ut9r79Q7NahllZsc/r13GhdNqugYl9juQ2U6e9V6w5lOcaXxsgbSZz2+DXTq41R6wZClYNgHchQQW+mE2lAjslWnAsUX7Dqf98A5q5ILU+bmLbmAgINHWsvv/2ckWbaUGiLCFdCxARcwEuNyEeP+iWjSJ7WVKVbswPWYPTvl5HkKkjrMrLoTjx57PbaA8+bJhh4EemcW8zkA+PXtUK7p/lT//dwFYnxa/yJrJQLp+MvWBUvdFk/TuqALb6uYWun7WQ2eVR7BUkMYzUwGMwrKcvb0eTqB9f9KZNMP+CDLONoEIwNpC7KxjSBgdB77hgYVXWR4CSGXvslxD3u4LsbmNpoOQNa+ocSAGYgu3/OfoXg5Va5gJPJZ7guNhE6QoGMpbZ15AK4k6rg7KqJBdAJRffHgrejbhgLKa+0EtyhjdFzbFtYzFRcfkwrb0CWRlSy2ztJGFO9Eopso6RUp4EGFJLTYhSmTsFUYbf0WL2K77rNmMFuwYlJ7PwpxD9LRR3KYwB2BxowX2fvEhnzLYTpY3V1FZyKXmVpqia1RObDNjaaFvbPrW1Whyvz79g2FtcCByuMXQE1h+C1C60papaF8Uk84pJB5IXQYvclUDjr1j/PiAEcbianDEifwJy7+Vm+HiXPoRQV6TNe83PePekHm1Ar98bJh07xWQw2y1lnzidKL4JcyEQoUi2Oz30SpOm3dTprSQw3Xg4FZJMO7fezSs BBk1782x BOczM5IEnNTwE8c0Abq9PZPBul2sYHV6QE00MY9mPqskOTnmGbumsh0y2uenvTKMbcOadDJ1vDx1iJJ2ovxuUHgOaDdcM0qPiNskaqOM2mAF7xTm5rk3XqK0d1KIDBOlLf4dMMioSeBT0e01bqcltqrrgIrUM1RyGA0MSKZXUhp4FkdP9U02KJIv+Ij/fGS68gBVQ5Z3cJEa6agZ+tw5m6otIZtk5DYK3dHXfE/+tHyn7e9vNHiDjdxAGOQ== 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: There are several places where we test if 'mid' is really the area NNNN in the diagram and the tests have two variants and are non-obvious to follow. Instead, set 'mid' to NULL up-front if it's not the NNNN area, and simplify the tests. Also update the description in comment accordingly. Signed-off-by: Vlastimil Babka Reviewed-By: Lorenzo Stoakes Signed-off-by: Vlastimil Babka --- mm/mmap.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index be60b344e4b1..3396c9b13f1c 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -848,10 +848,11 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, * * The following mprotect cases have to be considered, where AAAA is * the area passed down from mprotect_fixup, never extending beyond one - * vma, PPPPPP is the prev vma specified, and NNNNNN the next vma after: + * vma, PPPPPP is the prev vma specified, NNNN is a vma that overlaps + * the area AAAA and XXXXXX the next vma after AAAA: * * AAAA AAAA AAAA - * PPPPPPNNNNNN PPPPPPXXXXXX PPPPPPNNNNNN + * PPPPPPXXXXXX PPPPPPXXXXXX PPPPPPNNNNNN * cannot merge might become might become * PPXXXXXXXXXX PPPPPPPPPPNN * mmap, brk or case 4 below case 5 below @@ -879,9 +880,10 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, * * In the code below: * PPPP is represented by *prev - * NNNN is represented by *mid (and possibly equal to *next) - * XXXX is represented by *next or not represented at all. - * AAAA is not represented - it will be merged or the function will return NULL + * NNNN is represented by *mid or not represented at all (NULL) + * XXXX is represented by *next or not represented at all (NULL) + * AAAA is not represented - it will be merged and the vma containing the + * area is returned, or the function will return NULL */ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, struct vm_area_struct *prev, unsigned long addr, @@ -918,6 +920,9 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, else next = mid; + if (mid && end <= mid->vm_start) + mid = NULL; + /* verify some invariant that must be enforced by the caller */ VM_WARN_ON(prev && addr <= prev->vm_start); VM_WARN_ON(mid && end > mid->vm_end); @@ -952,7 +957,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, remove = next; /* case 1 */ vma_end = next->vm_end; err = dup_anon_vma(prev, next); - if (mid != next) { /* case 6 */ + if (mid) { /* case 6 */ remove = mid; remove2 = next; if (!next->anon_vma) @@ -960,7 +965,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, } } else if (merge_prev) { err = 0; /* case 2 */ - if (mid && end > mid->vm_start) { + if (mid) { err = dup_anon_vma(prev, mid); if (end == mid->vm_end) { /* case 7 */ remove = mid; @@ -982,7 +987,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm, vma_end = next->vm_end; vma_pgoff = next->vm_pgoff; err = 0; - if (mid != next) { /* case 8 */ + if (mid) { /* case 8 */ vma_pgoff = mid->vm_pgoff; remove = mid; err = dup_anon_vma(next, mid);