From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FD5D190661 for ; Wed, 29 Jan 2025 14:19:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738160359; cv=fail; b=Ty8yZbMqo6zrZvbMdX7lbNmJPxnkQjy8IB4L3GMS+SJvxG7N0cFkf/BtFPiuPNWSeax1PBDInfzMBIly/n1d4tPs/LBX3xzsAejzZUfBguNl5smc4h2UQVxfi6iCQo0qP5//ICgUvBK26pXYC7JdrBwZcExwj+INYCMDXw0gOJ8= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738160359; c=relaxed/simple; bh=yTksW4Zqorz9LEnyCVGGvsYguxzq1SzB0wubxlwt7Vs=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=DkOQIVw5abuhVPEHDP24TrzYbaz+b5EjsE51C7Hbny0C5oUfeZU9DtqfjkTaOUbKNd8Bxo6Y8oY6XeBNiN6vtsDzJJMwMq6mOFm/xId+YZs6yjk/blrQObXTm9efl3B97kKC6y0sj3XWl6ojDisb+Wtej88xOBEoPGmbrOLYSmI= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=LfIf6pXA; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=lF+6ONUR; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="LfIf6pXA"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="lF+6ONUR" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50TE1oc0009482; Wed, 29 Jan 2025 14:19:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=corp-2023-11-20; bh=DhDVhrG4q2OUzhhm3J Qard37hqB3/aQwKw6c8gLGwsM=; b=LfIf6pXAl+uoSB5Rgvn9sZBLi1p5h3IMFQ grSbeTsWxaIsj7xKGsEwH7IZLGa+CEuxvjZxFW8X3hCa4ihq7LpZHjhHoHpHKdSl EyOFN3UeiEtmxzCcaIDUDs/vpJhaHDm51TChqMHsVEMPCsQT4yyJ0ksibSRpxUnq PmMmXry6j6S9m3U4efpxRfuXH6ifwdm8cGDfr5v+3gHOTJdnCM/tqPY8RBe1tJjx olgk3juXMsXr69gpvGksnGiq+amrq6Qb/vPn/VrhRXfckML/yGPXrLox9sYUer1h 4tBHtetJDdyKZKRD0fN0Mgy0cQMqd1eTiCIndfc5EtXJI6p8PCTA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44fn2ug4ae-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Jan 2025 14:19:09 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 50TDnVaW036174; Wed, 29 Jan 2025 14:19:08 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2049.outbound.protection.outlook.com [104.47.55.49]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44cpd9rjdr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Jan 2025 14:19:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ursJpx+2DXrzQCcwVCqgGf/T3QiJge52VNIU1wDQAlAUCbT2y63KmuGG1ViTAGILGJf4wV8wJtqWwjpbtYcttKRkS7nML00pUJ5u06lge7+JqfjEzFiKqLzVpV/Fg80zKPCcdk2JDeUbhEYuQ44Sc/KRb8j2dyQrl4gq1DfUdn+ZNai+S16RuymO1zfwZtWd+MwoD2rLej5jeGf2r/I/bxept9/JQet6xPzHHfrGmanN5OfTZS+Jz5AUC5/TFlRItqADVDU+VSqFcxDgPqhr4VbopFtJA5WhVgsCO4h7OUqRXNGrA6Pzjl4d3xGpFjRGh+K0FTIyNX9RXyADNYRvOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DhDVhrG4q2OUzhhm3JQard37hqB3/aQwKw6c8gLGwsM=; b=L/+bXq1o7EMvKuDR+QgIaSUaKkZEc5QKRLB5RiTseNOOWqRZpsJxSwue42ZKF7WpuKOJ1jPj6WYZnCHqurMV8kAhABVb7UKirZAL5gLbORa+dwmxhp+o1XnInMWgnJ5VtGNA5urHw1Tmfi5RwpDiBo2LS9bw3Qm6AKA742186I6A7DV1EdUNIvW/IsJ9KkaT55xoVqEkPfFfnt+38tfssK3OHtBznz7CGDhWf96xBXTsbNxZJygYxW4XEQwcRYZ0fI01t9e+EXBZDF9kDE1PcfjLodvQ8n+zYhroA7H+Em0mHSb7caWGwiVrKqyHrVEaJmDb02uUW3vVFoi0Z3Xv0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DhDVhrG4q2OUzhhm3JQard37hqB3/aQwKw6c8gLGwsM=; b=lF+6ONURbEIvOsmOm+pAIZSdDhPZ2KLLkijSUdz/KALEybo5OKKUYrCfejFOLMkIdT5Vjbe8ZW0yNzuBADWl8bT7OYP797cal680bFQCBf/YRQ47QV+pIS/WuFpbmm9rLmKOR6Z94vnATUIgdC0K8umF1y50Ixk/hX94xMNr9Vo= Received: from MN2PR10MB3374.namprd10.prod.outlook.com (2603:10b6:208:12b::29) by PH0PR10MB5753.namprd10.prod.outlook.com (2603:10b6:510:146::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.18; Wed, 29 Jan 2025 14:19:04 +0000 Received: from MN2PR10MB3374.namprd10.prod.outlook.com ([fe80::eab5:3c8c:1b35:4348]) by MN2PR10MB3374.namprd10.prod.outlook.com ([fe80::eab5:3c8c:1b35:4348%3]) with mapi id 15.20.8398.014; Wed, 29 Jan 2025 14:19:04 +0000 Date: Wed, 29 Jan 2025 14:19:02 +0000 From: Lorenzo Stoakes To: Vlastimil Babka Cc: Andrew Morton , "Liam R . Howlett" , Jann Horn , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/5] mm: eliminate adj_start parameter from commit_merge() Message-ID: References: <335ff27920d96c2a45b9724725cd3be2caf987b1.1737929364.git.lorenzo.stoakes@oracle.com> <2e6fac60-3b73-4e7a-a824-21cbe2c326e6@suse.cz> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2e6fac60-3b73-4e7a-a824-21cbe2c326e6@suse.cz> X-ClientProxiedBy: LO6P123CA0022.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:313::15) To MN2PR10MB3374.namprd10.prod.outlook.com (2603:10b6:208:12b::29) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3374:EE_|PH0PR10MB5753:EE_ X-MS-Office365-Filtering-Correlation-Id: 4cf043bc-9947-4943-7672-08dd406fe27e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Bf4G5T4yJKrelyWSRGFGjBDosmFiHP67QBTIGj7SwH/T+gpewM6lQa6L0WZL?= =?us-ascii?Q?pRLSYGjGYYqLSjTrXK9uBbY0pNzbsxZr5DjqmLPXKLFnB3ffFF8xqH9zxGmc?= =?us-ascii?Q?d1S4MHmu2lKHj/Rwfa/9X7b39wmm/OqXqddjoZ5dg/YqKfCrjrYSnLfM3U+X?= =?us-ascii?Q?LoiglGldlpUuSTXAf4vsl/ToIpct0nvhwUBCZlc7DRnetg10ezNGIrfesoBN?= =?us-ascii?Q?5AIo0qn3r8zemMtw9AVZZlit3bXW2un40cRUcfsmYKmwIsOPtv3DEG1J4SHO?= =?us-ascii?Q?W6cwHhKxQkcU4Oz485G4qQmKVa6B0d2xfz+6Jp7xVmsZHQ81QO5mxHHbf9Vo?= =?us-ascii?Q?TeeYVxKxB6cRSerIfEHgUdnmMI7R35DioR86gg2TnFFlEmw1QEd+OXaKSOk6?= =?us-ascii?Q?dm/zY3xQKo2nNeA9DQySA8+2/7H464uKrn9OR1IIJpQyXtPeV8wylkjhMt1N?= =?us-ascii?Q?hCwzG4nLhp/AJsTRHoABWWaWrMdTGOJwZgawnAOrvwa0fsWuhkSYEPZdssEe?= =?us-ascii?Q?Wo5lpt73f+TCtM1072MB9Ie2L7MDsjFRcj4JEGds7RR0QImSOIc0LPeNCoO0?= =?us-ascii?Q?YW4UFPo+NhLAlZHFKRSumOTxv4neRh2YrQRHnAIIxXrl0XzOo2eaQtXJXSbK?= =?us-ascii?Q?IJM1KlAWEiNmy90NSrs21+CzO9G+oyBGUZS3oaOKl3KfqTBe9z16uFfKnlDu?= =?us-ascii?Q?dvJYrmIDXHljz2IIJNNm+wXtFYVqf10SGREfOrkW6MgXFnZ7gjVU8lsT6EwN?= =?us-ascii?Q?GcK7CgIo6/VK6A9R/Frqa+uWqx5FXWzuAhJP8g/daIBHw0OhX/h1FttkTfFf?= =?us-ascii?Q?lKAhOCdWkmqED+6BCTsOAi1xZl4+SQshfAZ3cyEjP4G3y5adYeAGBcfV/mn6?= =?us-ascii?Q?YNuK4+YSls9mollHCG0d271CCsO3w6K0foK/TInoARmM9/bCkOrBheTocmTr?= =?us-ascii?Q?YpDKaUXOxUr2XJwckbVqjXsR5q3WxjNnp1hA9R1qvSJqAc6Oe628OsqF5q13?= =?us-ascii?Q?K0iGJEZfB3+jr2tJn6EWo3hMdVu1eNwYCC++8wS85f+fQfwQu2dkZVGlZGmt?= =?us-ascii?Q?rXdZuSc/0qrxhaZ9GZ7BMwNxI1+LAVaoMuMVlNZSLBkJyZAUVGph4d12t9AW?= =?us-ascii?Q?tlPX7NAv+WyEVo1Q8v3Jzy1pbczo0wpQTUBCZRcVV3Rty4snEPWCkf/Sk3Oo?= =?us-ascii?Q?TTvi713oxekXbDbJ6FuGUK0E8/WM2fP2KivrYCY5SHZYnGJjLOCWaXbzzK/z?= =?us-ascii?Q?SbIhJEtfRbIu/ykm7BNVPuuR6EtkfuYcHadPq9gTjtIKWw17ceLj7W8nDAiK?= =?us-ascii?Q?LKik+AiV/KtuiUk10LYGflj9mpUW+pSyo5cvFX65wYooGivUtQsiTYv0ZGLT?= =?us-ascii?Q?jqWW7t3L7VlZs2LN1ftlMhCUK3oD?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR10MB3374.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Io/MxnzbcUYV1gBX51zQQUkF2h6vUMi/g/R4jqPhm9U9kezI30L1b1ieGvwo?= =?us-ascii?Q?wgDmEpt/TZ3E+QeH6CnAnCdTXW3b+xi3qIZXMYAmKyhHrjJznOn7xzShozNz?= =?us-ascii?Q?Kfi3hWADMlNeBcTB+u7ptg4P/5X1OXtnW+HZnE0HuUkoDu5D69kT4nrnMLDu?= =?us-ascii?Q?qG4CE6qev/AwoFwxAq6zCWskdJVIEXEexVfjVt1F+EJrKOwuj4yGOiPDe+DQ?= =?us-ascii?Q?UHwZwZwaLpXNMtD1jXHGzA6LV+EsRMo2MnLyE7/vqPLmPepmgrTi6S4Yz7XO?= =?us-ascii?Q?Iitwmax65F0e7q0HZR+szpc914unuS70UZhuC8MF+kTwZ+iPln4Vrib1Smub?= =?us-ascii?Q?vcZrJa7OgNPAnWosIHTAGAhdqOFJK5nNBpgRIrpN1LgQsnkF9fXhoIK83bS2?= =?us-ascii?Q?pJITgVaXEAEzUNbwhzWC+6VjrnDMmHPEm5f04tY4YiYRKx19q5ihTOFcJHd3?= =?us-ascii?Q?pyGs0OhrvhABlV8Vnf/ZyxPxM0FdfS0fTYvZ6au/AnCyymBLetR+7CjrU/lf?= =?us-ascii?Q?LykfKA6lGieS4D0qkWbod62cIuFXCuL12eHGjVkoJBFNvbt1ECwST/D+H2NL?= =?us-ascii?Q?hJBO6tqoJF4Ni/suqSRyhzlaq9G4oJocFfAAVQZODX9CsHDOrkv8FNbVVRPG?= =?us-ascii?Q?2TGIkleXpeHNczWlQVlLfWGMOy3DGSWdCR4GEPIvq9M1ogUV7J6qEtmAyENs?= =?us-ascii?Q?vSAxxXL0tkn6BRuUFIxrdcbONlT8xDTH6/KL4/DkHFQ4CtE5gvAA01R7qPWK?= =?us-ascii?Q?ib5zXdYmSNJdZiCx6ubyD8g8/j5vJA8+yQQADz/lUFMSzbaKvDNXTHVw+dJF?= =?us-ascii?Q?pEhHuG2Akgftth5FwFw62DW0fzV/vuQSMaslrSvuKDpekH+UHGAHd/Q8gsXT?= =?us-ascii?Q?hJ4Fl1ByR4cwrQzsVwHaAOGOfMsVhvQZJY7rFygV4LSlZBTNtVje6Nbd0KgE?= =?us-ascii?Q?5iEb2ZIkjOr2kdPSdP0YoRqDE6tnS9j2ZHbBvHyNAK+nXsD4wNHTupf26BXI?= =?us-ascii?Q?t+gDuhasvMTWRtb4unmt7V0F2XrnM4tcnAh5X2uLWUCgZZfVUXBKfPGJou3X?= =?us-ascii?Q?ev4+87TRbRwTO+pTFkI+nEkuj31MdHNTiyS/SCQ0ZsLWO9UtG/NhQ33CBDWF?= =?us-ascii?Q?6BmgVVKuUHzi63GYyPmmdGfOuuicMIdDLEgTJ0CKMcNLoUA1SLEdqIZAKlUT?= =?us-ascii?Q?27LPNnHbJJPIFshFSJa71Znx9f8JP8Z2RKn/1uYmy93NYE6surG9pwv5Bko2?= =?us-ascii?Q?UqOvwFiV+JhG2JVp1JoJW19vmmPaXd6PklpsUoQ7gA2+ALsGHECinw2lJ34s?= =?us-ascii?Q?JWFVW+HgOidjySMneUQzbQlV6IirrEjHjgWAUTQtWJxSQOTph8nccpGpMQ2l?= =?us-ascii?Q?BIW6RPEQdQkX70NSvUJeLOqqJPuU/BmV8Qxct3piVdUDoba2n1HC+jjyRKr6?= =?us-ascii?Q?AxxtHSWlWzNX/Po7FurhPs2Qqt4I/IoFyUV6efsqPF7RMHIh9/KpFUNdZ0OH?= =?us-ascii?Q?p0Z5uGJgUqHkn4J4ooAWG9Wtcw06BQd4X9XJLxTcQYGX40ZpKZAdaVwwZL4c?= =?us-ascii?Q?AtoIayiYxyWTQP6FQ2CkHc10U+qlVuJAnbh7VyyEGkiL/GvZrTP2tx4I7LSD?= =?us-ascii?Q?Ag=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: rcym9S4RIGo3C1aQ61CG3Ph7GewEDRHM0cTxND57MEYygp4Mt9hg5NQyFeT6Egf7pLOXjFgEfCGbKkmPZzLmYpR/PTXVvmiNV5101grFqDcICyeTxA8cIUWKFFm98aN4LsO5lFWNRASisTFK+w+QRa6kXJqCJOwp6jkU+K3ciIX8gKjQTnYN1AeoJrhRrJbYmJBG0/CXh79iyFk346wG9iwtZ3N4zoILM3zUmIVfjB5Lq0jhVegIpUbCVsX+4drjls3U1yQPita1aqyFDI4Njvhg+g6AhYEGlC1GwSqTr1w/YkOndiJvcQCN5IGs/OyzqAOCobH2sris1g+VaF5XhgWjKrwj4q5SA3uXCWJ1J70L+GK31x9SuFptXo+6aWCZ+jdLp021NYXXUZrl0NRtPwhTWNpotbB0tynWA919LiEmlsR8EVvFzvJLYPeVRMP11MkbN1OrQC9FjWTuMoxUYyROyDLLoOTGxDf46CruVTsz+z7vUo9lkdDo5X18L4sTIhvbSmGcE0Mh4j6B9Oop0SYQ+Dylo7zxzLMrHUC1gZbE8j3fc0KIcFy0JSVIMjUjgfOUoKr2kgKsp4A5f++E+JhXe02tlLfZLk+zomR0PyU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4cf043bc-9947-4943-7672-08dd406fe27e X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3374.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2025 14:19:04.5787 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sQmzUHzIRdbBSx/vAYNu2v+YSNq+KUNLBdXegAwgYL4eh9B0DoW5H8ODoDUMzgJMY9tWkfzxzlWdWBuaFwrBCrLbPpOjwZ4KjNOHqL6D610= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5753 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-29_02,2025-01-29_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 bulkscore=0 suspectscore=0 mlxlogscore=999 phishscore=0 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2411120000 definitions=main-2501290116 X-Proofpoint-ORIG-GUID: imQeRvFSBUB5JctD3-bi_Epbt-rPqhJi X-Proofpoint-GUID: imQeRvFSBUB5JctD3-bi_Epbt-rPqhJi On Wed, Jan 29, 2025 at 03:13:06PM +0100, Vlastimil Babka wrote: > On 1/27/25 16:50, Lorenzo Stoakes wrote: > > Introduce internal __VMG_FLAG_ADJUST_MIDDLE_START and > > __VMG_FLAG_ADJUST_NEXT_START merge flags, enabling us to indicate to > > commit_merge() that we are performing a merge which either spans only part > > of vmg->middle, or part of vmg->next respectively. > > > > In the former instance, we change the start of vmg->middle to match the > > attributes of vmg->prev, without spanning all of vmg->middle. > > > > This implies that vmg->prev->vm_end and vmg->middle->vm_start are both > > increased to form the new merged VMA (vmg->prev) and the new subsequent VMA > > (vmg->middle). > > > > In the latter case, we change the end of vmg->middle to match the > > attributes of vmg->next, without spanning all of vmg->next. > > > > This implies that vmg->middle->vm_end and vmg->next->vm_start are both > > decreased to form the new merged VMA (vmg->next) and the new prior VMA > > (vmg->middle). > > > > Since we now have a stable set of prev, middle, next VMAs threaded through > > vmg and with these flags set know what is happening, we can perform > > the calculation in commit_merge() instead. > > > > This allows us to drop the confusing adj_start parameter and instead pass > > semantic information to commit_merge(). > > > > In the latter case the -(middle->vm_end - start) calculation becomes > > -(middle->vm-end - vmg->end), however this is correct as vmg->end is set to > > the start parameter. > > > > This is because in this case (rather confusingly), we manipulate > > vmg->middle, but ultimately return vmg->next, whose range will be correctly > > specified. At this point vmg->start, end is the new range for the prior VMA > > rather than the merged one. > > > > This patch has no change in functional behaviour. > > > > Signed-off-by: Lorenzo Stoakes > > Reviewed-by: Vlastimil Babka Thanks! > > > --- > > mm/vma.c | 53 ++++++++++++++++++++++++++++++++--------------------- > > mm/vma.h | 14 ++++++++++++-- > > 2 files changed, 44 insertions(+), 23 deletions(-) > > > > diff --git a/mm/vma.c b/mm/vma.c > > index 955c5ebd5739..e78d65de734b 100644 > > --- a/mm/vma.c > > +++ b/mm/vma.c > > @@ -633,29 +633,45 @@ void validate_mm(struct mm_struct *mm) > > * > > * On success, returns the merged VMA. Otherwise returns NULL. > > */ > > -static struct vm_area_struct *commit_merge(struct vma_merge_struct *vmg, > > - long adj_start) > > +static struct vm_area_struct *commit_merge(struct vma_merge_struct *vmg) > > { > > - struct vma_prepare vp; > > struct vm_area_struct *remove = NULL; > > struct vm_area_struct *remove2 = NULL; > > + unsigned long flags = vmg->merge_flags; > > + struct vma_prepare vp; > > struct vm_area_struct *adjust = NULL; > > + long adj_start; > > + bool merge_target; > > + > > /* > > - * In all cases but that of merge right, shrink next, we write > > - * vmg->target to the maple tree and return this as the merged VMA. > > + * If modifying an existing VMA and we don't remove vmg->middle, then we > > + * shrink the adjacent VMA. > > */ > > - bool merge_target = adj_start >= 0; > > + if (flags & __VMG_FLAG_ADJUST_MIDDLE_START) { > > + adjust = vmg->middle; > > + /* The POSITIVE value by which we offset vmg->middle->vm_start. */ > > + adj_start = vmg->end - vmg->middle->vm_start; > > + merge_target = true; > > + } else if (flags & __VMG_FLAG_ADJUST_NEXT_START) { > > + adjust = vmg->next; > > + /* The NEGATIVE value by which we offset vmg->next->vm_start. */ > > + adj_start = -(vmg->middle->vm_end - vmg->end); > > Wouldn't it make more sense to use vmg->next->vm_start here, which AFAIU is > the same value as vmg->middle->vm_end, but perhaps a bit more obvious > considering the flag and comment says we're adjusting vmg->next->vm_start. > (somewhat less important if this code is temporary) Maybe, but the code is temporary. > > > + /* > > + * In all cases but this - merge right, shrink next - we write > > + * vmg->target to the maple tree and return this as the merged VMA. > > + */ > > + merge_target = false; > > That comment reads like it would make sense to init merge_target as true and > only here change it to false. I'd rather explicitly assign the value in each branch though just so you don't have to figure out there's not an assignment so default value is used. But also... maybe, but the code is temporary ;) > > > + } else { > > + adjust = NULL; > > + adj_start = 0; > > + merge_target = true; > > + } > > I guess all these could be initial assignments and we don't need the else > branch at all. Again, I feel it's simpler to have 3 branches where values are set according to branch conditions so you don't have to figure out which value is set to which by cross-referencing default values and assignments. But again I also will say (you know what's coming...) maybe, but the code is temporary ;) > > > - if (vmg->merge_flags & __VMG_FLAG_REMOVE_MIDDLE) > > + if (flags & __VMG_FLAG_REMOVE_MIDDLE) > > remove = vmg->middle; > > if (vmg->merge_flags & __VMG_FLAG_REMOVE_NEXT) > > remove2 = vmg->next; > > > > - if (adj_start > 0) > > - adjust = vmg->middle; > > - else if (adj_start < 0) > > - adjust = vmg->next; > > - > > init_multi_vma_prep(&vp, vmg->target, adjust, remove, remove2); > > > > VM_WARN_ON(vp.anon_vma && adjust && adjust->anon_vma && > > @@ -739,7 +755,6 @@ static __must_check struct vm_area_struct *vma_merge_existing_range( > > bool left_side = middle && start == middle->vm_start; > > bool right_side = middle && end == middle->vm_end; > > int err = 0; > > - long adj_start = 0; > > bool merge_will_delete_middle, merge_will_delete_next; > > bool merge_left, merge_right, merge_both; > > > > @@ -860,11 +875,8 @@ static __must_check struct vm_area_struct *vma_merge_existing_range( > > vmg->start = prev->vm_start; > > vmg->pgoff = prev->vm_pgoff; > > > > - /* > > - * We both expand prev and shrink middle. > > - */ > > if (!merge_will_delete_middle) > > - adj_start = vmg->end - middle->vm_start; > > + vmg->merge_flags |= __VMG_FLAG_ADJUST_MIDDLE_START; > > > > err = dup_anon_vma(prev, middle, &anon_dup); > > } else { /* merge_right */ > > @@ -893,12 +905,11 @@ static __must_check struct vm_area_struct *vma_merge_existing_range( > > * IMPORTANT: This is the ONLY case where the final > > * merged VMA is NOT vmg->target, but rather vmg->next. > > */ > > + vmg->merge_flags |= __VMG_FLAG_ADJUST_NEXT_START; > > vmg->target = middle; > > vmg->start = middle->vm_start; > > vmg->end = start; > > vmg->pgoff = middle->vm_pgoff; > > - > > - adj_start = -(middle->vm_end - start); > > } > > > > err = dup_anon_vma(next, middle, &anon_dup); > > @@ -912,7 +923,7 @@ static __must_check struct vm_area_struct *vma_merge_existing_range( > > if (merge_will_delete_next) > > vmg->merge_flags |= __VMG_FLAG_REMOVE_NEXT; > > > > - res = commit_merge(vmg, adj_start); > > + res = commit_merge(vmg); > > if (!res) { > > if (anon_dup) > > unlink_anon_vmas(anon_dup); > > @@ -1087,7 +1098,7 @@ int vma_expand(struct vma_merge_struct *vmg) > > if (remove_next) > > vmg->merge_flags |= __VMG_FLAG_REMOVE_NEXT; > > > > - if (!commit_merge(vmg, 0)) > > + if (!commit_merge(vmg)) > > goto nomem; > > > > return 0; > > diff --git a/mm/vma.h b/mm/vma.h > > index ffbfefb9a83d..ddf567359880 100644 > > --- a/mm/vma.h > > +++ b/mm/vma.h > > @@ -67,16 +67,26 @@ enum vma_merge_flags { > > * at the gap. > > */ > > VMG_FLAG_JUST_EXPAND = 1 << 0, > > + /* > > + * Internal flag indicating the merge increases vmg->middle->vm_start > > + * (and thereby, vmg->prev->vm_end). > > + */ > > + __VMG_FLAG_ADJUST_MIDDLE_START = 1 << 1, > > + /* > > + * Internal flag indicating the merge decreases vmg->next->vm_start > > + * (and thereby, vmg->middle->vm_end). > > + */ > > + __VMG_FLAG_ADJUST_NEXT_START = 1 << 2, > > /* > > * Internal flag used during the merge operation to indicate we will > > * remove vmg->middle. > > */ > > - __VMG_FLAG_REMOVE_MIDDLE = 1 << 1, > > + __VMG_FLAG_REMOVE_MIDDLE = 1 << 3, > > /* > > * Internal flag used during the merge operationr to indicate we will > > * remove vmg->next. > > */ > > - __VMG_FLAG_REMOVE_NEXT = 1 << 2, > > + __VMG_FLAG_REMOVE_NEXT = 1 << 4, > > }; > > > > /* >