From nobody Mon Feb 9 13:37:27 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.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 93F801E25E3 for ; Wed, 29 Jan 2025 18:17:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738174630; cv=fail; b=KzbO/Q511Y4wwZk7tReSzUqGbfpf2J2putXcyrD5Dmo6KEK5ujkUd+Dd3suEQIkNiJ/GHTTS8g3X5Yw2XIg77WyBzd1Tvg8BupSiuJh/ok+eHlb6SNCK7hwZ/wZ8P4ALlXCtyX+1k7ntfiiT98iZBV1Hy/gishzdyc1AjyQNFEY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738174630; c=relaxed/simple; bh=LN9n/F7NZgGWJ7bubEr4cEeY/AOML2NV1v2+jL2iApo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jNa2Aq+buJQ4A7+0tHN1sFQ7Xy57VAiTa5r/BB7OBRWDuiKkjy4/PQ3WzXQgIuKiUjvLuUykGhfsBbgrb03eSbjWW3DnswsZHT63wgTMN/heEKnY5UuaSv3q8cqhj+kJVgdo9V1EHazb9vZMxeTkH11tvVHvX8aIeFGQoqphVOA= 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=GspEyiFk; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=u1ENQiHq; arc=fail smtp.client-ip=205.220.165.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="GspEyiFk"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="u1ENQiHq" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50THQo9J003831; Wed, 29 Jan 2025 18:16:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=zuBLPjGNSUMx8Fj6nZFfWbvJyPOQbygIlbM01t+C9kk=; b= GspEyiFk4KugGAU/doK4vOGzkRgHMTDPFVgb/DQTKFwG8muELWPncw/EviQZv018 TeTGqqJVZkdkEGf5JzXIofOaUjqRlKo9jnn6r9E+sWXsmcOAsXQP2Z+ojMLO6/Uw wHJbFIzq+ANBhBwPgy0zm7oORWGYG1k82lwJMs8EEKwQFyqG2qDb5RG5pTCfGW7C yY7sLiuUe9c13tL3mOddADJVl8aaeteYQLjXMgdIw+DOCTPA28WnDZJKJXWjHPVH f7mtfYqhMy7l/ag70S394RZiDeeaAXLq2CwrMLAAPGotgkzN59AMVR2kHQvyuZFh ECSbcuYLEO+l0YHh4pIk+g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44frccr7e6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Jan 2025 18:16:57 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 50THEKQP003410; Wed, 29 Jan 2025 18:16:53 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2043.outbound.protection.outlook.com [104.47.56.43]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44cpda6jxr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 Jan 2025 18:16:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mzt5z6okw567DRvIyK1kPrd0iG1meBI8fgUQ26HJZGmHseplSD7AM1Xbp3mz7bhLZVnK0vpwFRB8p+Ejd3Y7Fv/TR2cM/+DaZdbN3u2HCG2vYoYTGtqQxW0qQ+Tz7qVhj8b2RLUYWryhvJE/3IcbEtVn+3I53ra/JISAZ0a+v/uX0HMQrM08Eq+VU3h5HJnAzyGCgoJ4gWDpdh6Ooi9BWlWseXwWROdpP4byjknM6WWcBOvid6rugQfetvK0nds2ah01PvNCBuZENYxqIBSIsjNwDIJzADqjn1taiVauMZcOiK029N8XAKXTbCYrwYyuOwg7tECADq7wCH2UIRrzbA== 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=zuBLPjGNSUMx8Fj6nZFfWbvJyPOQbygIlbM01t+C9kk=; b=RgQ6X+eg0TArj203Ab0E1XbA0Jk9kMAyBEuO3TNttA7W/ajTf1cHf+hlGxvafn7NW3pK1jGKJDm+rGvhfScskqxJlFNxmmPJyTk8BBUQPD1VaaEKeUaBUgRJLkZ0gw3gW18FgzzXAVWOLcYW9C2H9ex6jUOyLjs8uiwUEWR/FeQlk801KMYSXgdLqxdz5h3O0HA4Pr2hzSap21jimeIuAiDr3qzLTFsT+A0AF5sUjOa1my2QvD0wNC4d9J9wCnspAJLQfvOunBisK08vCa8GcWnsBivHndJr6mQXddv+5+knoRk9KyXt6sLg2k2KBQNIcpQmrqZefi8/fXTwS1zV1g== 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=zuBLPjGNSUMx8Fj6nZFfWbvJyPOQbygIlbM01t+C9kk=; b=u1ENQiHqKXYV64wNC2A1/aqNK4jefNn13sq3gvCQ5aLk/ZTidpbe2ZQKNDmXgNetuNVL1i5Rh0VYoSIxvPgOqXP4T0QtjTumWU7cPm+g7Xyhq2MCNPJGqz4UK4TJ4UXxmSMCFXMJIHtc8pELNdVVZnZGkxCu2dMEVIPFFR0fK8s= Received: from MN2PR10MB3374.namprd10.prod.outlook.com (2603:10b6:208:12b::29) by DM6PR10MB4314.namprd10.prod.outlook.com (2603:10b6:5:216::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.18; Wed, 29 Jan 2025 18:16:51 +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 18:16:51 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: "Liam R . Howlett" , Vlastimil Babka , Jann Horn , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/5] mm: eliminate adj_start parameter from commit_merge() Date: Wed, 29 Jan 2025 18:16:37 +0000 Message-ID: <5a12615fc1432f353c4424ef58d4ebbda7a08b14.1738172812.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO2P265CA0259.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8a::31) 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_|DM6PR10MB4314:EE_ X-MS-Office365-Filtering-Correlation-Id: 17b80085-af79-4770-4d66-08dd40911a6c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xiPuHJ/W+9r94hWBcvP2/ui7qS3ZEFYxQPEmwUYSSzb/uM7fN+ev0ZEj/Zb2?= =?us-ascii?Q?NNd4ZStxyc4+5k0BmxCPlO/sSWqHNE2CV8DrmzqmcQzjDSJaDwRNKmZbFfUb?= =?us-ascii?Q?ZguJg1/Zw4XjybcbfXH/XBVnCrm3hzhZHu2LeI3d6op/yH1hKs5J0aX+MgMG?= =?us-ascii?Q?hEF8Iy7jBHZTWRThpTN3cxaVZl6ih7U7B3jEZuG0g0eY6B0JCDevHbdVn30e?= =?us-ascii?Q?kzfk8udDXJZv+SVE1W2KgJzM02k4qVt+oaDA+rcPMSZMybhnqcGUNF4guKQz?= =?us-ascii?Q?0oASbjreuSwl6wh3gIlXuWKb0RNDKTDlx32vo9KGA3/ah2URkBkX3t6lwWO7?= =?us-ascii?Q?y7jbALMemRQXqeLk9I7TwbQifSAAxGTO38RfEC6B0mT2IHu/WkBsUus1Y5AE?= =?us-ascii?Q?/uvKNZXA5SaPBUzXpIPCYFreZDqvOC9Tax87JB8cv2YtksT8t+yS8i3od3jc?= =?us-ascii?Q?okRvqwNEi/O5b/3DWGjNVCHiE7mgxoO4jURDfNhXOjP0ixN5pzVUjxF4CzB8?= =?us-ascii?Q?s09qEZlafrcXWF69o7VUSZYP1/elfZ5lUz8+FunP5aU6r+GcBhPWkP+LjTSg?= =?us-ascii?Q?leRa65upXEcv1Tf8aqlFVKAxmRhslxWP9oEeXdaEC8UsjlkM8lYsRwZK3bCQ?= =?us-ascii?Q?c9y9kmrxfZ6RWZ3Sc0CPImatVs15Xx5FBlPdZpdKKjynEo0wHSO+lNwBvv+2?= =?us-ascii?Q?LgAXkUK0jXssHhGr7kWVrrCNlyvRzzRkLXdFc5enKlKC7eURwrTgUqbf4VKF?= =?us-ascii?Q?46JFWhAQA7t482o0lWDSiI1LyhjwvN8mFMIRut0BRv2RR8Br1/8mZgtGo4A/?= =?us-ascii?Q?xEy+HeH8fjOqhmEy0hR138QBmtMYjYMY12kpkEoborfxifKEa7fxkMLxY8vb?= =?us-ascii?Q?4D+jTqObuR03MdOxQSy6wia3Htqta0w98nqh2bU4p/PUVtGz7GDCOB1s5EIb?= =?us-ascii?Q?eIIxH600WYM7xOLEHdWDj6gdTsD8fBVvpWN64A4YFQklxsytQjvBpREFB7ji?= =?us-ascii?Q?W3XA/vV+trsqCfA1XZ4dWjh4corKmbvccW3Q5M7uLt4FSI9RIkA4DY0/ROYg?= =?us-ascii?Q?P3MEIAlmNwFcEg2eJx4DAqt48UdhjfxaBIoRG+7yMoXOU0O3TJsEFJdU/igY?= =?us-ascii?Q?003qFQP3+X08PBbyHNxTalHqklJHHWbQk5ontcHmgJomInxwA7gNMHU/c/Nl?= =?us-ascii?Q?XyS73BUp73krnfTy5Ds5OveNG4nZD4P11qsXjMs1qxE6EbZA1+KdzN8mMN5V?= =?us-ascii?Q?I/3ip6K8tm9oH252TthE6tO2nSIu80Eh6djkpoK3mNnNvRlKtdMbh9ujiP49?= =?us-ascii?Q?hw3w19yHmn7hutOiujHy3zi44W5ETupkhfanOK16yO7aPYn5gDebfNwXTO0J?= =?us-ascii?Q?ZyIv4PVLbhoTttwAqeS8IbGixHyo?= 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)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RULCMshJwWLa1E9f/jkJhxYbSf634KW8oj/XYKBrvo/12p9ymnj1NtHIkT+W?= =?us-ascii?Q?zKbMSFfaY4vCrC/yXkBf42fj6uXHZ5CP66j77f/vsjSul8OgoQ94GW10Ib8p?= =?us-ascii?Q?8MUw010esqMWEGda9Lhkpo1O7MVtoAxYLbm/1nHDD3RBttT5P9eWcCCh8Qvj?= =?us-ascii?Q?D/W1I+VtZkt4exqgl51zuyDNeeQMOJuSKJvTB+4BHXXAecka0gn3yXFilIGZ?= =?us-ascii?Q?PTPC2IvBZosznULs5qPMsGZkMwoF+K0sN5CkPkes83kCXRh0nwBLtq2Ennfq?= =?us-ascii?Q?ty6vhvTZNWVwpryFXOdGpuYwc/YSJsKkJ9JC9tG3cxCECGytIzBmuOBgheph?= =?us-ascii?Q?t4eVhtyB4QI+H7thbi06Wl7wss1uUmAT6sl2P4a7/ZI/uTEx7n2JDTf4R28f?= =?us-ascii?Q?DBzPsiLtR4qngL9wa+/Mu9XDQ6GVwCFlGvvtLGU5F/qPFkJi2hpvI6ZOBMNT?= =?us-ascii?Q?lw0Q+ojs3zB0NSOtbkTf2lMsQRjwv/XqChz54wTT/g79e2XZoUK5VkHQ7XsW?= =?us-ascii?Q?1yT9hkoVWL/jZCflIkqYAyNhnFMVxlFqRlouqCpfWNWuN99K8LBKiMpjFCn3?= =?us-ascii?Q?Ve4hVY0cf9d6zNYcaQdMjirQedhlcbqqYTDMuXiw8iJmp322KXYDC8LjC4gv?= =?us-ascii?Q?J12Thq9PFIBB4TrFFnc3xEEmCWWO23s+hSuC7hUuxFMM4g7DLMjIxz6zequJ?= =?us-ascii?Q?f04nZnrnKfqjaSdUKRKfSYQQjupOtub1Ud1ut44wWx0QgLus5pmXBTGesyo3?= =?us-ascii?Q?ckgYaHbp4XfKfyuANkv7/m5iN9fnnibaxSfdN95DsBKorpHfqsOilTmJ+lnK?= =?us-ascii?Q?lmCREhCl1MtqgwmTv1jlSAX4BOWzlHCAbSXB98b9wCpQgH+7OJpKmCPLFNdG?= =?us-ascii?Q?sQX+mSSVm4lYbwHNWBj+PedcOLoRDyCanSj0WbwFvMUKo4gnbZFADsQLvubU?= =?us-ascii?Q?8gmQ1C/VMHngneLF6vucocU4YxNUVuuPsG9ex+XJwKsm4eU9Kp7VrsVjrB2M?= =?us-ascii?Q?39iRjFoW2VE0sD3fzM4ZSWbMPGHzS4Fvux4S9fG0wxQ6mccy7CbfFSjfsJCI?= =?us-ascii?Q?JpTk9LHlkaRtfbqB9roM2m28i0/XfchAj3lTL+2Kla9S+zRSjstC10NbcUfK?= =?us-ascii?Q?j+mM5/NiRe1wYr/ByvDnZETxziN2JrprqRpx6w76MXj82syi1LZdrsrJT8xz?= =?us-ascii?Q?bdFNscKyq1p9HQ/6V+vm/fTJP1WAqt41qVeJ+GSKOf5gFKITViznJo482l3E?= =?us-ascii?Q?aKiInEfLag6nuE0rs9QlRAlpzEe8g4dssnJPF1RyUfDpHbmJra2N9rfgaois?= =?us-ascii?Q?YX5OmQvfSJaAA0Z6YOQdx8lpYAY6S/bEiXjYjNy+/673a92eOpoi1m/E99bl?= =?us-ascii?Q?L2D8KxC1zeX3Oth2LeC84NUmJL2OUhhH9iQOVPyNpcUYO0umhg8nrZfeXKFw?= =?us-ascii?Q?ckWdY0JcshMqR11PrMQKnvEwcsCp/li3yoJlPEjWkWLC/AlPqgILcG7cUIJ/?= =?us-ascii?Q?Cq4UAIMomQL3cCgZsT1aqszHHr9gUVA3V74HGJRs7b7BQ4ZrzZaHlMQAjyyb?= =?us-ascii?Q?awyaJtJ5YOExo6Q4g2n9fzFoFUJnaS91+1bEIx1ail6ly5EZnFAQvhTaNkme?= =?us-ascii?Q?Xg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: MepEcMTy3KtlOtT6Q4DvxRKq8Zs8U5elj5jQrpRhIhsdEiP2gJ/EQUN6Yd0YmRCrj0Jjyw/ajNSSUcKBnUH3mT7ojpmmJIS5nI9oFSW8/ELiNJC33i1MSx4QFNh/ScJc8Wrhn7vgie+qf3yxCs8aE6bLjctEQSt9YyR0krPIzxoY8nFQY1dkNSd0A1b4fKfiCT/Ay2EnHINFRvoFGnbmSM5MMMxu12+SdmKizA+H1tXlJiIZyi1Mnc5B47ZCdodnpOhhBlHdYobsD0rs/Jxso96EAJT1kzID0myJSbWdSg9XmKGf+lo/91qkiYuxat19m7rPLRjdimmT6oAKzAb9GN7bCpE8wJ3q7EHoW4+LWZ5S+qVqZanQb3Ft7//V2Nz9fXcH9jF447dqLwUvRSWPCmTOr5i4X5LDjWTpOjaMicsmcRHQmHWT9YNBoV130fnkzPjwd0D2C5aFag6dcRvOZYerrZQCJVpx9WChXMY3w1lu0sz4An4iMM3hmDx697Fj5AVttB7KJ57QqDBlwNNugWAlf7BhlAsdydXFNn6qNwWcmQYO5zFT3ODAOF3B5zOpmhRHbS4PWy4jB1ye8DJ6U9iUoaNr5jxTFI+Wv7J3TGk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17b80085-af79-4770-4d66-08dd40911a6c X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3374.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2025 18:16:51.6642 (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: z7v4WNSRSNmJorKyxW54hb9BAZ+D7JcGn5RH39en6dqJrfhD4oPOJtjAfvkbwK30EDTBaYotEab0+7yrkDlik9ODFn4UzBwQYppDKf7DOsI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB4314 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_03,2025-01-29_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxscore=0 adultscore=0 malwarescore=0 spamscore=0 bulkscore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2411120000 definitions=main-2501290143 X-Proofpoint-ORIG-GUID: IlW52EpNATf-MzfwXxiCNOVbYQFbkO6a X-Proofpoint-GUID: IlW52EpNATf-MzfwXxiCNOVbYQFbkO6a Content-Type: text/plain; charset="utf-8" Introduce internal vmg->__adjust_middle_start and vmg->__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 --- mm/debug.c | 8 +++++-- mm/vma.c | 50 ++++++++++++++++++++++++----------------- mm/vma.h | 10 +++++++++ tools/testing/vma/vma.c | 2 ++ 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/mm/debug.c b/mm/debug.c index 92936908ed0f..adddfd69dbf7 100644 --- a/mm/debug.c +++ b/mm/debug.c @@ -267,7 +267,9 @@ void dump_vmg(const struct vma_merge_struct *vmg, const= char *reason) "uffd_ctx %px\n" "anon_name %px\n" "state %x\n" - "just_expand %b __remove_middle %b __remove_next %b\n", + "just_expand %b\n" + "__adjust_middle_start %b __adjust_next_start %b\n" + "__remove_middle %b __remove_next %b\n", vmg, vmg->mm, vmg->pgoff, vmg->vmi, vmg->vmi ? vma_iter_addr(vmg->vmi) : 0, vmg->vmi ? vma_iter_end(vmg->vmi) : 0, @@ -281,7 +283,9 @@ void dump_vmg(const struct vma_merge_struct *vmg, const= char *reason) #endif vmg->anon_name, (int)vmg->state, - vmg->just_expand, vmg->__remove_middle, vmg->__remove_next); + vmg->just_expand, + vmg->__adjust_middle_start, vmg->__adjust_next_start, + vmg->__remove_middle, vmg->__remove_next); if (vmg->mm) { pr_warn("vmg %px mm:\n", vmg); diff --git a/mm/vma.c b/mm/vma.c index 206e3523cf38..3fe264200b79 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -632,29 +632,44 @@ 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 =3D NULL; struct vm_area_struct *remove2 =3D NULL; + struct vma_prepare vp; struct vm_area_struct *adjust =3D 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 =3D adj_start >=3D 0; + if (vmg->__adjust_middle_start) { + adjust =3D vmg->middle; + /* The POSITIVE value by which we offset vmg->middle->vm_start. */ + adj_start =3D vmg->end - vmg->middle->vm_start; + merge_target =3D true; + } else if (vmg->__adjust_next_start) { + adjust =3D vmg->next; + /* The NEGATIVE value by which we offset vmg->next->vm_start. */ + adj_start =3D -(vmg->middle->vm_end - vmg->end); + /* + * 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 =3D false; + } else { + adjust =3D NULL; + adj_start =3D 0; + merge_target =3D true; + } if (vmg->__remove_middle) remove =3D vmg->middle; if (vmg->__remove_next) remove2 =3D vmg->next; - if (adj_start > 0) - adjust =3D vmg->middle; - else if (adj_start < 0) - adjust =3D vmg->next; - init_multi_vma_prep(&vp, vmg->target, adjust, remove, remove2); VM_WARN_ON(vp.anon_vma && adjust && adjust->anon_vma && @@ -738,7 +753,6 @@ static __must_check struct vm_area_struct *vma_merge_ex= isting_range( bool left_side =3D middle && start =3D=3D middle->vm_start; bool right_side =3D middle && end =3D=3D middle->vm_end; int err =3D 0; - long adj_start =3D 0; bool merge_left, merge_right, merge_both; mmap_assert_write_locked(vmg->mm); @@ -858,11 +872,8 @@ static __must_check struct vm_area_struct *vma_merge_e= xisting_range( vmg->start =3D prev->vm_start; vmg->pgoff =3D prev->vm_pgoff; - /* - * We both expand prev and shrink middle. - */ if (!vmg->__remove_middle) - adj_start =3D vmg->end - middle->vm_start; + vmg->__adjust_middle_start =3D true; err =3D dup_anon_vma(prev, middle, &anon_dup); } else { /* merge_right */ @@ -891,12 +902,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->__adjust_next_start =3D true; vmg->target =3D middle; vmg->start =3D middle->vm_start; vmg->end =3D start; vmg->pgoff =3D middle->vm_pgoff; - - adj_start =3D -(middle->vm_end - start); } err =3D dup_anon_vma(next, middle, &anon_dup); @@ -905,7 +915,7 @@ static __must_check struct vm_area_struct *vma_merge_ex= isting_range( if (err) goto abort; - res =3D commit_merge(vmg, adj_start); + res =3D commit_merge(vmg); if (!res) { if (anon_dup) unlink_anon_vmas(anon_dup); @@ -1079,7 +1089,7 @@ int vma_expand(struct vma_merge_struct *vmg) if (remove_next) vmg->__remove_next =3D true; - if (!commit_merge(vmg, 0)) + if (!commit_merge(vmg)) goto nomem; return 0; diff --git a/mm/vma.h b/mm/vma.h index 7935681a2db8..e18487797fa4 100644 --- a/mm/vma.h +++ b/mm/vma.h @@ -120,6 +120,16 @@ struct vma_merge_struct { /* Internal flags set during merge process: */ + /* + * Internal flag indicating the merge increases vmg->middle->vm_start + * (and thereby, vmg->prev->vm_end). + */ + bool __adjust_middle_start :1; + /* + * Internal flag indicating the merge decreases vmg->next->vm_start + * (and thereby, vmg->middle->vm_end). + */ + bool __adjust_next_start :1; /* * Internal flag used during the merge operation to indicate we will * remove vmg->middle. diff --git a/tools/testing/vma/vma.c b/tools/testing/vma/vma.c index 7728498b2f7e..c7ffa71841ca 100644 --- a/tools/testing/vma/vma.c +++ b/tools/testing/vma/vma.c @@ -159,6 +159,8 @@ static void vmg_set_range(struct vma_merge_struct *vmg,= unsigned long start, vmg->just_expand =3D false; vmg->__remove_middle =3D false; vmg->__remove_next =3D false; + vmg->__adjust_middle_start =3D false; + vmg->__adjust_next_start =3D false; } /* -- 2.48.1