From mboxrd@z Thu Jan 1 00:00:00 1970 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 153FEE7718B for ; Mon, 23 Dec 2024 17:58:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 79BE76B0085; Mon, 23 Dec 2024 12:58:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 74C356B0089; Mon, 23 Dec 2024 12:58:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 551066B008A; Mon, 23 Dec 2024 12:58:13 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 3232F6B0085 for ; Mon, 23 Dec 2024 12:58:13 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id D8DF7B12FF for ; Mon, 23 Dec 2024 17:58:12 +0000 (UTC) X-FDA: 82926981354.25.7FBE81D Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf10.hostedemail.com (Postfix) with ESMTP id B8C9DC0010 for ; Mon, 23 Dec 2024 17:57:52 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=bLSsD3b9; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=jjtdi0e0; spf=pass (imf10.hostedemail.com: domain of chuck.lever@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=chuck.lever@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734976649; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=PBnvEN2y6zH6fHkuz46xKv34Rw2QQQRdOXRsClO5Xxk=; b=Jh6itJrx8Z0683n6HqvWkclRlpFoDA06V8/iFMyvYXocftSS8Lxuj4u/o0oHRCUcrufAw1 OsW4BcmU1upgBNINWG00aRewgTnMk1UxKF6UsR/qiF73KI7Ggn3GU+YaK4S2iZV1iOPY1z 1G6RUqOeAtbi6hthEraqjm0rKmSyhuY= ARC-Authentication-Results: i=2; imf10.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=bLSsD3b9; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=jjtdi0e0; spf=pass (imf10.hostedemail.com: domain of chuck.lever@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=chuck.lever@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1734976649; a=rsa-sha256; cv=pass; b=1aDVQJeks3Cz5shfKI/JNuPuN+q5zJVd4cHKTuE7VBHdMmT1fLeuRlDM6smZQN0ukCyUWj PkR+akWkECFfudA4utfWmWhYGTj247fmuwBM9qdRxWS/edDYRrMdwRHl9U+0JIFik1pDy8 n43JwTuOvSCZT1J+xGOSzSlOVgE4Cfo= Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4BNGupfH001757; Mon, 23 Dec 2024 17:57:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h= content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=PBnvEN2y6zH6fHkuz46xKv34Rw2QQQRdOXRsClO5Xxk=; b= bLSsD3b9Yxrrl42hWSZDwJdQ61XR3q1RzzDEqXp1QSnBvtG3gHGF9RLhLsYcw4Wn DKoAvSHPtn6MvrCxYEDxhe2z94eiQiSZHCAwtc5jhIfgdPuA116y/e4VjkHeJeqJ u8jp4lzVGltaiaKm5YhfyrcRJOqhpx5Y1PJ7dGKSS9GMkAKoQs1aqyJa83Vadm5e 6WYOSXqsqZbB1oi/NnjjItg/UbqXqR83S+jUbqaABZjXQ0q7j1qY7dNEZ5SSBmdg K32TP6N8dyiQ9HK+0BW62hQCL7cwZNvvap+9cO576PSgLBq7y5IS/mxglVO54tnb IXr8b0bHJvYsUDsoCA3S2A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 43nq9yayv2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Dec 2024 17:57:52 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 4BNHA94J015927; Mon, 23 Dec 2024 17:57:51 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2047.outbound.protection.outlook.com [104.47.66.47]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 43nm4df98d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 23 Dec 2024 17:57:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sdtYe0K73Iv+69uPeEHUOVJNiQzW/rgzKNFR3ZFYaBsWVCw+yrUV54z5SXqKxvAzZfFJ4x7ZPUKzU2NJ89EBoZBshii5QDOYUAOwKITZInKJP3m2bEnV/TTHhAAvs1SXQFO+BoocD6h3wzWcg347xJB7fSs/Ec4/emD5pwPgHwNdNcLmoFR6YXatBe4QyVD0b+0slfzeiRxkXAkVylUT8z32YNbSAOPmvcnkn5qoDaRpt4wzgBz6isEt2PwAJ3j6A/3N5rQdkoIXZZnxRktR2sTwOOeIDfMHHZgWvukhyh3Bhb7FquP+nsL7KdL+JSbneUf5CPP2cpEB0sg5ocqrUg== 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=PBnvEN2y6zH6fHkuz46xKv34Rw2QQQRdOXRsClO5Xxk=; b=QgEo6+xjiP26Wmm9vdRCoBjCzRAp6APWcm4s1UyyrAecOZ/MEb9iecOhU84OwigBZww/j3juAtQO6obZxU8ShALnzheY6b5WaQfITX1Pste6JOx4wj06gvxnZtLzVkviHa26PIv+RirtvsMKQ2QrYqzzbh4O+df2r2+ziAifJfuXXWkNzJ+Owo9IF+A1G9l1sXWbTusFZA69dcZzKR5BQuZk3jEkV1lQqAPvDzvNbwX3khpA2uYGnhwtwrd0suB35dTlBihgo1eRe9oPXtVq9FgG7ksNRpvF6If8c7sobC9M2LpPkq4RfbB5Beiq20IU5GvjW6cj6R+Crj92TTGhRg== 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=PBnvEN2y6zH6fHkuz46xKv34Rw2QQQRdOXRsClO5Xxk=; b=jjtdi0e0sKIIIAmwAKkBLymyCjnlZJHGCvMbKK04WX7BvVxV6FXqovfNS2aVgHlaQxuMJMOw0qg29dJ9BGuY/1Tx4o9d0nhVTUcVh7W1QaAz7bNE/MeZ0zJhDBcr0fWDiDlis9kmkIMPojDgtSH57Bi0kI7vRIi537EUZWsIoPQ= Received: from BN0PR10MB5128.namprd10.prod.outlook.com (2603:10b6:408:117::24) by IA3PR10MB8041.namprd10.prod.outlook.com (2603:10b6:208:514::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8272.18; Mon, 23 Dec 2024 17:57:44 +0000 Received: from BN0PR10MB5128.namprd10.prod.outlook.com ([fe80::743a:3154:40da:cf90]) by BN0PR10MB5128.namprd10.prod.outlook.com ([fe80::743a:3154:40da:cf90%7]) with mapi id 15.20.8272.013; Mon, 23 Dec 2024 17:57:44 +0000 Message-ID: <514a1e9b-b8d0-47c6-a10b-69ecf3c51d21@oracle.com> Date: Mon, 23 Dec 2024 12:57:43 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 4/5] libfs: Replace simple_offset end-of-directory detection To: "Liam R. Howlett" , cel@kernel.org, Hugh Dickins , Christian Brauner , Al Viro , linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, yukuai3@huawei.com, yangerkun@huaweicloud.com References: <20241220153314.5237-1-cel@kernel.org> <20241220153314.5237-5-cel@kernel.org> Content-Language: en-US From: Chuck Lever In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: CH0PR03CA0212.namprd03.prod.outlook.com (2603:10b6:610:e7::7) To BN0PR10MB5128.namprd10.prod.outlook.com (2603:10b6:408:117::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN0PR10MB5128:EE_|IA3PR10MB8041:EE_ X-MS-Office365-Filtering-Correlation-Id: c97acacd-832a-4196-a41c-08dd237b4daa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?utf-8?B?eU9McS9rV0xNaytPNC8yOEZzb2lHOEhEQ050d2FibTdyS0ZZeXR2UGVndjEv?= =?utf-8?B?WXBxc2FMb0xMb2xESXYvd2FJZGJja0lGL0lSemc4OGhzRU8zbWZVd29raWdX?= =?utf-8?B?U1FoWFlONEkzbWhxMVM1bHZoWWtmTnBHOGFQc3FoTHkxWk9rNGl5bkZmZDV4?= =?utf-8?B?bW51WlZNZmxTcDJDTFlxeXh2M3Q4WXpvTGRvQWJyTi9Fc0h0alFQQ2pDekcv?= =?utf-8?B?MFB5UGc1bWloRWd3SE1jSEFSdXhBMWZlUUdGYmZsMWROZUwwRmpQV1k1L3JC?= =?utf-8?B?TFR0SzBYL0tRaHZ0cDhVNUtlcVArOVNNWkNsN3NUYU1BSnZid0JBdkdWSkVu?= =?utf-8?B?K05GYUc1STk3ZHhtTGsxTmpLZm1XLzJXYXJHemNyYWFad2srUVNnakFVcERi?= =?utf-8?B?dDhmYU1NNGF0VTY5SzZ1ZjVxWUJ1eWlGMGQ2a0VBNXE5NE5hMEJid2RUakFx?= =?utf-8?B?MThRcXpqNlgyZERzNXRCalRDMnNOdWhJdW1XY3U0T0dNUWFPNzdWWTE0Tjk5?= =?utf-8?B?bEY0Qm1UVHFGQXRqVkRBdmVxQVBpMWFRYXlDOU1OeEh2VVhZa2NjTU9HdlBR?= =?utf-8?B?WmZvdlZ3bHBldzFvaks0QVpZcVpFWmFiSEtQbmViQ3JWa2tZTDZmTVcwOHVB?= =?utf-8?B?K2VSSVpzSHpmYlFaQlM0YU1HczliaE9CQ3prMm9tdTRoR2lDMURSeXZXckVK?= =?utf-8?B?Nmd4WUdHUHBtaEswRXFMcEdhMURRMTlmcDAwdk51Q2RqWERCWWZhTHdlRy9E?= =?utf-8?B?dEpTaVd2OEVHYU9uUEI4QnVpK2trZy91ZVBYNGRydWZjWCtzT1BDMTdaSTd0?= =?utf-8?B?TlNZQVhHUnVwcUZVaWVRYXNMQXpiQWVoTEwzZmpWUDlFbndDNTBjU1lhOHpw?= =?utf-8?B?b2RFTmNHM2lPTFlGc3JnaG1YZGNteEdjY1JuOTdEOUlHakV6NHE5Z2FkOGFX?= =?utf-8?B?aGRLTWZlZzR4bHcrR0UvOEhSeDcyOGNyUFVTREY1TiszeVd4NDNJZllGalFQ?= =?utf-8?B?dlpxVXBSS2pvYVE4bWl6akpDR1lzUFJVRC9md0t4Y0JEUUJvaC9mNktjUTdj?= =?utf-8?B?ZGEzYldlbGdaczZWdE5oRzZJQS9BZkVOY2V3RjRLWUtxZ3RLa0RMMFhIRm0z?= =?utf-8?B?NWh3cGRHanFiM01HTzlBNTNwTXpCZmRNc1oyYTh1bjFTREI3WWZWakRQNERM?= =?utf-8?B?aC9jWGhwWDFuSzdQNC8wa3VOTnhIOTk4cXlDb2FnQ0xYZGI2a0ptczB4QmFY?= =?utf-8?B?MHk5K25lTGUxYzVlRjFoWUNnZ0daSWpRWEtSd2tNaGhGdVpJc2Nsci9FRWln?= =?utf-8?B?OFlTSkx5bU1VNmNaMDN2cjNZRFhpS3E1L25RM2w0aDFjQTJ2dk9uWG9IaThF?= =?utf-8?B?Y0lPRHBNcVhiL2NrUVRBZ2pDa1J5WkQ5UTduOFZVWUsyS1hFdkdnY1FObEFs?= =?utf-8?B?dXJqT0JFOGlWaFlLb0lyVWFQSVp0dExXR1N1ZGdRVm1PK2t2RmloN2w4QlZj?= =?utf-8?B?cE1abjN0MGw0cmlvcyt5NkV3dldPWHJsZGh0QUhwam1uMTM5Z1F5V0FvbzBi?= =?utf-8?B?UVZJWC9wNlVDMFFnSEVqRGovT3JoSzE1TjRMTTJuRTdrd0l6alZhNDlQV2Fv?= =?utf-8?B?Z2ROcmdxd1pZVXRkMi92YjlHcDZyU2picnFEenZwK25aVDBJSHZxT1NYdTV0?= =?utf-8?B?Mk1DLytkVGZWNmZPN0dIZUZ5ZFdWSC9zVU56T2J3K3pJOS9KOWt1S1hQaUFX?= =?utf-8?B?MCtBbzdGMndNZ1pPSnd1Y1ZFL2VwVlpXa0QvSmRzcHRpL081TlFRdTBLQ08w?= =?utf-8?B?Z0V3Qzc5Y09QV0VWN3JzRjB1dmo1QUFsRmsydWsxSUFwcTFSYzRXZ3NhTkg5?= =?utf-8?Q?61Uf+rf1Lgj/d?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN0PR10MB5128.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bHJpUWZFSUZ0dmI1b1NiY0FoYUdyNkJvZUZPWENIL1pnYVROa05pbDVuY2VH?= =?utf-8?B?ZFo3cEFXcEhOd1JxbWRBQTRnUWhVNjlKRHc3bk1NK2RuZDk1MVlQV2d6OHYv?= =?utf-8?B?aFBvaTBEbGVxK1FqOU9MRmZ2NWdPTkUzVm9sZS9rQXJYSWJLcnlUN0xiRzNM?= =?utf-8?B?TlNCbXc5Qnpuekw1MlNOU1ZUNWVVc0hRd2JSamF4NDdQRWZIcjdvWlFKTnJD?= =?utf-8?B?Qy9xL05xcjRoR09nTytkYnNtV0RJUUVIVnA4NjBSQXl3Y3kvdGFpYzdtWHNY?= =?utf-8?B?a05FMWp3UnF4emd3S2pHek9nUjNZOUp1VjVsWmd2Z0JNb1YwNW5UUjd5M2ww?= =?utf-8?B?UU9uQUNGU01ScFdFQWYxTlFMMkJBOWtxNVF2TzBSM3psMW9URVMvOUJ6Vlhj?= =?utf-8?B?bUdUa2cyU2VXR05QczYyc3l0VlkxZkZOUDFaV1h4eSt3SHhPQ0JrU1craGNs?= =?utf-8?B?ZWxZcDZKTWxBM2tIazNCcEUzdEV6OFRLTlZrRnpoL0FIZ3VvZE5NdmM4R0E4?= =?utf-8?B?U1h0M294UGVOYnJUaTFVTXRGRHhUUEZOM3ozTy9XUktuSEMwSmp1QVIxSEN5?= =?utf-8?B?cFpwOHRhNEsxbHUxb3JBTjZMdmNHZTU5bGxqNUQwdGVDc2RCY2Q0T3QzbU55?= =?utf-8?B?U2EvU1VFVmFjTjFReFBNYTFiQVFMUi9pOVVFYUVMRWZ2Y3k1WHJLL0JtMTUx?= =?utf-8?B?VnlTMUVkYSttdnhuaUNpS2JWdVVyZVJ4K1pmMXJKcGR6bEp5Yk1EUmVHdGs1?= =?utf-8?B?STdSNFNtRVMwMjVQa0hXdVlZTXhQN2x5RHEyQW9rYXNoWTdPSXNuUUFIVVZI?= =?utf-8?B?VDdOd3l1ZnhBYVBjK3E3ZFRIc1JqWk5JQlBWb2RXSXhrWnhTakdxakQ4YXZa?= =?utf-8?B?dGRVaFY3ZWtta25RZXNZT3NJbVZKbUJuOTBEZDNOUTA4alZIMUlxM0dvVFVW?= =?utf-8?B?NEt1cjlNSjNnTFUzUEZlYzB5VEFBMzNwbGdTNVdJQ05yY2ZJT3VoV0gzYjNF?= =?utf-8?B?c2ZSbzROY1Fna1VwbWdIaWFSd09RZHpwSVF0eFFxeG1MSFRIeVBVTGRXM0VI?= =?utf-8?B?R3RVT2tpWnFKcjF1SS9GbEd0MEZ4REJ2K2EwaGZuRmlKOUIwVmlDVUloUEZL?= =?utf-8?B?YmRuWnhwM25SaTlPUjZpcitsNWxESS9DL0J2dDdyT0svTnJ1SFlRMFZBYVZG?= =?utf-8?B?c2tkbHhPZHA0Mmwyd3I0amxidnQ0VitBb0VXSEVPcXZXZ1RSVzJkb0MzMll0?= =?utf-8?B?Qk4rL0lwM2VBWGdoaExDTTIwRGdnN1NJQXRkME10dmI3cXMzSXMrUW13cUE4?= =?utf-8?B?SUpOUjhJVDd6b2VTaWlFa1pHMzA2QXphWFl3NEVkRWdqRHpwYWh1OUt2M3h0?= =?utf-8?B?bHhtTmx6bG83WVZTWE96RkJCcFNCbHl5RlNrUDhNbHNCeHdOYzE0QTNrSkdZ?= =?utf-8?B?ZDZFZUlPN3E1UHl6M0M2UkF5eC91ekxoUGswd0t5QkNLSkhUTVhKaFgrSWtX?= =?utf-8?B?Q28yUkhMQXczV0VXWDFSYUd4RzQzc2lzd2lKNW4rZjN3b1B2Q0txVXNWKzRt?= =?utf-8?B?Q0QvWW5IY3Q1OXZDWGxBT0VCT0pnRUVhRlovRXJ0VWt5WmlZK1l3dnBHbFNL?= =?utf-8?B?dEEyU256c25tK1d1OVJwL1lzRFA2aDdraU1Yci9wYytzZUI4dXAwRjVRd0kv?= =?utf-8?B?VGNKR1dmUTNxazNWQ2dwdldwNSs4aVprcWM5RGpESzRoQkhnVnVNeHhBK3Uz?= =?utf-8?B?c2hjTGxRdmh0Q3cyWmF0bDN2MDJCQ0NNTWg2eGFReURiYzEwZ2MrRlpDNTcz?= =?utf-8?B?MkxYWGYva2k5RCthdEp2TFpYYk96cHdvNVQ0RXl5QlFQeTlLSFAreEFOOHdB?= =?utf-8?B?d01WK0RzRzFUWHlsSkc3THgvTlNDSndnMGZWSHhUM0F6OWs5MVdqcUk0NFZ0?= =?utf-8?B?STJWSGZZNUU0Q3RZekd3NkFCVGl5ZEpnTW1BT0N1dmIzRFBBMUJtSGtSaXA5?= =?utf-8?B?dnZyVmNaaWpuNGV5cXJyNE03SXpYVjFrWUQ3bmduRHFiOWpnMW5WTTk1ZTdq?= =?utf-8?B?ZHVLRDJkMkhTOTArL0tyTjhxUnFRWUIrK0xKTm5LU2VkWW1vZWRHTmNuZ2lF?= =?utf-8?B?ZmNDV2hIalhDLzZBWWw3bENRakUwV05aTFViYW5CU293WlJvNVBmWG1adGdO?= =?utf-8?B?Mnc9PQ==?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: dxhM5aI8OpGx0vwc95VsztQM3BiwX4rSrytyrvfSpPqLRjzb8mgZKfWpnRr5l/yTGEBhP8PWfSow9M/VbA4kJmA40AR0LyzVMVXL6aUU5hzPiCMIspwLXxglS6BKXnC51v/UjA2v4Yzoie6+xJ92ujDztBK8LXxaAFeKWCUgHdUt81hv1vaXYOrPla3Pwi6UhhEs1HV6KRqjHiZ0Mfxgx/Cwx12Ld3tULTe0kcbE8BQgF9WlVky/A2ks+2oYndHTfzf2uBqA7JY5i6N9O34EjLZvfPlXEmAPtMLytGNmAoG70aYi/S3Z/r0BtHPGB+1V+t9UkiE8pYMb82ASOHu9ypKrLeA3ytX1ZaQ2C4hC20gGDvewOd6O4gXX1gvk+gQ2f5M7dzuUazhgjcWTTbcAasd8WQuDOgVOpZPoxFXb+VEut+JAmNCDpF7xzheQr3VCuV7HcjMvyW/6hKV28eMKqgnr3zxJLkSji7mOYsOhOaMhc1ggZLZniapyDYbVmkDbFSW250dWMH9j3JCnHucOIuglOZZeq6VZGAvM0FSn/nXtGIu1VrLr0kd7blK6sFWcxFss8g2w2OixD/y5k+HKMLfyq846MSGFXaiyoz1QtXc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c97acacd-832a-4196-a41c-08dd237b4daa X-MS-Exchange-CrossTenant-AuthSource: BN0PR10MB5128.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2024 17:57:44.8538 (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: GoWIGeTRdUBBC0RydS8+npviQYEFp8TEzFHeTT++Quu3QURkvPexkrKM5Qd6zQPtvHRGXS6Toa55Fe21ezBzNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8041 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=2024-12-23_07,2024-12-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2411120000 definitions=main-2412230159 X-Proofpoint-GUID: b_E6vMYyD5oze8VWCwirqbCrVEfcvcku X-Proofpoint-ORIG-GUID: b_E6vMYyD5oze8VWCwirqbCrVEfcvcku X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: B8C9DC0010 X-Rspam-User: X-Stat-Signature: eoo6dyfasx5hncmshkcmxpafgk9uo7xg X-HE-Tag: 1734976672-112058 X-HE-Meta: U2FsdGVkX1/Bq/lbRo6tSYJJIzBOFaVmjQ/yEX2VUU0XFaZwieMeVqNvrJ6xVZgNSwImkXwYufGFysVdGYrxUER0PxSnnPZIcDryhYQ+DAc+01Ua9TDprB2/EVM9TbP/jDMgx5yXW3Evn+mqwuEYEl4hN2GY28AblGvtPDZ2Ou+jCXWAZZZsZBMN3TdTcfZxUiujF/F/ax43EGeHJLtJJesx34qDFVP5qubETWRC4/cuCY3utd9YrVjmq8CLX1tcf8ouZVbgqqIZ0VbzfFdRnAUPWlBZj75duVkrvPTcv+CWHG8nXUdxIAu6p6xQZDpZ+38SxMOUYOv5ki7Y/km6NpdgVuaw6vKuhxN/EQaaHOOrlM9IpjOAM2tCqy1waLfEAxaRY9wPQhTxfSkU+wP8G1Vku6V4+0+4RWRowp6Np+2mKorquo0rtVIoewgyQHBlSkh3eGRVtpclpkhD4UNdsvFLfxBSruaZzeloumGafcigbqRiv5sREe0RbzyWS6JTVI+5puSWXj9Fk6YUqxiAKgAldz+x3BPoda6p2j1LDHX/XuXf3mjBaXK4CKosvySWTK4WfpSdI+RAdi6mhLWtisanSnyAKO494RE/cNNgm4yYTXKqbTfP+VzcM00Daz2f2dLyxkgswu5usgIOtLxGHrygjXpSLT/tLmKd1C/EpXjaoLK7uSWUGnCsSj8hSIty7llqKaOb/UwynzDY9yxSP0hBcvgGiI6EReumGjof2nIReJRRLG1KL0686HsUCu2GebBeJjk3g30TZhPiI2C2x8Do+WBZDDYa3DP8jAjma3mVFPbp8x5SxP0xPIb76fNUbhFXEn5Nx0MehEl2X9GI73PD38jVAf4v9fpjXDYEl9PbV/fqKDaWbfIEySnVBbbPGryHOOvK9gHyuLJk0QFf+TvgwIbF5utdxF+iFMzvM0qWPKuiIBtoC2NQll2k7hN47K1PI0cqPzQ0Pj5U3ci 1zrYzlme koJkLsvIRkodFV9q8351/zpCrUQcDd++KerwETkrFf4+1lnveN/ZufbwkgZyrbTUHNjij7aSuTMnSu7Jn5E80iVV4CQ5gwDLGE+An/y/rDgS2ObRVYrSEpY7eJnsMhqdDi5gxKvMVf7c+eV2BZivp/UBeDc3guzdbddmLM0Ey/Y4rHQVYh6awqP2rDa12yQ9mscatGQTrTGkV2efdvn4hW8unkhseHfor/dYvhXF3Sks8UUaxNetHDg7i9xN/W23/kcGIBkUb7m+SUYB41Wqg7h/nU8GCGwbPPYDY/jaB5xXATz9gUyymW/DGjCIyVHlXmJm5r3qIgXJKqPBedrPjO4DgiDZ+NgaX7o4Qn6jAbVrEzGAGlF5rccmv08xMSA1XAs34IsHfUSafHxfRHVl3aVBeNGm9kijSFy4MLo8UhqI4W1UlN4DiRxjxfzyFcSbpw9nW7zcUGSIPCaCiho+TT8E0ILj4krm1pU+bWRjF4HX0Y52WoY7nvK5aQ6nnCdsbzWBvglSQf4PyuBy26HShwCUu1F2PjO3TXP32XZdlUBXQIf/Dmi6OXjxtUdjo6afl1/sO9302Ht4wYJcTSLB/X5OsTUDZ2Drtdb46EE+e4w0kV0dfl4Q7rCIKoC2eD25xB2Q0j+I3CjVMHoa3X1WndpQtn6LERIWp5IqC0imsK6I5ic9fXfPC58Dq/Q== 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: On 12/23/24 11:30 AM, Liam R. Howlett wrote: > * cel@kernel.org [241220 10:33]: >> From: Chuck Lever >> >> According to getdents(3), the d_off field in each returned directory >> entry points to the next entry in the directory. The d_off field in >> the last returned entry in the readdir buffer must contain a valid >> offset value, but if it points to an actual directory entry, then >> readdir/getdents can loop. >> >> This patch introduces a specific fixed offset value that is placed >> in the d_off field of the last entry in a directory. Some user space >> applications assume that the EOD offset value is larger than the >> offsets of real directory entries, so the largest possible offset >> value is reserved for this purpose. This new value is never >> allocated by simple_offset_add(). >> >> When ->iterate_dir() returns, getdents{64} inserts the ctx->pos >> value into the d_off field of the last valid entry in the readdir >> buffer. When it hits EOD, offset_readdir() sets ctx->pos to the EOD >> offset value so the last entry is updated to point to the EOD marker. >> >> When trying to read the entry at the EOD offset, offset_readdir() >> terminates immediately. >> >> It is worth noting that using a Maple tree for directory offset >> value allocation does not guarantee a 63-bit range of values -- >> on platforms where "long" is a 32-bit type, the directory offset >> value range is still 0..(2^31 - 1). > > I have a standing request to have 32-bit archs return 64-bit values. Is > this another 'nice to have' 64 bit values on 32 bit archs? It would be nice if the range of values that the mtree API handles were the same on 32-bit and 64-bit platforms. I think that could reduce the defect rate in mtree consumers. But 32-bit is going away over time. I wonder how much such an effort would pay off in the long run. >> Fixes: 796432efab1e ("libfs: getdents() should return 0 after reaching EOD") >> Signed-off-by: Chuck Lever >> --- >> fs/libfs.c | 38 ++++++++++++++++++++++---------------- >> 1 file changed, 22 insertions(+), 16 deletions(-) >> >> diff --git a/fs/libfs.c b/fs/libfs.c >> index 8c9364a0174c..5c56783c03a5 100644 >> --- a/fs/libfs.c >> +++ b/fs/libfs.c >> @@ -245,9 +245,16 @@ const struct inode_operations simple_dir_inode_operations = { >> }; >> EXPORT_SYMBOL(simple_dir_inode_operations); >> >> -/* 0 is '.', 1 is '..', so always start with offset 2 or more */ >> +/* simple_offset_add() allocation range */ >> enum { >> - DIR_OFFSET_MIN = 2, >> + DIR_OFFSET_MIN = 2, >> + DIR_OFFSET_MAX = LONG_MAX - 1, >> +}; >> + >> +/* simple_offset_add() never assigns these to a dentry */ >> +enum { >> + DIR_OFFSET_EOD = LONG_MAX, /* Marks EOD */ >> + >> }; >> >> static void offset_set(struct dentry *dentry, long offset) >> @@ -291,7 +298,8 @@ int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry) >> return -EBUSY; >> >> ret = mtree_alloc_cyclic(&octx->mt, &offset, dentry, DIR_OFFSET_MIN, >> - LONG_MAX, &octx->next_offset, GFP_KERNEL); >> + DIR_OFFSET_MAX, &octx->next_offset, >> + GFP_KERNEL); >> if (unlikely(ret < 0)) >> return ret == -EBUSY ? -ENOSPC : ret; >> >> @@ -447,8 +455,6 @@ static loff_t offset_dir_llseek(struct file *file, loff_t offset, int whence) >> return -EINVAL; >> } >> >> - /* In this case, ->private_data is protected by f_pos_lock */ >> - file->private_data = NULL; >> return vfs_setpos(file, offset, LONG_MAX); >> } >> >> @@ -458,7 +464,7 @@ static struct dentry *offset_find_next(struct offset_ctx *octx, loff_t offset) >> struct dentry *child, *found = NULL; >> >> rcu_read_lock(); >> - child = mas_find(&mas, LONG_MAX); >> + child = mas_find(&mas, DIR_OFFSET_MAX); >> if (!child) >> goto out; >> spin_lock(&child->d_lock); >> @@ -479,7 +485,7 @@ static bool offset_dir_emit(struct dir_context *ctx, struct dentry *dentry) >> inode->i_ino, fs_umode_to_dtype(inode->i_mode)); >> } >> >> -static void *offset_iterate_dir(struct inode *inode, struct dir_context *ctx) >> +static void offset_iterate_dir(struct inode *inode, struct dir_context *ctx) >> { >> struct offset_ctx *octx = inode->i_op->get_offset_ctx(inode); >> struct dentry *dentry; >> @@ -487,7 +493,7 @@ static void *offset_iterate_dir(struct inode *inode, struct dir_context *ctx) >> while (true) { >> dentry = offset_find_next(octx, ctx->pos); >> if (!dentry) >> - return ERR_PTR(-ENOENT); >> + goto out_eod; >> >> if (!offset_dir_emit(ctx, dentry)) { >> dput(dentry); >> @@ -497,7 +503,10 @@ static void *offset_iterate_dir(struct inode *inode, struct dir_context *ctx) >> ctx->pos = dentry2offset(dentry) + 1; >> dput(dentry); >> } >> - return NULL; >> + return; >> + >> +out_eod: >> + ctx->pos = DIR_OFFSET_EOD; >> } >> >> /** >> @@ -517,6 +526,8 @@ static void *offset_iterate_dir(struct inode *inode, struct dir_context *ctx) >> * >> * On return, @ctx->pos contains an offset that will read the next entry >> * in this directory when offset_readdir() is called again with @ctx. >> + * Caller places this value in the d_off field of the last entry in the >> + * user's buffer. >> * >> * Return values: >> * %0 - Complete >> @@ -529,13 +540,8 @@ static int offset_readdir(struct file *file, struct dir_context *ctx) >> >> if (!dir_emit_dots(file, ctx)) >> return 0; >> - >> - /* In this case, ->private_data is protected by f_pos_lock */ >> - if (ctx->pos == DIR_OFFSET_MIN) >> - file->private_data = NULL; >> - else if (file->private_data == ERR_PTR(-ENOENT)) >> - return 0; >> - file->private_data = offset_iterate_dir(d_inode(dir), ctx); >> + if (ctx->pos != DIR_OFFSET_EOD) >> + offset_iterate_dir(d_inode(dir), ctx); >> return 0; >> } >> >> -- >> 2.47.0 >> >> -- Chuck Lever