From patchwork Tue Apr 8 10:41:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042716 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 86C7D267393; Tue, 8 Apr 2025 10:42:52 +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=1744108974; cv=fail; b=A79oUs1XohakNzriH7b5BQySREI+Fwa778B9jeJ+7BOScNOYCXbxORQd9+3bjCqXhhYUEazlY2u97l5ZFYlzjeQ5dqxFIjuJt0OGi6Vuq+pvhSxegJWSirtUvhrC9R9+xa0JW4qDHVBSVcnEgHsjcuIglyVjQ7J3bOtTdL6l9Tk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108974; c=relaxed/simple; bh=ZK7M0aHDhxLo7oixjgpiEQvOIhzBXLVTqEowA7lZsxY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=BVpDqJAC63I/lu236MeveOt2HrFqZRdm7oNh4cgI/1/xmsx1D8Q/CyWKPp00NaheF1JHf3M4TTuXLOGktJE7ppLXJgr+VeAXxnMzBI6eggI5VkkU0WxqcpdEvwgPJPWMMnNwVTRepa/P9NA1O3bMgQ3HhzuyZg5xiSAu0FW/q5w= 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=LUSaZ+bd; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=zzfw6Z/e; 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="LUSaZ+bd"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="zzfw6Z/e" 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 5381u9VF023268; Tue, 8 Apr 2025 10:42:40 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=N9FBFjiGx+aOtpukFxjK7ItkyhCuufz4ouH0jhONJW4=; b= LUSaZ+bd9uJDPYh7jl/lqt4sXF4an2Pw58a8pw9NyNIwXQPb48nZwPgKnTvuTKHP FNLcWQmqVxN9jppSm7ql++IUGBcKqtRholU7mYuWavN8Ov2J9O2tCBDayzK14kth Aq5ADuNFwMapgzGJABwcnEFaxvooKi16dwPFSmnEMZemFqyydqSBCqunMpwp7DSv BfL9s0OccYCSkwUYMDx4Xe0OsXUBThyQvMbrDUIr4kAsfqGEgvdRVN4/FkLhTaLf 0LUvY8fdR/Rxj1LwgFUMEV/xuKeQC2lCFJthMOnzU3gReXvCjxrlYaPFzHAcWEfV 8xJa37syjMXkQmmVBUyjFA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tvd9vdms-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:39 +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 5388gM2R023836; Tue, 8 Apr 2025 10:42:38 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2171.outbound.protection.outlook.com [104.47.57.171]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45ttyfc2pk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AJ4k1YjkHrYfTFwVdUiX/ZJvtWUtqGeAY1ymJUL7XFpVmDapRtNc2wXLT8BEC+Fv65pxJINrgZzBNRKNqWXBrPevyGvOdo4Ji3zUWqSzO6bW52l1LN96qjNCtJn9tp0KV7FAqi0REWPmy/j+KUbKIDYXF5WMFa6njNs9I9qOG78OXATZQOU40CQKzTx/gQkPcFi+AlBwYMeJSDqsEiVEkhi1DAfiwlEHmEzNt11xlbK4dNSS/aGeM8mJ+h0jPlg4do1+6+w5fq2BlXSOVbKTuSLF80oaD9zEUeIQfKuMnKKm21wyQDUEefGhyhNeG71mLsCPuZvc8LtFbs1dzUHXvQ== 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=N9FBFjiGx+aOtpukFxjK7ItkyhCuufz4ouH0jhONJW4=; b=m8ypbEMKP+8PTPYm+1H+wkWyumRLHtg25QRQain28F/w4kTB5Czy5r4Sh02bn8BYDXyohFQTjWM7eE3YGqvnm7uOdVnPEEWxL1ceSPZKXlZmWvTmeWC9Ky3KnvAvYTDGJunLRTdK5cQHGusUA9X+cHFUb+pVlM4BtILwqBtPlLHrS9GHEwLXDiOvG1FZucarnmr9NxrC/MNXNb29z7pPj2XeNPCB2sp9tA5B0KYguHYI8Z0frOCcDIvjcSY7k3opaxpv9lwN+YIECWgMOekGESWtE5j236huQlIzo+mD4yHW0FMOW97uGTwQL3WZfGvcCjqqRa9F1Bu5gUkk/iQ59w== 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=N9FBFjiGx+aOtpukFxjK7ItkyhCuufz4ouH0jhONJW4=; b=zzfw6Z/e0CaTC8sXLt+uOLJKG+bMXi+Ss8Ni68OMjJkgdovD1pzYHtRCxLbxgDiht/fOfnWHQQcd6MVX7VvKjt11wvPqkF/rUpSBEzdHovqnLv/48sYbV1mO569GonTw/EF9mlC33hDyNDMbv/9EzwvnBi4qDLjxbGl8xyJfqww= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by PH0PR10MB5706.namprd10.prod.outlook.com (2603:10b6:510:148::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.27; Tue, 8 Apr 2025 10:42:35 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:35 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 01/12] fs: add atomic write unit max opt to statx Date: Tue, 8 Apr 2025 10:41:58 +0000 Message-Id: <20250408104209.1852036-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P265CA0101.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2bc::10) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|PH0PR10MB5706:EE_ X-MS-Office365-Filtering-Correlation-Id: 805b4d76-b470-4238-e5d4-08dd768a1293 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: X3YmlTeqyom+Tt35mdtfJYjGXhDjzwIE65F4cyoEO07/h7MqakbfmygbHt1v7TZgbxvpXBPxBR5kFH51hlLv3qaIelgL2x9hmy6RZvurk1M96pCNSLFQXZdjagN+C1GWrqtJcTsXi7F8mtMb3mYhkBASXiCerJDJXHXoEA+U6l4IwICXnPQWtvnxasaTqDqcdgV5ObxTPchSPSm+3xY+NhEyjoDBmzf+zxAmYALGCjZG/nYTeBMxDDCfieuAgKgzLgAkDhoAuAG37IZffuvUyYO3X+h48cyvXWhAqL/lfSPbv25QMNvBm0FOB4ikRRgwkRp4oc/xOdVCwZUFARABKWH1jdlF0gWioewx6+e4cewRjJa3n/nS29WXrFQ5jXH7jgXWmFVS1rRvrd8eQCSUovD92AemOTo4/UP7Xfn0ZI6KL2ugRU4WAiw3e0W7VPFRgFnjI+FXynO/ve/IB+pNAYKD3FIdqSKPlERJqmw7TUv6euPgr2Cdfg0atHWp6oz4nxtYpJOcdEBmrgC8mxqdH5pkTgk1cCO1qaB4eKanmswM21qi9luq2Yn8fAr3b83q6FWKsmmKIcCiU+h6L2nr2OwhBVXIueT6Ibwe2GmSgc1q9Q1vpLi/V+B7NXQ4CyI00vB93Z5Po67ZbcEKOruxq7GajhPBA3eAp1SJ4hH69voR3B67TWvhBAhZ1TWj+UHcsSizYPtORIR+8vFFzGOlZDlz2NA5iz0IB7Ej1DukpNaOUMp6Coz3KRLgRqRgH7pLvpY6Ayil7sSOqOrlWN8il/uhMC3VIjC7ogK61laK9tGLnHpb1d4nE2sK4egqFkMuSYwfx6WKuecI9cTwSwg7+9LFvu7qlhGbqCr+6yKJIATdgWYjFEafmVcT4ZHhbQ0IggD4gypzktN4dsfvq4+q+mpa0x/trFOVUTFhj5/teKqY2QX+pIAu8r0PMSvCUFJJuJ0OA+2SVHgKw+mSZu8iHwwPDkHTH6898c889sIF92fsCPfmizbq343iLdZUeRAKA/gG6BDR3yF16bnoCudZ1Mc9SESuCY+Zm5bPiwoLAoAwJvlw0qlg0JKvPy9xuCBgUwYvf1AEfeGFX+/NzU248HNRyp63yF0zTBpyzazPhBqhg4tweL79XRrawtShb7pLPeaUdsiZMTNsc6Z+fW6dtBlKcnBvsr9v3GOTecXsEKTTK0+tANaE0oI1Foratb6I9A5F6e5LSWvQMzObHLF5cueKgc9rAHxi7xw5dHopWVfSoaLQe5nFVTaeXLKI53VQA8ldl/MnqWnOQRSSAKS7ybRth9oQo881JGk9h7xWOIVjORfIau36YnAiDs8P0jr1BInBctfE+/NqHUiTw5qf8MJKtgDMCRFg8kbOewW5qzWW1R/jGmtFGT7MIKPcxFRm X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Qw2m3sn2esBgp56fqtprPzV/Hwe+OD8qYCrnqrkpzmGTgXZzo3MM05toDCt0au3TTlxmiarvusv0bGl9Kv+fq9NR5zGs3nnbz/jjTd3lO8m+djCKdvTycNf1aSzGqbqV2ou6GjEzCacrpt2oguGWcarKAjBGBS9sb6bzHcqCEcz2AjVd8eXxmvzJGGp8psykPdkmL0thWLeXKf2VorDt8tC/dSdG+AthI2nIyQ/P+LDbtbZ6sGGatmcC7ZzrEb89EHZZ3sJe0fzK7uu16GAgXOeAgc2F6Tx2jazvvY9XBmhTp99yb1Wenh8brg1zzR8RWS5qluqPR9OiwWu63h906Ay/jKBWHTdchV6TFxz+EUq9eB3dLN4B9rgJlNOSDjXe51Y1Gd2LYFTYJ33Bxf43P4LDY0mIErVTQK9sDs/RWRKz+kjvBLRzblSjMWQpdHTFHI/VlzhQPLsrHEdTrVxIKzOpa80SyeoOO4AajQ69ZMxabwewqhMj8NCARXvrbGgvwU6BPTp3GNVG/3kkaJzprHntly2uaCqfgAGnQ/boD11hU7YS4vivvLwQy96+gg/NXslMU525ZPGYmNC2EE0nzm0hcuf45O04dZRUf/JKbrVEJ7in6Ny+rRsxxlvbV0QSqsNpheI1nPPetxpkNsPhEJMELiIz1y6ZA/q7u/yBB1z2DnEyHZKUIGllh7MKycZ0SO2eA9udpjFrQsLHYoE5lVZu6DNx5XHnmNsUGp1kaXzOVBZdJoYogow6rGyVFe1r7NR2vlikTRxEKMS9ZILO6ZJfomawZ+6CMbLhPCXqjqZWZz+yOSuKzMGW6xrRbo7fN7cEWqEDNkHYa9AbW3iaNwottq6bDHhVtwmmRqgBEy7XIIBPuAJELTjnHk6ufj1PM9kHSR7GTl+KgpLUvHXrl4RBcMn1DsMnlJoHqDCunCroPh1ReP9sCqGFNXGslnGpuOb5fuNht0+2EqkRtdmNEOgzjgb0Dsn5ThvEnCkr4VtHszAy13Q2We5/tS2hlJKdHLSYEE0ckpkblCww1JzyadlvHyz2c/9V/jCxlQ8YJ8KKeQpWKTn8VqIh0c/F9Pzi5+11DUSpBJshc4c/c6dmRSOorxZ7aJ/qjz693ZpAneuW+YnttFY3b6X6tHEzwDaECqaZHOs0MKkxkPpEHb76p41xWCmT03O1ZLL4NMfyKifvsS86PSXOLTq2GHjmY3g9Um0tKxBUSgD9ybyXob1LUuw6vOHi+u529zFschw+OlpeXA39dGV0ZpdH7v2r4KLGUQWBEm3OSM9EvjNFWoLV2jnkUdbNGJT31obx1aq/E1XUo723h89r0Qawu37v0QzCNO0ey//gPvV23bmxvIbunw6iwzNO0ryAre+HOAII2gPcMa3xSk2YU1uutRmQWajgCmXxdkWwZLN3GzuFsO8lyN8dwAcA3C1qwPgQpeFChhAZ+Canq7v0wTHZACkAUZacUnqW+ulXVUrB/w5DaN62VgrZBv9xBXRzJjysEz+xErLdUymHxnyN7mDssmaK7tvAhWsGzT78mg09D3kvUqARjr2BWmwJ/lv3CkQbUY+IoRLRYnzMHG/R1wDRN6LqJV3d2HbMDvIIzP7yEkNd85bAsg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 54XBu7au4NbycbdNyjSjh9Mj42q0TU3Kv1ruNc5vJBvEGpoFFk1vJ+uflI99uRPZvhXALbnCDf7yXvIznutVQyhRGs9LEp5LNLVApQuldj6RlhaLjq/NCQ4/vXRqVtxtm6+G4OquAE1NFsi7L6Y+r7oJRjnq2CH+czaZDuoktvFkvUcxAK5y4g7PiC82toCLdST5+XHWGdTupylwM7lCjCU5hMFHNlNFGASXbYCHqk2joQyWWsdq7CIU4tIL3aO+yNXAxCdYu9liO7Jy2HtbVbXFGLCPUQfIoaf5bDZoCmKd01wVe/qgvq/789QbztDr39qFRh0MhNQx5Bp1Q/wevzk8//BNLSM2OYiKWSbgJwODa8CvQKyBLqTHBjvCjlcFrCZAsHShmEx4rxoI94YSU+8HayT+HQb9XfhFCww5kDiZckrh4Mr3iewLaT+ACeiK7cuN+3c1sqwXzSw4bRoeBMla0oigW2BrT63FbzVenIl+fNcwoji+yR5xY/Lefaz396gUDZCDyEvFqtEKGx2+FCfRHMS01KFknlBQk8SxhUvpsCuNGPG+UNGl9S3xDbH6w/EbHJHTe1rj/Hu2g8motYgWSO1pfT3HU3jvdsfIh+g= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 805b4d76-b470-4238-e5d4-08dd768a1293 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:35.1254 (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: PRpIlGJ070XJ4hhiVTp4aT/gWkxbPCpdfDOEd0iS2SxH681/0VIssMGtq4aqVXopOVBlBYionBpSeQTYRf0lnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5706 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: 6k0HpJqaAN--0ci4WvhOg70WM_QArQ9T X-Proofpoint-GUID: 6k0HpJqaAN--0ci4WvhOg70WM_QArQ9T XFS will be able to support large atomic writes (atomic write > 1x block) in future. This will be achieved by using different operating methods, depending on the size of the write. Specifically a new method of operation based in FS atomic extent remapping will be supported in addition to the current HW offload-based method. The FS method will generally be appreciably slower performing than the HW-offload method. However the FS method will be typically able to contribute to achieving a larger atomic write unit max limit. XFS will support a hybrid mode, where HW offload method will be used when possible, i.e. HW offload is used when the length of the write is supported, and for other times FS-based atomic writes will be used. As such, there is an atomic write length at which the user may experience appreciably slower performance. Advertise this limit in a new statx field, stx_atomic_write_unit_max_opt. When zero, it means that there is no such performance boundary. Masks STATX{_ATTR}_WRITE_ATOMIC can be used to get this new field. This is ok for older kernels which don't support this new field, as they would report 0 in this field (from zeroing in cp_statx()) already. Furthermore those older kernels don't support large atomic writes - apart from block fops, but there would be consistent performance there for atomic writes in range [unit min, unit max]. Signed-off-by: John Garry Acked-by: "Darrick J. Wong" Reviewed-by: Christoph Hellwig --- block/bdev.c | 3 ++- fs/ext4/inode.c | 2 +- fs/stat.c | 6 +++++- fs/xfs/xfs_iops.c | 2 +- include/linux/fs.h | 3 ++- include/linux/stat.h | 1 + include/uapi/linux/stat.h | 8 ++++++-- 7 files changed, 18 insertions(+), 7 deletions(-) diff --git a/block/bdev.c b/block/bdev.c index 4844d1e27b6f..b4afc1763e8e 100644 --- a/block/bdev.c +++ b/block/bdev.c @@ -1301,7 +1301,8 @@ void bdev_statx(struct path *path, struct kstat *stat, generic_fill_statx_atomic_writes(stat, queue_atomic_write_unit_min_bytes(bd_queue), - queue_atomic_write_unit_max_bytes(bd_queue)); + queue_atomic_write_unit_max_bytes(bd_queue), + 0); } stat->blksize = bdev_io_min(bdev); diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 1dc09ed5d403..51a45699112c 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5663,7 +5663,7 @@ int ext4_getattr(struct mnt_idmap *idmap, const struct path *path, awu_max = sbi->s_awu_max; } - generic_fill_statx_atomic_writes(stat, awu_min, awu_max); + generic_fill_statx_atomic_writes(stat, awu_min, awu_max, 0); } flags = ei->i_flags & EXT4_FL_USER_VISIBLE; diff --git a/fs/stat.c b/fs/stat.c index f13308bfdc98..c41855f62d22 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -136,13 +136,15 @@ EXPORT_SYMBOL(generic_fill_statx_attr); * @stat: Where to fill in the attribute flags * @unit_min: Minimum supported atomic write length in bytes * @unit_max: Maximum supported atomic write length in bytes + * @unit_max_opt: Optimised maximum supported atomic write length in bytes * * Fill in the STATX{_ATTR}_WRITE_ATOMIC flags in the kstat structure from * atomic write unit_min and unit_max values. */ void generic_fill_statx_atomic_writes(struct kstat *stat, unsigned int unit_min, - unsigned int unit_max) + unsigned int unit_max, + unsigned int unit_max_opt) { /* Confirm that the request type is known */ stat->result_mask |= STATX_WRITE_ATOMIC; @@ -153,6 +155,7 @@ void generic_fill_statx_atomic_writes(struct kstat *stat, if (unit_min) { stat->atomic_write_unit_min = unit_min; stat->atomic_write_unit_max = unit_max; + stat->atomic_write_unit_max_opt = unit_max_opt; /* Initially only allow 1x segment */ stat->atomic_write_segments_max = 1; @@ -732,6 +735,7 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer) tmp.stx_atomic_write_unit_min = stat->atomic_write_unit_min; tmp.stx_atomic_write_unit_max = stat->atomic_write_unit_max; tmp.stx_atomic_write_segments_max = stat->atomic_write_segments_max; + tmp.stx_atomic_write_unit_max_opt = stat->atomic_write_unit_max_opt; return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0; } diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 756bd3ca8e00..f0e5d83195df 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -610,7 +610,7 @@ xfs_report_atomic_write( if (xfs_inode_can_atomicwrite(ip)) unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize; - generic_fill_statx_atomic_writes(stat, unit_min, unit_max); + generic_fill_statx_atomic_writes(stat, unit_min, unit_max, 0); } STATIC int diff --git a/include/linux/fs.h b/include/linux/fs.h index 016b0fe1536e..7b19d8f99aff 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3475,7 +3475,8 @@ void generic_fillattr(struct mnt_idmap *, u32, struct inode *, struct kstat *); void generic_fill_statx_attr(struct inode *inode, struct kstat *stat); void generic_fill_statx_atomic_writes(struct kstat *stat, unsigned int unit_min, - unsigned int unit_max); + unsigned int unit_max, + unsigned int unit_max_opt); extern int vfs_getattr_nosec(const struct path *, struct kstat *, u32, unsigned int); extern int vfs_getattr(const struct path *, struct kstat *, u32, unsigned int); void __inode_add_bytes(struct inode *inode, loff_t bytes); diff --git a/include/linux/stat.h b/include/linux/stat.h index be7496a6a0dd..e3d00e7bb26d 100644 --- a/include/linux/stat.h +++ b/include/linux/stat.h @@ -57,6 +57,7 @@ struct kstat { u32 dio_read_offset_align; u32 atomic_write_unit_min; u32 atomic_write_unit_max; + u32 atomic_write_unit_max_opt; u32 atomic_write_segments_max; }; diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h index f78ee3670dd5..1686861aae20 100644 --- a/include/uapi/linux/stat.h +++ b/include/uapi/linux/stat.h @@ -182,8 +182,12 @@ struct statx { /* File offset alignment for direct I/O reads */ __u32 stx_dio_read_offset_align; - /* 0xb8 */ - __u64 __spare3[9]; /* Spare space for future expansion */ + /* Optimised max atomic write unit in bytes */ + __u32 stx_atomic_write_unit_max_opt; + __u32 __spare2[1]; + + /* 0xc0 */ + __u64 __spare3[8]; /* Spare space for future expansion */ /* 0x100 */ }; From patchwork Tue Apr 8 10:41:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042719 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 710D0267AFC; Tue, 8 Apr 2025 10:42:54 +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=1744108976; cv=fail; b=hsNZA9GXRFjMQRBulkZeLkEFwOywpTUNf1GcTKfd8XNYzjoId50l0TgwjFcGOXj+ZfLZV26/3DeMPhnzp3jkR1vuDRHzBX4xy6I+hk/GEzFjPbZq1ebh9AgVCy7dqOkoNOHwkqURgZ15AVQkU0+edbfbjKmq/d8FHNPqYsgQBno= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108976; c=relaxed/simple; bh=8qQKV1FtOcwnZ/845XnsWmXmISsJMyKouLAzMKMKnS0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=MATJFQ7tnsMHi/D7oEVzdQ3mY0XDEihRN2wdRK97hn6Y7qLMW63Tkor3fB85lEijK7KerWL2LgZ9afRm9pi5NPw2v/5VAZqo0DhtEe3wX3aIQ/mJcWAjLRZOYKqTPVWV2r93nQgZikDHmqrxijiHj2fzohfQiLT1Sm3CHKm+Mwk= 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=T76L884V; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=DjSLnqZY; 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="T76L884V"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="DjSLnqZY" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381u7ks001181; Tue, 8 Apr 2025 10:42:40 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=2Pc6qEAT2Y3hHxHFSlGChQjwkm9joyV+INFWibsIK3E=; b= T76L884V3GTQqJoNW5XnrpuQe4Hmb4b6aHP5vQ/+TdNVq/0zTvmNf42dROa5s5sg /IcVY4/YmWoGswAfQ0q7Ov0mF0IQdJEwL9yni90Da0PiP0UP8CgeLXXafcq0tuU4 RH/QpYJX0UAYi6cKLueJQkgeqJmYYPbS+5LwMFLDp7dG4SrAgdupOJps/gD3DnD9 4hHx0hrKicI2OK2JRC6nQYGW5zy09kaQ37o3/Sr+i6ohMOnNkytGRuW6ELO6WfLP jGCnL0BshhzKB/4ZG7ZRUSrQfrDDhzGCnJBPr19PV+IMPhZgGiadzFGD0BJeCy26 Hs7wnUiHCuu5qIy33N6RnQ== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tuebmgf9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:40 +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 5388gM2S023836; Tue, 8 Apr 2025 10:42:38 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2171.outbound.protection.outlook.com [104.47.57.171]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45ttyfc2pk-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=e+vyVgZjTtiR4yp4pat2tfWd6E3PSIZdST0V0sTnLIa36XOZ0qVqBBpA0l9UJ3mILNkbnU8CNHuXtxbob5CPinF6TxKPfhI9gI9JnwP62jU96XvkzrU6VnJsQl6W9ZwBGgO/H1m+3pwgP1/47a1mmNh/ftSEbF6HMKXZ7C9eXd9a5e7xvszMk2KzHEQgQCGPKN2NWKAGmw8mdDhqk4uEMQW13PLgq4Tnr47hlfhxgTJrOXJet2Pnz5oTeHzn08QxYC0BZ9Z+kfu/5M/sDPImX0VQwHHOX9KPDDFJOAgfyUG3Ld20ixD8eECQ5weOfxawaP4ly1xS+Y4L1Xda0cdoHQ== 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=2Pc6qEAT2Y3hHxHFSlGChQjwkm9joyV+INFWibsIK3E=; b=C5PPd3y+fnBzSjpB4JiD5F2c+hg6B91ZNCdjBewrbuJZe0uQT6i9s5VmvkDeBLqIBqpz5d4+4o/IW9QLTx57O7NiUnBam9hGiFJz4GvCqev9BvTUOM5TLpmvgAiMXEKKb+KoQeJB3o+5gTNhBTpyDjAKo2nCNkmNfGKkEpJzMg6HD/iklDw7bos3v7jpcbD4fIJ116orskb1Qe4pcm8I2iFlCaOPSiHf6Un4+i2k4HnVoCgp7odNcz5ocg/m4jW+uZIugnDBUE0cxD7jJ0zRZEnLiq4+Rap7v+tVZ+p4Hfe1jBP1RprEywnL7fweDK+KSaQ8gOwazFOOHdBOeUr1jQ== 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=2Pc6qEAT2Y3hHxHFSlGChQjwkm9joyV+INFWibsIK3E=; b=DjSLnqZYnKwi/al8i8HoZIrTEUMH+C8EzCMzRpI9v5phE+3VcK9u4osb8LAAhd21UKz8hJrmIUVzIaKshY8XCdPZPOcFd9yLoCfogJYkh3gD5HavAvo+xyb3IESA0kU7KwM2hgTE/lWbBQDWxNLFJ1tnbgwOrUZhdmbbPltk7G4= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by PH0PR10MB5706.namprd10.prod.outlook.com (2603:10b6:510:148::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.27; Tue, 8 Apr 2025 10:42:36 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:36 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 02/12] xfs: add helpers to compute log item overhead Date: Tue, 8 Apr 2025 10:41:59 +0000 Message-Id: <20250408104209.1852036-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR11CA0016.namprd11.prod.outlook.com (2603:10b6:208:23b::21) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|PH0PR10MB5706:EE_ X-MS-Office365-Filtering-Correlation-Id: f6ad238a-7251-4c6f-306b-08dd768a13a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: +3sVe/oJsDLDznB9hpCLtkppo0PAodhJRDklwf0RMqnpQ0hrp5c92hobdC0+ZhXK+mn58tlEpkBWiI55BWogyft5sVda5BVFv+pv/+NAaSuPmgBb9jNDSDiL1fTCV/NNWBaKgQR9r6hytC7658ON/pAprBH0CQzvQeHDlgnzE1s4JlmO12ZzBfUqhDzxjQFdYNkPKW9O15Zi6cAWivdh/YEAdqoQfMRXvJ4RkQkxglINnBCuYNFPj47RjITOB1lhQB8r1dxime2ddYWCf2lCBDjiGRZJ1xOjnMzE5kItOyr+7FxYmNHeapa5jpEcmwJWgEgoHmZXsjZqQbPQ0SbsMFPa9+U/X5dD+HemtcT1Bl34RsEmR55uo1/t//O5T6fDygPAeYcHJ9Pi0u7JNMJsbGsDnKxp0OutAVLIcu43knLBLpwElq9o5XoLqmpqAf+24vehIbU5RWIFT2tWESdXI39HOkAHbfAhi51rlQLe8jcfYf7WjXeW3yz4LV5dfIbmrWv046LsCBVubmY8eOA/JYn+ZdHqiV4Sj8lD0cjyQroBOnP36kNZo7nIfwxWoCqy03kgaWNXXo4ieE686MfbnqxFoNOyF9sO9rz3XGorsNgJB2tJwgyE51nntXWzx8zhYKsW5aaO58oE+KuTW1GohmlGytitTeu/tfBVMzkQc+dKY12k6vixKdLtuTgH3p/JDjfF2mTSw4oOZWFob01H8cD8RsyG+eB+jg/1eLwx4x6moVL7q+i+q8cnT05/fBdiKhCu9mlIvQUddm/zuvydF4YiOXP+cEVKPmGPSdEE57ERAzITtYEwenDGlvxejOU3M/2EszFs49xLngc/PPLCZ46G8/ReOGOdBn2zlPGbTqe31bbZnFAVHD10P0Ij8BLP2rLI2rgrFWvpYzoRGWZ+AsBcI6na4x5490TJH3zY0UfaeDYC05VSNVfYsrvUGKLH6DL1s8LMfjHqfv7vOAj0nAwJWhafovmQ55KHc56aTWz1hDtHaEDKB30JHiCIU+xvOg/3tJCvTR8EjnYRohmbPlgGyPZEEmYLfUFFA6E/d7nMwTlzNljbIXi/IpljrfsbbiL5qrsVKYpj2BclWufoOTIYjk0r/BaiRC+9KxQLWY6dxWSpZ03zatjUzy/FN+l3llvrurr6GVobxIbwOUMd3m9LMJnktrwmE9S1KAycztx9xzCS+0kNBQ79IY35+cdbWg4II1vwyM6sfDOKDaXWbjSl1OCEpF7iH70mzYQ0SIL+01VtInuSmCl60HJlqyztS+I1ZloZHLC9JQT9jAlbF5YD7asx3WcQjFHBk3hpEiLnzHE+3ya+kWClb71D2buhCZ0xct7AzFSLMELVYwPQCR8i4ZxQd+f6C8anLjm7UCxC+IDLbSUufJtMe7p1rDTL X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TCiCw8/dauQWvMJFww7J2lngKP6XrHPCkzbq0GucmGlE5p7a93bZZjZESW0sSNsHn9BZySFGyLfW8s/Cm7FLM21mBcgwhrnDcNhcHG1cR6p55B/uLElQ1b0HtN+ux9x5+mGOgW5ln/DtlPM4VO5MbEUKNVetNi2sjnGiVPCh794Bjxsfvc9KS2ou6CGKj8adpYIOC9NWTh8H/PdSfJixpuoaS1wylOF+0jaoU6LVs+UDQeKM/0Kh6mQ7Z+56UZi0eXgLlhWY83uwcH4H5Kmdfy9oD6dvMashHOcZkki7qDCELacgtYGhJI9ykOmH0d0WQrTXoE8guBrWtSHQnl2/YxMA3dn4/yFK4kJNtAuKYuMMtcsBn6CK3SJp/pGhPSKHowXVZeQWJwk0KPoPnwVo+SBwiCiVF+hQPQHGNtlENPhasDfsDh42QN+4ePrc59nacKvZEY4HX4T4riep8JtgMGTJAz41eYEmwYaXMtbWLDvE6xlglO0ao6AIqFuoixGjEBeIjuqLZOvNkTOnbBlZ+0ECr8XeSkuM4bmxXQHEVKWJqYwu3qMlF5oxT/JWw5Hcduv/tkvh+CvDATWxofTJ8F5sXzYPLfGxPRUmuu19d2GOcrUf1qgtWhm6GaKIkBczjVzpsPU/v3pG5H4AbJbl5JxDMSP4LxB1R1iCrHkNn5dvrK4w7DXHMqg2X6MUs+to0uFuCzLNkEm4lidysx85xa61mrg0k9R0LSOEMnaq4QMdtqGBxTImbzKBe230oYFJE9K/JBfAZ9K9elXNqnmMRY6RekCwjKHNgYoNqH2JMF1Td/aFy8d8WjBkd5Zt1VAxkoK7tavgviHzYhX+D3u5XPyJ/DHhef0qLTRHWQ6VxZrDXLveRCuRQor/kM7XFJpIXBJ6JNcKhPEDqCoH0DmvXhScnHraG3GYtFSIzUzY/budo20zjD7mdcEtIPXA+jQfN0ee0H5bszGI0FeGSAafENklEqz2WysY0d8Tg4ToFGFFFr0p9ooHD7kS/gDS3eVDKUzx60W4gkf9C6LepvCUX+/OwW9fpJuGSB5v3VkjzXlj3FFoB/kWu3zk3bumUSnHKUf35oNcYjkW7uHEcoC1WDg4U4oPmQ0e+WnJoNyiRw9ryLkD75LyHUdXRlSHjQ/WTpfLUhiLapEXsi7ZHE+u6z4LHzIL1qW5NFgKY5QasUC76WFJj0jp7HtFZ84Bet1daFJi11T5wMmtHxWdzdgevenzZhDuyIip6uLnBaCkRC/Amluw1CjNCYbTqxKqGoAybLZckMaFu66oGj3kl9iQ6mT7hHPFeaA7iOARp3pDNMearV6kRUmzEgOMOacrFWk/MEOhiSWlsrFasFROxI0wspVPoTk0VbrgtBiJWaJ7P+ElylW+ukOPm2gYjqFCx42I48/z8wNA5D4duBzLBOOAxvYlLkMeOJgEbmCPMuXex05HuMSNHfDUojAOFKxDZMQI8YfbY0h24Ttg6GKVmdcmEsv55miPEx4PKuHLsoU6VJGZC6IpITLQkv6KAV+87LBtFPaTpCWrNhS0QKZLx3kFTkd2wEH/eu0hc27rHERPJQclfluV/nmxlVHaG7XLg3yQO/FCOw3dhQCDIJmYSWXcdA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 6ekOC4TKmyOdbJ+si0qm7xGPYwTB4FJbRMNbE0nEMGKmECAA66uAKnHduPRrApsPt34cFctDX/b4Nygq3+SZF6kE3YugPfhNwwM5x00uOiPxVAOyMFv01+MM+MGgkPYRJDLuNtDwWaouw37LySYAFqOVgSQDBo1pTX6UOTHCziZtMljgDdkqVkZ4I9H5EJWVam6dnfbbUDHAdLYDGZV+FSdFjqlc/2mN8UfCcMOlMi2YPBNA9gFsY86KTjveiPISQODt5EvuLGWKu0VroQX6pUl4bxl0m11EmLuekbl+Zi6zHrxrMCZ73o1v60AX+F3hASIxsLn/tgzYZh4r1ATljxVN1SNcBEeo8GiUIyiyD/Sniaz0AFQafNpOMpowc6+0WgUV22rx8Ht6inT3TdMewd2UlcTvfcpsoJnUn4bU6eBtsIVoxjL5iBSrrILfyZa31YXIzeaw1lmFNRioJolZ++kV80yLWSiQRBXogr5VpyOZQHKvC7dbTpBxhvGirKfAHAQsaN0WbH2SNLdLg9BMYur14pCIjXKrTOCcy/73r/y05fjWgOLSs828jzdZdx+e3vLzv9yC8qyYK9sHt34LtRgR9zCqJgFId+9AuvyNenM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6ad238a-7251-4c6f-306b-08dd768a13a1 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:36.4679 (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: M+Mad5bc5rlM+8mQhSPH8LRBIqcqt2KYpX+VCgZiXqRiaZ+zEGE7Tla/syTlbosKpVvNydr/wymzBt4sLrEiMQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5706 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-GUID: gzK36mZwETmPo_cwXct7LLKTjp6mqkIN X-Proofpoint-ORIG-GUID: gzK36mZwETmPo_cwXct7LLKTjp6mqkIN From: "Darrick J. Wong" Add selected helpers to estimate the transaction reservation required to write various log intent and buffer items to the log. These helpers will be used by the online repair code for more precise estimations of how much work can be done in a single transaction. Signed-off-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/libxfs/xfs_trans_resv.c | 6 +++--- fs/xfs/libxfs/xfs_trans_resv.h | 4 ++++ fs/xfs/xfs_bmap_item.c | 10 ++++++++++ fs/xfs/xfs_bmap_item.h | 3 +++ fs/xfs/xfs_buf_item.c | 19 +++++++++++++++++++ fs/xfs/xfs_buf_item.h | 3 +++ fs/xfs/xfs_extfree_item.c | 10 ++++++++++ fs/xfs/xfs_extfree_item.h | 3 +++ fs/xfs/xfs_log_cil.c | 4 +--- fs/xfs/xfs_log_priv.h | 13 +++++++++++++ fs/xfs/xfs_refcount_item.c | 10 ++++++++++ fs/xfs/xfs_refcount_item.h | 3 +++ fs/xfs/xfs_rmap_item.c | 10 ++++++++++ fs/xfs/xfs_rmap_item.h | 3 +++ 14 files changed, 95 insertions(+), 6 deletions(-) diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c index 13d00c7166e1..ce1393bd3561 100644 --- a/fs/xfs/libxfs/xfs_trans_resv.c +++ b/fs/xfs/libxfs/xfs_trans_resv.c @@ -47,7 +47,7 @@ xfs_buf_log_overhead(void) * will be changed in a transaction. size is used to tell how many * bytes should be reserved per item. */ -STATIC uint +uint xfs_calc_buf_res( uint nbufs, uint size) @@ -84,7 +84,7 @@ xfs_allocfree_block_count( * in the same transaction as an allocation or a free, so we compute them * separately. */ -static unsigned int +unsigned int xfs_refcountbt_block_count( struct xfs_mount *mp, unsigned int num_ops) @@ -129,7 +129,7 @@ xfs_rtrefcountbt_block_count( * additional to the records and pointers that fit inside the inode * forks. */ -STATIC uint +uint xfs_calc_inode_res( struct xfs_mount *mp, uint ninodes) diff --git a/fs/xfs/libxfs/xfs_trans_resv.h b/fs/xfs/libxfs/xfs_trans_resv.h index 0554b9d775d2..e76052028cc9 100644 --- a/fs/xfs/libxfs/xfs_trans_resv.h +++ b/fs/xfs/libxfs/xfs_trans_resv.h @@ -97,6 +97,10 @@ struct xfs_trans_resv { void xfs_trans_resv_calc(struct xfs_mount *mp, struct xfs_trans_resv *resp); uint xfs_allocfree_block_count(struct xfs_mount *mp, uint num_ops); +unsigned int xfs_refcountbt_block_count(struct xfs_mount *mp, + unsigned int num_ops); +uint xfs_calc_buf_res(uint nbufs, uint size); +uint xfs_calc_inode_res(struct xfs_mount *mp, uint ninodes); unsigned int xfs_calc_itruncate_reservation_minlogsize(struct xfs_mount *mp); unsigned int xfs_calc_write_reservation_minlogsize(struct xfs_mount *mp); diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c index 3d52e9d7ad57..c62b9c1dd448 100644 --- a/fs/xfs/xfs_bmap_item.c +++ b/fs/xfs/xfs_bmap_item.c @@ -77,6 +77,11 @@ xfs_bui_item_size( *nbytes += xfs_bui_log_format_sizeof(buip->bui_format.bui_nextents); } +unsigned int xfs_bui_item_overhead(unsigned int nr) +{ + return xlog_item_space(1, xfs_bui_log_format_sizeof(nr)); +} + /* * This is called to fill in the vector of log iovecs for the * given bui log item. We use only 1 iovec, and we point that @@ -168,6 +173,11 @@ xfs_bud_item_size( *nbytes += sizeof(struct xfs_bud_log_format); } +unsigned int xfs_bud_item_overhead(void) +{ + return xlog_item_space(1, sizeof(struct xfs_bud_log_format)); +} + /* * This is called to fill in the vector of log iovecs for the * given bud log item. We use only 1 iovec, and we point that diff --git a/fs/xfs/xfs_bmap_item.h b/fs/xfs/xfs_bmap_item.h index 6fee6a508343..655b30bc1736 100644 --- a/fs/xfs/xfs_bmap_item.h +++ b/fs/xfs/xfs_bmap_item.h @@ -72,4 +72,7 @@ struct xfs_bmap_intent; void xfs_bmap_defer_add(struct xfs_trans *tp, struct xfs_bmap_intent *bi); +unsigned int xfs_bui_item_overhead(unsigned int nr); +unsigned int xfs_bud_item_overhead(void); + #endif /* __XFS_BMAP_ITEM_H__ */ diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index 19eb0b7a3e58..f89fb81517c9 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -103,6 +103,25 @@ xfs_buf_item_size_segment( return; } +/* + * Compute the worst case log item overhead for an invalidated buffer with the + * given map count and block size. + */ +unsigned int +xfs_buf_inval_item_overhead( + unsigned int map_count, + unsigned int blocksize) +{ + unsigned int chunks = DIV_ROUND_UP(blocksize, XFS_BLF_CHUNK); + unsigned int bitmap_size = DIV_ROUND_UP(chunks, NBWORD); + unsigned int ret = + offsetof(struct xfs_buf_log_format, blf_data_map) + + (bitmap_size * sizeof_field(struct xfs_buf_log_format, + blf_data_map[0])); + + return ret * map_count; +} + /* * Return the number of log iovecs and space needed to log the given buf log * item. diff --git a/fs/xfs/xfs_buf_item.h b/fs/xfs/xfs_buf_item.h index 8cde85259a58..a273f45b558d 100644 --- a/fs/xfs/xfs_buf_item.h +++ b/fs/xfs/xfs_buf_item.h @@ -64,6 +64,9 @@ static inline void xfs_buf_dquot_iodone(struct xfs_buf *bp) void xfs_buf_iodone(struct xfs_buf *); bool xfs_buf_log_check_iovec(struct xfs_log_iovec *iovec); +unsigned int xfs_buf_inval_item_overhead(unsigned int map_count, + unsigned int blocksize); + extern struct kmem_cache *xfs_buf_item_cache; #endif /* __XFS_BUF_ITEM_H__ */ diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index 777438b853da..3454eb643627 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -83,6 +83,11 @@ xfs_efi_item_size( *nbytes += xfs_efi_log_format_sizeof(efip->efi_format.efi_nextents); } +unsigned int xfs_efi_item_overhead(unsigned int nr) +{ + return xlog_item_space(1, xfs_efi_log_format_sizeof(nr)); +} + /* * This is called to fill in the vector of log iovecs for the * given efi log item. We use only 1 iovec, and we point that @@ -254,6 +259,11 @@ xfs_efd_item_size( *nbytes += xfs_efd_log_format_sizeof(efdp->efd_format.efd_nextents); } +unsigned int xfs_efd_item_overhead(unsigned int nr) +{ + return xlog_item_space(1, xfs_efd_log_format_sizeof(nr)); +} + /* * This is called to fill in the vector of log iovecs for the * given efd log item. We use only 1 iovec, and we point that diff --git a/fs/xfs/xfs_extfree_item.h b/fs/xfs/xfs_extfree_item.h index 41b7c4306079..ebb237a4ae87 100644 --- a/fs/xfs/xfs_extfree_item.h +++ b/fs/xfs/xfs_extfree_item.h @@ -94,4 +94,7 @@ void xfs_extent_free_defer_add(struct xfs_trans *tp, struct xfs_extent_free_item *xefi, struct xfs_defer_pending **dfpp); +unsigned int xfs_efi_item_overhead(unsigned int nr); +unsigned int xfs_efd_item_overhead(unsigned int nr); + #endif /* __XFS_EXTFREE_ITEM_H__ */ diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c index 1ca406ec1b40..f66d2d430e4f 100644 --- a/fs/xfs/xfs_log_cil.c +++ b/fs/xfs/xfs_log_cil.c @@ -309,9 +309,7 @@ xlog_cil_alloc_shadow_bufs( * Then round nbytes up to 64-bit alignment so that the initial * buffer alignment is easy to calculate and verify. */ - nbytes += niovecs * - (sizeof(uint64_t) + sizeof(struct xlog_op_header)); - nbytes = round_up(nbytes, sizeof(uint64_t)); + nbytes = xlog_item_space(niovecs, nbytes); /* * The data buffer needs to start 64-bit aligned, so round up diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index f3d78869e5e5..39a102cc1b43 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -698,4 +698,17 @@ xlog_kvmalloc( return p; } +/* + * Given a count of iovecs and space for a log item, compute the space we need + * in the log to store that data plus the log headers. + */ +static inline unsigned int +xlog_item_space( + unsigned int niovecs, + unsigned int nbytes) +{ + nbytes += niovecs * (sizeof(uint64_t) + sizeof(struct xlog_op_header)); + return round_up(nbytes, sizeof(uint64_t)); +} + #endif /* __XFS_LOG_PRIV_H__ */ diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c index fe2d7aab8554..02defb711641 100644 --- a/fs/xfs/xfs_refcount_item.c +++ b/fs/xfs/xfs_refcount_item.c @@ -78,6 +78,11 @@ xfs_cui_item_size( *nbytes += xfs_cui_log_format_sizeof(cuip->cui_format.cui_nextents); } +unsigned int xfs_cui_item_overhead(unsigned int nr) +{ + return xlog_item_space(1, xfs_cui_log_format_sizeof(nr)); +} + /* * This is called to fill in the vector of log iovecs for the * given cui log item. We use only 1 iovec, and we point that @@ -179,6 +184,11 @@ xfs_cud_item_size( *nbytes += sizeof(struct xfs_cud_log_format); } +unsigned int xfs_cud_item_overhead(void) +{ + return xlog_item_space(1, sizeof(struct xfs_cud_log_format)); +} + /* * This is called to fill in the vector of log iovecs for the * given cud log item. We use only 1 iovec, and we point that diff --git a/fs/xfs/xfs_refcount_item.h b/fs/xfs/xfs_refcount_item.h index bfee8f30c63c..5976cf0a04a6 100644 --- a/fs/xfs/xfs_refcount_item.h +++ b/fs/xfs/xfs_refcount_item.h @@ -76,4 +76,7 @@ struct xfs_refcount_intent; void xfs_refcount_defer_add(struct xfs_trans *tp, struct xfs_refcount_intent *ri); +unsigned int xfs_cui_item_overhead(unsigned int nr); +unsigned int xfs_cud_item_overhead(void); + #endif /* __XFS_REFCOUNT_ITEM_H__ */ diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c index 89decffe76c8..452300725641 100644 --- a/fs/xfs/xfs_rmap_item.c +++ b/fs/xfs/xfs_rmap_item.c @@ -77,6 +77,11 @@ xfs_rui_item_size( *nbytes += xfs_rui_log_format_sizeof(ruip->rui_format.rui_nextents); } +unsigned int xfs_rui_item_overhead(unsigned int nr) +{ + return xlog_item_space(1, xfs_rui_log_format_sizeof(nr)); +} + /* * This is called to fill in the vector of log iovecs for the * given rui log item. We use only 1 iovec, and we point that @@ -180,6 +185,11 @@ xfs_rud_item_size( *nbytes += sizeof(struct xfs_rud_log_format); } +unsigned int xfs_rud_item_overhead(void) +{ + return xlog_item_space(1, sizeof(struct xfs_rud_log_format)); +} + /* * This is called to fill in the vector of log iovecs for the * given rud log item. We use only 1 iovec, and we point that diff --git a/fs/xfs/xfs_rmap_item.h b/fs/xfs/xfs_rmap_item.h index 40d331555675..0dac2cfe4567 100644 --- a/fs/xfs/xfs_rmap_item.h +++ b/fs/xfs/xfs_rmap_item.h @@ -75,4 +75,7 @@ struct xfs_rmap_intent; void xfs_rmap_defer_add(struct xfs_trans *tp, struct xfs_rmap_intent *ri); +unsigned int xfs_rui_item_overhead(unsigned int nr); +unsigned int xfs_rud_item_overhead(void); + #endif /* __XFS_RMAP_ITEM_H__ */ From patchwork Tue Apr 8 10:42:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042718 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 B22CF266B73; Tue, 8 Apr 2025 10:42:53 +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=1744108975; cv=fail; b=Jxp67CMu01P5H3oJKIglUm4nYi502MMkr9RBqVLsrmlLCP03K+sNlNX9LxD3z8WEZuioaNkZB79guV28iPUga5J/OzY0VIzo9AdChj0g7e5A0Kp06lifnz9ZDHhivI+gW0xwvLx1L3CFDbQ36QstjaCdxWwYSy0QgQqIzcfdD/k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108975; c=relaxed/simple; bh=WTXKdoVW+HzlSznAqaJPaOsYk9MdrDGVK3c+oYJ0ZKg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XZ2nBuHGYZYa2eI9so0US54xAbZ10KeIkTPwppcw02l9st8CcQLHWDZGlm/uwsiLWuNUd7TjrUWVQKOsWS9q5MCa50CiVRKI5ir4yDi3Kp95yxc1mc0317ouPkNGlQBu6MfyEY693AH14pp262wk0i0GqWLfjB2if8dMKWMawQg= 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=CH3nUfyP; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=jrH0+TLG; 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="CH3nUfyP"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="jrH0+TLG" 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 5381u74I023244; Tue, 8 Apr 2025 10:42:41 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=AA1W8cz6KEXhmBCLvInw5J5e8A8DF0WWsK69iqB/foA=; b= CH3nUfyPFZSuo+2crFa14EbGmUeYUldBSKXkLvCahVD1oSXTdfBu9RKSwfTEpLj+ 3WFtouEzZxiQh2D8iAmcyZXgMvVDy6PQSruR9uxZiCcVQzr6GiC/5OvhVNvvLsP5 lGW10xXyIKnc6wKcp7JBL20ChHpISLzV6C8veLQOgE7cuFQk0P4C5p1UyU93Bco1 jzbenIzbQhe3psBXN8F5FUbiIaC2+QhHDNDoHaixW+A1ipLRJoD7JjZOxcHTWLnI GY/V+1LLxmLDSOpxhUI1ByjfsGVTaGmNtud82LV7guZbZ+eVMIqf0klV0+CL3KzJ g4UzBxYPb3QVqESNd2H2fA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tvd9vdmu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:41 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5389JfLK022130; Tue, 8 Apr 2025 10:42:40 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2173.outbound.protection.outlook.com [104.47.57.173]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty9tw8t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T0hGGWGZ/bJYoNLhVoveuXRRzU7+kyd+vceU/MZpf8lznQ6jSppJ5JAbudSMFyL/Zh/PE+FXzt+Bl7UhLedLGEKO5UaevncCQxCqf6LBenqc+j+maHpqb1vu0P1nZjiSFYbuFytwIwxwnCHYvtdYrpQj+Cet/OmenkK0309qk82DdgxgQxPH8OQpAb5FoNB2x3CojK4WdWeC3jzViLumh08UBdwfzVLifS+kKiRr/xV+OF2frscF/8mGy7jKc9ebEyDOO7rRi7r0rZonaYwfpp1m+2W9Ovr3lDw1kWFecytiszmDfyJClyE7Njg2EqKC7RzxWEDTV2Rd15lPTiQcPg== 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=AA1W8cz6KEXhmBCLvInw5J5e8A8DF0WWsK69iqB/foA=; b=qxGktuqqsb6hHPv41cJa+LES1rnxaQWYbHPgUDEYI9XqQr6GyYsBAKyzXvP17iAhojsX5CLRDasKTwoR4S8z7kZU3i31g7DDJfyGpBV7yE2+wME9sgvsUquvGGsCQeeUJA2IdnzBByav9Y8/RIeTELXx9C5017xRc0fZIxXRb6BqCU5d6LpgaWUaxJp9I7iHo1SKWtHfFz3vN+WW3Cxy/CWBuGy1cvRl1+x80clNAzvvaCEilKoUHi5LrGgd+YD2HJuDO7ib7+DlklnoOcu7fV7+XTdEpWLobRncSyGpBLCQpefMVgwtkmM03rar+00K8IJdQl74xOzivPAofbFtgg== 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=AA1W8cz6KEXhmBCLvInw5J5e8A8DF0WWsK69iqB/foA=; b=jrH0+TLGaTmvlvdkb8FQIBrb3YmMp3ovOb9xJQfGuk/qWZ2o96fr/uIGxiHtgY6duVTx9iihlkyZ49MBgm9b/wjShfUqYSUEPCdmtDil2procS/g+ckOSwo3bP9NFBMRsZWd39OAhXCVEm3BDzDJXUsPrGzAkEh09tUe2EtDVKI= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by PH0PR10MB5706.namprd10.prod.outlook.com (2603:10b6:510:148::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.27; Tue, 8 Apr 2025 10:42:38 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:37 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 03/12] xfs: rename xfs_inode_can_atomicwrite() -> xfs_inode_can_hw_atomicwrite() Date: Tue, 8 Apr 2025 10:42:00 +0000 Message-Id: <20250408104209.1852036-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR11CA0018.namprd11.prod.outlook.com (2603:10b6:208:23b::23) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|PH0PR10MB5706:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f2a6a3f-c482-47e8-8cf3-08dd768a146d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016|7416014; X-Microsoft-Antispam-Message-Info: ME9WGKdiIwuSTzXAh4wu5VvqtKLYyQBy1tfjij5dtNymWOsmoP4P8JLzQPzmM2zu/XLmo5bfF/69dWcVTmmPueubX3xbE35YmR6Dc27dDnsa9mhDcBHHvBalIZQLB/eCSW8lAHYzNOTRN4rJSW46buVoxif3e9I/7MxmKnhIMbQ/Yuu1+pmxISHpqUiV/HjLsSnTh3nobCqnwdBfDzesR3wmiAEldVhixzL0oDq1EmeUyTDv+4a5Zk4Hvfgivj0RegdlY+EpYPADDg0X+Z++GJklSZS5w5CH7L01u7rgaX8gBojYUetMSVpJlgPdEuvv6fZI+0eXy0d4D4LiaeYsfGCCS1illCivxtCP42tA1Cafj55gpDXip+ovKer6u0zXrAYEcQrs3CcE4ajfJ7QJDB0b0YKMlxio5NejDRRA7d3wzbXbKp2K3eIBEiA51SFvPnWPPdfI8jMYhbhYKFotLR/bH7AjTuvGfPFW8O8UakPJHrK+ew43I4J3Crg0ZCc7m3GD42of7hwUJ4WMw65nsLISi0Njn+ItE5kZ3a6hoO6Giam0JBAa+S9uLbR6aMVxlI1fsa7QOvgGA+EbpjGYCrMCAf/lF1arQOilQfPy6CoAoTrmzk/ClCh3jg5tULw058jMBOIWBUsnQLzhhPABYM7wvhHr1vvCiG+aGmsBfs/9bJbUVhOEEUoptBAlcDx1Ry3ohBXnDGQjdQUjdedycEshg4Sysza6jO98QqpnMwKXM+Lgf/dk+zJ07v8Dtj8N5D71yRHtPOXBcvZiNRn5EdCbzg/SSjWMmdza5O7tb+UKMoRYZ9giicI2xS4vMD3NU8V1mYfDT3RgADbNl01ggR1oofUF43a+COCJ6Hm/rkrw0e8rlMcIL0FSgRDuKLaQAkU1wA/HKphJkw32mZ8NiY8zJPuYJHZLLySlr9tsA2FkDYP7w++A0gFxztJyacsSjtYAG5zEC27BUWzPHX6rNyq6CehVYpLY4E6Ch1cV/kUvABka9D2XWbHUWvWJQ8otFlc6s5gyJyLGUMVtwOcxsenMkfSZNTGM3ghEDeiLVa0/9S3rP6ioaQq+oRJRWA16Bi0uUxsmhwKrtY2CeTyKMfHJIVSk0tXF632visRQJxNvVufuVrwTAxd9qaE5ZUyyjWsD7p2FTrFrg0L1V1u2T3iQvGBZuV5dlPk6cg878R4AYdlSPikSO+Sm/Kf2IZWWkVtLIiNHNEb2EnS9bPpGhmPgQUIQGcTngfYB2Iaz9cqwS+K1PxovF9XgE1Q6/2H8mKUoUYJH6iBOdaCv1/uyzKqjlAQ9n+jydeki0L5ct3qW/QCloyrscp9eES4u15lvQnnqGVHcg9XfutcJoamot8GH+hWQa5/LbyHxEbz/Jb3+3aj2lIrCYKA6DB6HRdHM X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Q3VGAtEbybgYmF0dkOwAkpITePKdQorsbKhJHwi1cDUOgNfKEqBH1JSx6+vBirhQcNCK67khcFlfAo540Xe+xv8tKUPRtkq4pV5boOKWv+/vVfJv10zMuKxcrzx4lu56ZhCS0/yb9DvSbhgD8TVDOV9rwihEaJGbc7gFvih/IZU76olcpXONcJDxBylSLYROtEPKawcAZJgxo6MfUvA/Nd/WbyqXYzSvugHTbBdda2oIc6f5ljUAUWA9UrLY/dnag72ycyOe9kDLgaDvjzVJM8Up/+3QNmgehPTJJjloOqP5SRWPxzC9AUCEiCtV2uaI6UETLxAJ05wBY0T50cZx8YcuACfmShjZregLT0ANwHm++6oMFdnLQFdecVUM5L1t64S7RRsOqJfJbSdVlqSoF2KYkGLcrCvA/ojcN8g8D8gLjetsex2utCgAM7S1OhQV0Bg1uxvnmUmzC1K1LYnhcXva93N4ucLmGUC1zemT+Fc0oDgygK/S6YAjs0c92jnFmaf+r6l+u52XxofKCc/wyJPYJ8Zx/AM5FqAUS5carcApthnAiZ+j3MtV8SCcfUGtuaWg9LO/MLX0KmzmHpsyOb9FGIxyWfbaixfoh0o6lP+8/99FpjEo+rndU/jsdoKiLYRUDYeUX81F1TiBLN/DuNUEoEwE5p3uqkvU+QEsUgqAmwfxD/Jai3ZUfy+xZQaHH4BeJVBfOLoDdJhD8MT/RUSiB/AKzU8OE9EJ3uYT+bxICXp8oHIiL4xKZ0kmJHcH0Z8nk3+xmKqhOLFa7iizfgIGRik7rdzICIBB6f9QzzUJ6ydawbzfnngKfjvcXY8XEoPdQUo4ZQ08COSwd6poMFZ0HSiEx6zziHz7fXEQeL3qCg0b7bv8oajM2RGp6uUrTQcYnoPRjHeSV7IYBhgYeuvlKV1xeFbC1pyCS5vLjuXR0XrLnQa51leCB5OqqRVGSdsLg6UMJs2ssyUDYG3A/RDutuwZ1OjTu0Rnv8nBRXgov/wM6UtAe/hZfBfUsA5VDSeidubKTX3cffcHkM18UfqPuKueq89A6SJqzXKneiZCIV5EuQFS+xrhxo1WeaZKuz5BnFRoAjVvk6ve0ros/Uj7ukBugO6WIkQgiitOEqFriN9aV+AiuEIv60yS6IAGrxkzrKm8ML7Z6LsQfCbZp0axHcxL4yw/rlRNTlzzFKn+XYbEwjn7GNggquobMwhRqZ8bHxwRKppxntEMhR0AVekh24nj5zedizDpt0ed6Jmop6mSpPnAOyLyGMdz6Wn9JJUjN7Po3d3iNSlRNRYoHFLWB/po7Tl4yXeSnPF9Y7jczZsGUkPNF37bL6qLLjP775qg4dZSA/CxEZkkP/3Qxn0ZzyJNHph5R/S1/bQN837OipY6Adm3CW4ShUHW8eQh1Ke42+hNYzKb/A6vMJ7W3Ss6GMCMxmIyzWrZOVzal+PNyqilSycpDbmwmHy6p8P4qnO3aizVDyLnkYTg8Z7IQLsEiI+FUsSCup0D/IGe0iN8XWV9+Rk3aJ+iokLgEjyqOjC0OnDhTbZXDJWB5eCYf9IJeLnzH1pxK1rNX/izLPOrPFs+OwUDPd5hVndrLgs3l+JTZHay1LrWz2mIFNSgig== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: aQEUUQg8vbr2gaD+q6cLVulfxD7aogji6lDWJxzSx+m8zzPbYYHntAAhhbArqX5D47bFSfdLUfPAiDyVFG8tNXrrNo/wYHBdGgAywHhCA+ZjbuUr71QXb4QBMUc0iqxjIrCoSg+PAiMK+Y/9n+i5AUG85ucP7GwuoUuWpHE5z+7hgZaU5PeP8pNe6jmYRBpzleVBO5WiVfYypZzD5a8Bn/q45wAMDK7LaFUifNM7ZAs2M+0mu4ocJVfVl3qxXTe8utdbqh96aLCa7PlwmOtUzY0HSJiJsvVRg4GM9q5Xh+aqVtxXYupKKhrUWOUfgHWX+8tjAZBtpK1PkH4uQASdnVhDZrqSwQO3polrPaTU5l0txskih1EQlX5y3YerxgypytU1/v5OqS3eRV62yRqBuD9MAcW+Ab1AT1iEIOyfCvupRu0RmlGRB24u194KsKSc0BrvaVdT8Xaa8Q9UMnVQQOYuMu6ar7iIuDeNdpP2DOshlYAybhbOU2zA1UtI3jZcaJ8+S53sc/uuRttfsBavxdAVoTs0Qtuhd53e3jYxr09jBeY3sakasCmdUQ4gh1PhdWM+owJCacHqyU6Ti3UTm2nn5dcNFzB12oWZ1KfQcmk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f2a6a3f-c482-47e8-8cf3-08dd768a146d X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:37.9180 (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: CCQNKPaHAILB0LPh/VHzdLsCP//MD7/WKP1b0F13f3OBJEsawwTbevKSAgRVHnbFzgHg6CJbPndE39Pg1r1mHA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5706 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: oDzf_dLV7zlKUZvF_dzytoYk_S3OkOGE X-Proofpoint-GUID: oDzf_dLV7zlKUZvF_dzytoYk_S3OkOGE In future we will want to be able to check if specifically HW offload-based atomic writes are possible, so rename xfs_inode_can_atomicwrite() -> xfs_inode_can_hw_atomicwrite(). Signed-off-by: John Garry Reviewed-by: "Darrick J. Wong" Reviewed-by: Christoph Hellwig --- fs/xfs/xfs_file.c | 2 +- fs/xfs/xfs_inode.h | 2 +- fs/xfs/xfs_iops.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 84f08c976ac4..653e42ccc0c3 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1488,7 +1488,7 @@ xfs_file_open( if (xfs_is_shutdown(XFS_M(inode->i_sb))) return -EIO; file->f_mode |= FMODE_NOWAIT | FMODE_CAN_ODIRECT; - if (xfs_inode_can_atomicwrite(XFS_I(inode))) + if (xfs_inode_can_hw_atomicwrite(XFS_I(inode))) file->f_mode |= FMODE_CAN_ATOMIC_WRITE; return generic_file_open(inode, file); } diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index eae0159983ca..cff643cd03fc 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -357,7 +357,7 @@ static inline bool xfs_inode_has_bigrtalloc(const struct xfs_inode *ip) (ip)->i_mount->m_rtdev_targp : (ip)->i_mount->m_ddev_targp) static inline bool -xfs_inode_can_atomicwrite( +xfs_inode_can_hw_atomicwrite( struct xfs_inode *ip) { struct xfs_mount *mp = ip->i_mount; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index f0e5d83195df..d324044a2225 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -608,7 +608,7 @@ xfs_report_atomic_write( { unsigned int unit_min = 0, unit_max = 0; - if (xfs_inode_can_atomicwrite(ip)) + if (xfs_inode_can_hw_atomicwrite(ip)) unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize; generic_fill_statx_atomic_writes(stat, unit_min, unit_max, 0); } From patchwork Tue Apr 8 10:42:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042721 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 DDB8A26981C; Tue, 8 Apr 2025 10:42:59 +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=1744108981; cv=fail; b=FDRSFcNV123MHxDqmWGdlyjlR5dy9OlNjRpMncW3RJ6pInmip3KtNNgxIo235VqZKoYFceFyATz85eEuap82+Ap2AdZ0L415lVwR31Aof9ryvxfaAA3AWOqG8WqZzkKQToskjtSdlkwmtx08rXBvUWoYqgaHz+wjQA8r+QOtYEI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108981; c=relaxed/simple; bh=pra161ou/h8chlA9yXUQcjoXcHRvfZfy4MOaTpjse98=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=D2pdWvwPtxCg50A2pa1uoypvIgn3IdLVO10uOseqdGx2SpVgjIdF0VthQAGtMugpEZTko1aUgD218q35cLZsyY+GrmNra5W4PtkeNFUXvjLl9P+aINzzo5977bzBs7RmggAWZR0KUAZTCon6uAmBMWAKRfQWHuicnVgKJ4gIHfU= 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=ahYO17Np; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Sa+G3vmp; 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="ahYO17Np"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Sa+G3vmp" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381u6Fg001158; Tue, 8 Apr 2025 10:42:46 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=4MVFHj2jeR3CYDsF+FSYfPKETrPlcvNbqSeNIdTwSqM=; b= ahYO17NpqqQdXIAbhcn0gvQlXClckl6QEcLEHiRtBVrZwbycrhupeBi0sHMeQT1R gN/wFs+qUMBArvguRhQziUE+rQrAACq7v1wZo+4DkW4eo3yf1ACSxECyPyWWQ4gH MKnM5hbHD2vI7pA7Jxr91yMNhs4iu7G/INeWgzLjyb7VTxM5yl0tOwH4+lxIWOfU rS7PxMdrJZVmrO7TP6A5ugvDVJY+VF++t4Z8IbvQa8wRfNjRtmkoP4FgnEyMLK1f f1lmaSVjcD5TdJWjCrOKyscRIj8Q1c4amEpENFZc+s69yoOEfdXmK9y+96Qw/lDe wxZh+ASm6TGYf4lU3QjQEw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tuebmgfg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:46 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5388s1Qk022488; Tue, 8 Apr 2025 10:42:45 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazlp17013062.outbound.protection.outlook.com [40.93.20.62]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty9twcj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ex9/UBaM63ZJvlFeFqGXTwiIsheWwAqobZVM7pl4lG+1hi47Dxx66IWY9tC2bNd2ClH7S7KSkbFK1pcHD49q+QVNMWVPtyjzV8n25lmi3fFmLJtZqDT8VW+2YZZ6X0SdCTV1GxCHgrtT8Em7vYmjY/SCfaUgQ1S5F5GrPoA493CF9FMOXuaz6BRjia9bdidao69TAACUcNi0oNRq31OFIBM+UpjL/OnppQe6vE6gwoCO55BPjbrNbyqLaFA+9vPxYRl8zqmHj+7rjuK0tGnWzhFJ3DJuxXkZC8o8Z9VQ9HfpB45w6wjpg04ezkiaE2Z67Lx8SiCYAPu/yyUM0900LQ== 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=4MVFHj2jeR3CYDsF+FSYfPKETrPlcvNbqSeNIdTwSqM=; b=vhLO2csYI0Bctu4gQA4fhTMghDcGhw9ZZz5nPpGSlnMNp79d0AcXQAIa/VLk1sFFKER77ZyVJ9XHLtUoRuTIXb3XXKL+junKJCCNWdVuZPC5gdsfigSY1y7lvy7MSeGlH9bAgqa/fZJi0fDxDWmyNfaaTaTSskHCAG59nJrdX4kS1bDt5AYc4P4HniZ3chs+yZIvh8qr1in9dsnbzx8RWN5XuLDSkdXke/tlKgt52kNbwBOHLN1KaxKtfMosd54aVV1/uW8NGZXK3RIl9p9it1/NsTmgY+mjzRq7YrIkiArAlBZ/VH5iQ9VxFEhjtF/1HYRcMYMPy3CQsuv/ECx/cA== 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=4MVFHj2jeR3CYDsF+FSYfPKETrPlcvNbqSeNIdTwSqM=; b=Sa+G3vmpiquJzF5E1K/Fi04oixg7YGHfNOyPCAluIZ59YiyWJlB9BMocHvjVic7Qwhwwzu8sBRErKQpaQJoGkV4f7YPAb6u2IELIYio2f7MV780PyOdV3NdYsZyZiFzBMvozlPEXFFLdbLbeZDHhtlKZuZcBoHc+ue+jH5/Ul1g= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:42 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:41 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 04/12] xfs: allow block allocator to take an alignment hint Date: Tue, 8 Apr 2025 10:42:01 +0000 Message-Id: <20250408104209.1852036-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN9PR03CA0920.namprd03.prod.outlook.com (2603:10b6:408:107::25) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: a4ac1df7-196a-4353-c83f-08dd768a1526 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: vL9tZfCOHpPvnnqSJ+P0SLyMUty39ZEPNYIIMJ7iar+/1QxDBJIr5+cSb0BJUbt3ODFeqx6MKZt312/0+KFmlbh8CpRlvh6vsMturqFzTHPtAM1XyBd1IZGrkrV8Wo8v3ZbxxfJapKg3umbq8xVQVvmJWYNdkuFcEIom8DN+OczCkSMfXpeB8Dg8P6MGOJN33dXvJyro8ZZCJ3zo1WdMlEMBr7buv6IhN1Rqx4YbqDly5+XrQGsmr5l+rwVvn6FS/VZ8nWRaQBtBRRziB2f4xke66UNlMMS0ff9w4XFxe9SMGENdoEPjU3en174o7fMF1cwP8YJtEk+XobmkQYMkrRAbP8EAZ/pJR7UuwvfQRADduDOdvjI0AwX7WJ80IKk/gizqihwsDmGyZ7bJ9QfR0HKxuHMFqkkuURkEfFFvvDtYZoRHnAcDh+x+aJflNVAzpD7/raVggfYUuaxZLb/E4CBWxm/mLpzwV2cOhKbRFIVtvPPWxm1hnsV/c2+1vZ7clF1608HhdlCemQiFYCdQXVXnxbM5cRhf2UnLZ34HhDm9fXTrd/J0sLDN2LJZT1XPeBJ9UdYEcL2i3NGBveAXrJYE1m0VXSFXt1Mvo1hlojosroZ2XxpsPpms7HZ8DWQlDDbt47AQOUMGwzHzGpUDyNS3sMpen4WETsiSKZuFVqeThJD1rcKuVwVddqltj3uJ5PZ2JQuIPzDKi2nO4W4ri8s7/ryOqU4Qq5vF6gUZNuPFDqGC3OivJNxNU2+bKkB9Jje28ZOUGoCf3Zd2e8Q02QVz90tEJxrng5T8QGGk9HEibiCJEaO/ra941jYMvvW/WTi9+1L619pm7wzYCQqhvP4qu+K9FJYuhRjC2FKejFTIZuyOEznFpHsmmLKRA+GoJuMlAD7BzEQSfJYxacnFYYTieVspGKDSZQM2h8M1OkJWgG6p0YNlHaU+G37hPknB6hjtT99iSxgJr2sfZYNIfX52BuTuicLK3vq0jTm7sGm4Z+/2dpDhqO+PouDFu8YATy7/nxtZ3cKHFVYkMgeNzS2jB6bMXNiJgvRbWZBRK9m1bH930qILWPhuAIiL/DEODt1kLs1Jf3xK9rViHqmFTBBH01TJvMaXhYPs6vu/WLkrk+mFJ2C7qWtg+fM9NWU7/hvACxV0eD/wMLhki4oC3KnJ5acH3maW7otEcX3GFkh7UiAchg9Ux9kxXdWNkuFSL4F610HxbpfzBBwu4Ab11m21Bo4eMDony8AFd3l/Pe3xBUI54vaOPlJgsdlk4G+7bByhJEf7yRaZ7f4XBIc0yxC8a7j1qLfYt77rAJbwvGYKIh74gRHSRMrLEq1gCQsjOO9DStV4rJnmyuung/Wiqh/bmNc8fvkjpGYgLvkJqkI0ojqmG13D1bWFhWPl95b6 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QnhfIeiFxZ+vf+81HpLPpwALrXiIBYHvSNbPWxFyk/Cm1j6OgWmQSeVbVktkVnuJK0+42d5iuzNSiu12Zt6dIhSBCS7OHLWEdtqE47T8SKR4jPg53zBoEMfo22Y+on8TrS2Kg+UEPq7XjUuUprL8mr52u6PH7gkTixeU+PGBCv++hynejMtvYI/7W4MrGHurevtAfqlRrp0I8trXpL7oXzVsRJORO14d/TSYc6fBWxw7/x4u4r4e3VFnkoA99QteGQMMGC4ai7BYorMv1xp2/mJ5p/GpJDb07+kxP1G5qb2Z3EU8VWXvIrzl8hCGy9OioilkeGuETdE5tW7BPv3MXUjvV0JoIo8lw509YRtHsl5O5d89lIS7NWBMRA9VFD6cUyzCw1IXDO6Bt6h7oz8KbknqGLMHM8A1jDMp2JOiKSMyxMYgbJinLhaFNzULzK2MVgDfj2UZL3WNbgwxdtNMqucni39m3JLFmKPpJ56fyMOPFSiAKfvLw7JlXdbfWXbb6qFab5tqu1YGxHAzWaDkAC88EGfodiJaOctOa0E5ODpEmY3ZZVmg2QmvrU1TenJTVyuz5qSkZNABtH8Hlxuzstw2xDmeJzebJZFBh7xpSScXv0iA2LeboXObyM4HptUU9CPHrD/2jHjkMFcMccJ9pppLvfHj0Rmuazc8avn+uq/GyiP3FuAT/wWv3sgup2/ptx2Gb0oSzxOJ7TII9EVA8LjnQ5hZS4d4HUjEhVu4hHdlQ2L7R1k5Bwor2ySWDOmUciVGKBUIZ2T1vOUTShtYRRLGnFktj2kAJt87RZQKdl9SS3oAal9sxIOAWDxRmRKGQu3hYFHVu01jGj8DpTW6DbBjrXwkoNYTg66y5N8moRLPOeLVs6jf04e66kGYTK6mtTFAjefHaHe3AulmHnB4i+eqNluXb0tkeNxasGdBMc/PQ3eHCgOgVL6GLX2Ad3wLuBHJt8YAgWVFZ2wBYiuy9xM3Ni4/oR9/NiAPAp7Rj83qCsTlFIAym0sZGT94ESpK0ULgRahLK0/jDYKxRQylraiU25/We57M+/+nomic+ONE7OE1sVfNVigPeWEHQ1B1blvpji0QaMd8uXKPQyU3rA7NRAK6h+avH2WdTBU2adyOrSlD3n+tAaQllKVzmE34qfFcq2MlSdO4sY/berNclCkCJEWNP+ydrG+2crT4RGVUG3E2HyEOpICd88xGGjvDVz7aE5i7KoSQcTDLVgkOSk5Qglc11AbrSAGyT43wVzEumbl48eUnhFGOS7+9919iIVWPx3keNPfdLac6WkaIU6e77kSdxZ2ldVydtqL4iYHwD75a+25Yc9BGN9f6o6FsjVZYuhu0ni01jFFw2KfJiYF7969R0yqwI8xeFJ8y1Di0SfK51EkHdIDFbRNB4EGJZn3ZgOUjeJzUgt5wJwh65stvWcl7YAXTqML65A7VKofjF/ZuihBg5xQ/IrcKHnvG4593ooAMzkrBzvew9w45iGoB5zIV8AB4EvgVExXFtNvVtrY+YsaHNee0DBIDwKkEsbgFc7i0YI4bPLNP5Eicl34+6FIYRWdlWT/+qm83n4TaWkX4H6JFcH6J3Foi1S1nziDqk2fxUT4CVfQQ9RE81g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: F5RMMNJClxIjYuKPSvrBaFfNPLYoPRSE2lo+h3q9JUM0/yMg5MoBqV8see+9IxdHLEeiXGepZq9zbcQFrNmoK4BEAc1VMqn7zttjMfQo+/8nHz6TImD6f4lkkSMlxzXcAM+BZ1Ab+hMacM7U32Ak19JwUQLcdwje7s3PrPa2EBCIoNv/I0niG8bvv0CGu+M5yWTB5yTMcYEaBe5rYGR5PV0ISwN2OaDHWBaJEwXvk2L+D2yEKzNNoI1IW748MRAgA+0rQJ4UDT9WGxE+BYIL/POu1t74EsbTscFPAhU8M6Qr+W7Uq8sBKl7VDjrzIlEUgbAaC2+8Xj3AncvAPPUjH4EnrvDgNo5iscriEkmf+dRrSN9udxDopDkLptn6VU5qR4UHnWU7Bjsj+yKoep/L+Z52LZP7ufmDWAZ7jUW1MRrMaFrnUdnf+kptRjZwShE51apF5kCGgCrFKgSd3UrgBXDT5YiU/DzjtEO/y2FFRhttHUs0ka23CtZW+j5FLEb61vTiptep1qhdVqQW2bvS26MlqbjCAz5w2g+qj9iuR7++Ow5BJS9SZfanE2pWqsnjo10TWzbCKFAZ/mRcCRGYAqX/JolJVeriBU84WNwS750= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a4ac1df7-196a-4353-c83f-08dd768a1526 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:41.6559 (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: cfoNzY/JgxgnLSnNhWVDLncROqzLZ2lesUnnZqhPwAWOXqEO3VKGslvA+1fDG03Qyv5EtZELZIXGRPfkbHLpqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-GUID: kl5d8kDJYMY6EB4p1yqD_qhIR9opm2ao X-Proofpoint-ORIG-GUID: kl5d8kDJYMY6EB4p1yqD_qhIR9opm2ao Add a BMAPI flag to provide a hint to the block allocator to align extents according to the extszhint. This will be useful for atomic writes to ensure that we are not being allocated extents which are not suitable (for atomic writes). Reviewed-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: John Garry --- fs/xfs/libxfs/xfs_bmap.c | 5 +++++ fs/xfs/libxfs/xfs_bmap.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 63255820b58a..d954f9b8071f 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3312,6 +3312,11 @@ xfs_bmap_compute_alignments( align = xfs_get_cowextsz_hint(ap->ip); else if (ap->datatype & XFS_ALLOC_USERDATA) align = xfs_get_extsz_hint(ap->ip); + + /* Try to align start block to any minimum allocation alignment */ + if (align > 1 && (ap->flags & XFS_BMAPI_EXTSZALIGN)) + args->alignment = align; + if (align) { if (xfs_bmap_extsize_align(mp, &ap->got, &ap->prev, align, 0, ap->eof, 0, ap->conv, &ap->offset, diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index b4d9c6e0f3f9..d5f2729305fa 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -87,6 +87,9 @@ struct xfs_bmalloca { /* Do not update the rmap btree. Used for reconstructing bmbt from rmapbt. */ #define XFS_BMAPI_NORMAP (1u << 10) +/* Try to align allocations to the extent size hint */ +#define XFS_BMAPI_EXTSZALIGN (1u << 11) + #define XFS_BMAPI_FLAGS \ { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ { XFS_BMAPI_METADATA, "METADATA" }, \ @@ -98,7 +101,8 @@ struct xfs_bmalloca { { XFS_BMAPI_REMAP, "REMAP" }, \ { XFS_BMAPI_COWFORK, "COWFORK" }, \ { XFS_BMAPI_NODISCARD, "NODISCARD" }, \ - { XFS_BMAPI_NORMAP, "NORMAP" } + { XFS_BMAPI_NORMAP, "NORMAP" },\ + { XFS_BMAPI_EXTSZALIGN, "EXTSZALIGN" } static inline int xfs_bmapi_aflag(int w) From patchwork Tue Apr 8 10:42:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042723 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 52BDA22B8CE; Tue, 8 Apr 2025 10:43:00 +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=1744108983; cv=fail; b=r/3c6iQu4SmhCBQAQdBtZ7B/ECIUlogZ5wxKimJSZVNQpHI15TsmEAaEjnIrme9uOmjRTqltPZ0EgZSt7cGorqVN3mHtzr+ztt4WPh/FGoEaJhfpgPf0RtWKbKtTUJ8KakwwYCfvTufXkBPs7U45ImuUNTpk64jGt6UDfE9nZyk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108983; c=relaxed/simple; bh=8AkaQr8WYXfEC2U/gfJs1iCWyLKb9tVvnjdo5dvbCYo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=t6sh0noQZTibAIkJXTSdvwiKYmPj9GgBRglNBh1V30rJENM79AuOONmRWMV2ClTf48RmOpd9j3W1JwQ0Upmcqb9K3fUTmvfxbAooN3KZOHWF5jXrmJyDsd06ttRfdhCzsla1SzbWN4QWLWa9v8vJ0xvCxyhNR37pEpJQg5x6Zbg= 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=CjZ3a6bp; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=S17RWhr7; 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="CjZ3a6bp"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="S17RWhr7" 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 5381u5gE025697; Tue, 8 Apr 2025 10:42:48 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=QpUdZIa1cGL+CRVflFJyljcjY09NJGGTBUE6oGA3NFk=; b= CjZ3a6bpW9K3/D6CEtxXSnuTNuZuqDrxKMClgHGZwAjlO8hYEn2b9MiQ9Kf+O2e/ SSKGT9dDZjkdi5raE3lh2/TUA5bFx4kU1kZdXiDvBbh0gATmy25CpsWf7jq1zChe CHNihXAF/BLANuObe/HVdUzInxaMRJwMzl2c2CjTrw09wojoNVbXPTUk5bhlvhjm EACapEA5MWNTkN3wBcS4kQHEPuGgOz1kfZZ/aPUZJEncCxoXjPGY2XmAwj+/aiKF JzHtk52pGfAjfjtUViKtKBGbBBCK1mVwsHJx+m9hCDcQd5TdpdvW08efmagCYIgy cxWU4rS9BOQdSGQYeoPLEg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tw2tmfaj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:48 +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 538A6fsN001900; Tue, 8 Apr 2025 10:42:48 GMT Received: from cy4pr02cu008.outbound.protection.outlook.com (mail-westcentralusazlp17011027.outbound.protection.outlook.com [40.93.6.27]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty93d71-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M2lhhz+Zqv642kb1oI1LVxsBVHxIgZr26ldWPpVwCB+snXsvmktZ2FtRQXWoK8KRYkoe+l9/RXfyQ9azC+V1KZeAa2HfXLt8YeMQ8Zmk8Ome+ROTLEWVql/apIsOBdo0sNKqtaGPnKole0Ghp1dHqW/OTJ1Kc9LUjm5cXuOeEiWog5kas021bIuinDIy6DIDQroyIkNei+4W3Cc7vbla7uGdDKbib6mYLr87jSFy9GMko6KtrF4bgMf+0abBABc9AdOwH2xJHsYWsSsKgUlnjsqJRf/iugpBL3do2f12tVMyKb9KVhrtgQ74rnmtf6ati6LoTHQBr94OufQqCEPkxg== 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=QpUdZIa1cGL+CRVflFJyljcjY09NJGGTBUE6oGA3NFk=; b=EJ4riAOrpbRO8ExrOLJPs0UVypljvUS1w9/vV2/RWGWi3HErrTSEuolmqKWfb4yDGVz3+Z3WkJ+t1hFMo2Ng958DLnzCf0e0iAjSd/8DR5bchqx85E+x6KZySRTVz/mdk9sguUbWJh/vXORTf8aMNXLscBvF3zyRB8dm3imFGVV5dtpK7IJE1IcsPK1N8kCNVLIetPu4GpWc2Fjuslwo9BOtdD6InMCcqwwI67lLm+VEqbpZC8i3XrfYVv3Q0j72pkYDx690lPV6GYMRAQ7XCwRWLbmyte+9mrgLc8Jjq+2RMb9r0EhkIw0d0/3j/Zh6Rulpm+J/IhiypVCiRQtlcQ== 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=QpUdZIa1cGL+CRVflFJyljcjY09NJGGTBUE6oGA3NFk=; b=S17RWhr7L+Q5cA6fwB5lgBf2eBuepBY00yHtDRMKry3RcUR2jT5pWBjUOn8tybesPM3/oqK6HvT9kaiT22+Nswe8fZR5sTZ1LmrSzyudfdAY2/uxjuMldBmGjAZvbmU/1IkXg6+uI2lfVkN5ksWF8LC80/BYMAvPt7w82WtjMv0= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:45 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:45 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 05/12] xfs: refactor xfs_reflink_end_cow_extent() Date: Tue, 8 Apr 2025 10:42:02 +0000 Message-Id: <20250408104209.1852036-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL0PR02CA0069.namprd02.prod.outlook.com (2603:10b6:207:3d::46) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: 1bc1c8d0-e316-4dc9-1918-08dd768a18f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: gQALbvq9Q9ZZ1Rz+yWPTVEPl20c4qPRwP0q8Cf8SsCf4H7QttObr4akikKXHypAptGQcEIqKTVWesJe5fxvNr+CAbS7kGnUjm/qV2MCECj9f+wwy5EvSeLVeZQCFvYOe6A4AkIAubmwT454aTkOJTcYnc9W3YivoW5JACaWQ8x1iQnnfShjyXjMiujkXTXnnhiY7aE3rCo4LogC677KtC6qILKFBy3SwnXHm5HtEoah7iF1YRH+q/6RP56OfdPk5iQ6C+kcvbvGhL5wZ9lBv3JY++pV2KmOT4J3GkglV7pmWp8LoXSu3VewJh4VGjXgJlO4xxAIz3XRJOleuu40+Yhf1YJ6adz6OTYvlRIsq2A1vrT6Icurr2rzIvHMZqWNB0XHhOrp7HkcnkDd2aVPGIfWH6anvIETPIcBmzMw5PASs+khIHi3RPg93uPWGa/5J4UMqnE8trpqrOiIV4902xQxzXJNLRgIjSXvdrd0t/etVTjbhNgI6H19DwJS27nEauGG+GA/A4WuPQ2GOSYJH6qEG+AMZb5LV00eDpFjTvXJfcCOjUftTqhYpB+wMJpUrqEK178dWD6gyD5UyoJN/Be+uDf0rEsI+XHmCgamGoxW7XhNDtbeIyVLORDwZ64mMCn5Oba9UqYAHiCqTe4+/VmGhaNbveuZ+ewJyQ776Ej7M6bQj8ftsTBu48Y08siu1KhR95oGj3FbznHYJZJOvBBOxYgDy1F3eq8Gxu5yGuRRJz2/LMIYrV7Rvk4vzarVQZ4fVYUknbsLkl2XkoDIQQ7ywfFZM6IkYt5Qf8GAEh4WGp8TY/fn36SIUZOV6oHoCUynqlXlDxiEB9BJIhtryxScWR/vky8AreQOCTeIFBwpsybiwurjbitQI9SN2NmPTrS0lOtVUfDBq8vHC/WzGvyJgLhs8mVv2Zig/cpmCl1NtwnK9TjlHuAs4onjgELJvTX8KtsOTcnQuE6xgHXiJwXG8/YXD0HTQ7roLFjnP5h2OCqDF7951zdEckddfTf3l1zUWX8GUIh+ewgBdpEhJS/0BMupWQsaTVgbNIGDCAg1ubi4SVklxi0C7p+gaL6pXCA2lMg2e7IlWftTZ5thB4hjdgHFi3UDXoTKNcYpXqTuJQsK+tyymGGybef+iGFcA4/VbDV0fzY64RMV9gCcLIUNx8uExsJAvqYPO8LokOs8gaU0cqgFywftIBzxZafZo45fEKtBYT/M8G6diwybs8c4ecZqNnwhuljun5SR1GgtDmyhwIdX6asN5NKTVUiAKFTnj0drBJv27zmIaCtGjRUH33oQRb7qWgk+WlpAPQXStAvf6+0bypdk/aoN6VVle3H9yw9MaCmebc0xv3NOq8YqPGn0XMSlMZCY8xOPl5VDz5QbHLcR2a/3wqS6ZHzNI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eAPUmxQFzPUH5nyhkdyG/CU63dGqnp91ihtASyFB552z/2ef15MZQxluoF7604ZXhUmGGelBb9JcvrloblJWhAPMu3nE/gkYutwjuVwG81V9UoIk55lHNfGEHd+jT2GhH87s1HDrrpCGj4M/Hn2mMMHmsukzUK0IDwRJCtb0mJwtCSJJKLO1uu+YRmJyT+NkGw1Ua5tfo/vBIDeY1hyjF7Pw0r79/LgttKUFlbH7sZDjYBQA6sPwu8EX/O2BG+d529C03iyXv2ugN6PYOCid37J+x4ktkxxA6YHVMwMJ6M8J+tli2Mh0wpMkuB7nlqnCOZ2R8iNOhRmeZD9zntftcS9DMOz+8NNzqkfJur5KjREGtjjeW+CH5t+vjJP1u4Nh85fOT4RXqOJaaQqExRbxRbBbBjOqLnKLumiBC0nAP21pcBrhu3cnCD036wC+uwIzkgFgcp0GWnc4/Y1+cKzb0sK7Fdec1KwmZdFWqRFH4Q+2vrqsH39w2z5otlylT1VsmdLGbUpgyFz3bQIGB1x12nNf8LWf152BqlNRWCpx9ypM3C9sb4QVft293vi725sl/IpD4cYaLUhWrNYTnbAfpojS5NwkbvhJsdHmznMVqXN2J1AjqZ6CBIjkx1ksndXN1RZ2Qn5NUEJxnH9xVLHu77ce+6qb2fL/1RVeBD3WG2J9A//SnGOwbK86twTUw7LvdgYhS0BrE6CzlE5ml3dXfdmpjioTxjJVZkqo5wYAstxMD8RdLoehnfsNgWECmkl5AaXNvlHwNCZVilJFO8lROzyZqVbW3iLuh/WPZmJYqjyp6Ab4hPp715J7U/9mVOdY/0Rq818gjnb4aI1FbAtpmcSCQsCvRcR+kU2l8473Q8jOvG/phAanL89uxkJX6SDRDpFBfM6m1szyHpEtnmPy1Rng/HjaodgWgvRs+ZDD9jVBgj0YkbWPtZCKbMXi9QDSeOKdd59CB6SSxSQuZiEH/qHoUr6Aef/VL2ItEARNqHXTkiOxzcmc1QbBAFaS11aFSPoGUxS70PW8HZAYm4qVb875miJHavxlEppY4QJjetvHgQ1yux2BIT00wruO37d+HDM/c0p/h8AmGIa9Q6taux+0Rqb3LlcDk6+91RlX4kjFSC3D1Z2Q9uV3RF4dpHJhIzvzPpc5IQ/EIVkcmpRj7QawuGh6xylIIvVWzc1lASdmzbAAuk6yuyPCc+FGxSBaNwZVWUuBxmJ+Pm4gBLa9/FnC2vMn7owxQA5vIYkHo4zWpSSMptSn9J6SRe8hkft0Ekw04ahLgwdVaDlN6ZAkwFJBZtdtvIBs9McvwCL/0967P8PcIYq5NPzO/+TrNW2ZN9ZSx4ZKA1WU3C/GQzq1VL5wxkeW9DhTt+U0anBM2hFlMla9hOlcmDti60YDT43TUhq5mOt5PpzmmgV1db/4wdaQPeA/0SdK61e4PFv4RNUO9gwZytIDW8LheexD7diuKVHd9C/W07nbMISQnY7mJJww0+DMk3vBrRTM3rANEAGupsuUiD1b9IF90cVmHzt31Bf35xp1wzBKhJ1EYhoSHxM4aeYIWFCuMUqdQQVLVuHIrUVcFx4Qioa58GnECj8R9Tsi8zg2CLZnObUARbDliQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: K3a60Dd6gnyYAoDd2cnRcRKrGm3IGm+DqUIAwbGSGtxyW2lWAsVjVmMdXLQ33hoNjC28Z7FgDklM5io+aZEYYJFAnJVDNbaY2ehaAfIyKmX05Hg1YZmcwZJP7tOu1jFCEEJB6UivDNbQ4Nf0NS7HmxO5BUYTRtGmxDpz2nsdGg30KBFZcYgHfGjidIE8SUz0qsT6LlFVXICseprF3EbeTEqG/zI8z/vLC+C25iL0EfJxogAU+ZmX9VEOvL5bzxAM2y4JGlehCMkS7JtI/syZn+SZ3I3nNw6NnuCVhv1zKWQaV+w5fOei20ga4pbf1TrXlFM/0W1jxHVf7u/Ec+bRWOmNjq2A78AknVEZc+bv8xHwYGOHlP7K0fGCf4GJiecPuZDKEL+3oz8D/URsMCB9c+IQl7qwpd1MHQfN6NrObUNpPDodRAVAqpGWx8LaAGWjZe8F8TGh7XhpKJ8txZX/hYmEgT4JiMH8cCe9Dlm7jnGhZ+A4mtqrqGnY7YzSR9F40Z2CDAuGKyiNPszp9QRtS1h5wYa7djYNfv3NPna0uXJJuJP+orU7kRf7CP5eswnuqLihvwlLAP+ZzrFyjIMf36lS7sfuxsedHdaZ5n31u94= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bc1c8d0-e316-4dc9-1918-08dd768a18f0 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:45.3617 (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: CY3ocwRi0swPBOv08nSRLCFU4JfRkxLzB1is4MfzTCNumNNTRnBsx46IiamgMfG3gTScbOA+VbsloSKdCCMiWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: HgLrZ4oTK7iLcd7p7oOEPdBCbEvlepYf X-Proofpoint-GUID: HgLrZ4oTK7iLcd7p7oOEPdBCbEvlepYf Refactor xfs_reflink_end_cow_extent() into separate parts which process the CoW range and commit the transaction. This refactoring will be used in future for when it is required to commit a range of extents as a single transaction, similar to how it was done pre-commit d6f215f359637. Reviewed-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 72 ++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index cc3b4df88110..bd711c5bb6bb 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -786,35 +786,19 @@ xfs_reflink_update_quota( * requirements as low as possible. */ STATIC int -xfs_reflink_end_cow_extent( +xfs_reflink_end_cow_extent_locked( + struct xfs_trans *tp, struct xfs_inode *ip, xfs_fileoff_t *offset_fsb, xfs_fileoff_t end_fsb) { struct xfs_iext_cursor icur; struct xfs_bmbt_irec got, del, data; - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_COW_FORK); - unsigned int resblks; int nmaps; bool isrt = XFS_IS_REALTIME_INODE(ip); int error; - resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); - error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, - XFS_TRANS_RESERVE, &tp); - if (error) - return error; - - /* - * Lock the inode. We have to ijoin without automatic unlock because - * the lead transaction is the refcountbt record deletion; the data - * fork update follows as a deferred log item. - */ - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, 0); - /* * In case of racing, overlapping AIO writes no COW extents might be * left by the time I/O completes for the loser of the race. In that @@ -823,7 +807,7 @@ xfs_reflink_end_cow_extent( if (!xfs_iext_lookup_extent(ip, ifp, *offset_fsb, &icur, &got) || got.br_startoff >= end_fsb) { *offset_fsb = end_fsb; - goto out_cancel; + return 0; } /* @@ -837,7 +821,7 @@ xfs_reflink_end_cow_extent( if (!xfs_iext_next_extent(ifp, &icur, &got) || got.br_startoff >= end_fsb) { *offset_fsb = end_fsb; - goto out_cancel; + return 0; } } del = got; @@ -846,14 +830,14 @@ xfs_reflink_end_cow_extent( error = xfs_iext_count_extend(tp, ip, XFS_DATA_FORK, XFS_IEXT_REFLINK_END_COW_CNT); if (error) - goto out_cancel; + return error; /* Grab the corresponding mapping in the data fork. */ nmaps = 1; error = xfs_bmapi_read(ip, del.br_startoff, del.br_blockcount, &data, &nmaps, 0); if (error) - goto out_cancel; + return error; /* We can only remap the smaller of the two extent sizes. */ data.br_blockcount = min(data.br_blockcount, del.br_blockcount); @@ -882,7 +866,7 @@ xfs_reflink_end_cow_extent( error = xfs_bunmapi(NULL, ip, data.br_startoff, data.br_blockcount, 0, 1, &done); if (error) - goto out_cancel; + return error; ASSERT(done); } @@ -899,17 +883,45 @@ xfs_reflink_end_cow_extent( /* Remove the mapping from the CoW fork. */ xfs_bmap_del_extent_cow(ip, &icur, &got, &del); - error = xfs_trans_commit(tp); - xfs_iunlock(ip, XFS_ILOCK_EXCL); - if (error) - return error; - /* Update the caller about how much progress we made. */ *offset_fsb = del.br_startoff + del.br_blockcount; return 0; +} -out_cancel: - xfs_trans_cancel(tp); +/* + * Remap part of the CoW fork into the data fork. + * + * We aim to remap the range starting at @offset_fsb and ending at @end_fsb + * into the data fork; this function will remap what it can (at the end of the + * range) and update @end_fsb appropriately. Each remap gets its own + * transaction because we can end up merging and splitting bmbt blocks for + * every remap operation and we'd like to keep the block reservation + * requirements as low as possible. + */ +STATIC int +xfs_reflink_end_cow_extent( + struct xfs_inode *ip, + xfs_fileoff_t *offset_fsb, + xfs_fileoff_t end_fsb) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + unsigned int resblks; + int error; + + resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, + XFS_TRANS_RESERVE, &tp); + if (error) + return error; + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, 0); + + error = xfs_reflink_end_cow_extent_locked(tp, ip, offset_fsb, end_fsb); + if (error) + xfs_trans_cancel(tp); + else + error = xfs_trans_commit(tp); xfs_iunlock(ip, XFS_ILOCK_EXCL); return error; } From patchwork Tue Apr 8 10:42:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042720 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 DDB2426981A; Tue, 8 Apr 2025 10:42:59 +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=1744108981; cv=fail; b=OsSVX4D1WiD0wGTnCIdK2c9Cl+k+7Ewzs34XNcI0J5wPI1UfrjAsLIDIvjAm8HXnWI9FQ087EbQ8aacqA/DGdEElTenkIz6/TsdViZu3L8P9P60eF7ymWJ1Wz0BMsY0chsMXgZbgrKXtV7JBcOW3b9IFQB5ZJghDgF9204DX+Gg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108981; c=relaxed/simple; bh=DmoYXG8M9VEMwX1r5hIKjbfa3Vl4uOv0bZiOEAZiRlY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Q+Mgp1KrA8rfUXAAyTH2YbcGXXkER80AvC+RPDGMO1nztjGEOuoe2katpWU1xF/ee+NWb8tQt+OFtuSO7YDMZdaV3bcV8qmjdwT9xZApK8UlGCGnlik1kOnyMYmAHpfwhBHNYYfG4GZlBPjSnL3lb58WF/Z0Gd+CZx0R1X/LaW8= 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=oixkPm8C; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=EA50pMul; 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="oixkPm8C"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="EA50pMul" 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 5382qZcH007946; Tue, 8 Apr 2025 10:42:49 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=t6cdsL4fLBCKPWutRvB5gdlcGwcPSAfxdwEVorcUEOA=; b= oixkPm8Cnhl7E2vRppmaa7ph7d3BZyFe3YbAy1AxQHu7kKG37pOSEEbpB51Y0bGe MJ1nyUbsYk12TOYF6WaQYX2ssYwk+eKT1HnFmzMWheQV17hbgwIVTvYshiews21e XZ2Sg+kn+5sNb1NLhEqaUv5b/PGyza7EQmfKQnwZQJVPBWUyBNCdBi8NPuLTidK4 mL7p4zcIBljK4Y3H2CYo5o2olR/kzubs9cxPT0sIUDS3ikUTcgmg7u2yzDQX3aFW zWvDH2qOXjfPFXqmUpGQ7o3RzxOoc5F1mn/XShsH6H8vQ/+AAyhRZ0gzHTbyVW+p TQt4rgNEhlpFyeCeLIMBNQ== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tw2tmfak-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:49 +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 538A6fsO001900; Tue, 8 Apr 2025 10:42:48 GMT Received: from cy4pr02cu008.outbound.protection.outlook.com (mail-westcentralusazlp17011027.outbound.protection.outlook.com [40.93.6.27]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty93d71-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fxhStvbZf1o29J0HHikO0ULuNua4/El4sGAD3AKPvX+ntW1m0Z4N0TkOKJa6Qo61k7lCcWOy4Z1216Czk5EaML7cJD0il3qWu50ij8YhhSJLWnglvrJPmp9+kj5VAaialPxS3kkDV79quUQwpJs7sOz31rq+yPyjXNKdwsZ/JTbfx1h5VoSE4Ezo9KK6O+wh2YKDbRfL4rrPOmyPBNmA7Lfog2q4Z3tFQwhoghlByMkx67lEw8JQ9vvn0t1D+dpkLIPYYC+dr4Uq1j3zESTM1vUh83EuIBuU8RBTQvBBD3y3c2FpsORQ7mjSIh2j7JoI677561yHxxvaraHcTVvtOA== 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=t6cdsL4fLBCKPWutRvB5gdlcGwcPSAfxdwEVorcUEOA=; b=mUbAJybU2dBC3KGF2eP4Yia8QdAnVQP3tNQipC2yS+vrxI4uDVXvW39UYAsxChJPpygXuErVWhDw7xoFTJaPDtseFoKKDOCiOgFgz6V9hCwFFJCVMgsSCZKtxLRmCwaRE/PM3OifxP7fgpTRRZNxJwiYRFpC3/Ud+Tv593OfjOiMcSr/Lpja4c/myXScg9DaQhNII45FJsUS4pER2J6lvSwj0v+9sfpVnl9C7nmmcVuaZML2vrUEjHeZRNpWPv2mmKMSkKopdRIWc7mRMqnma621gynuEO4UNHexLIWeBJNHIYTlouZCH/t7AiNGO2crWJf0resyTeIKRr8V9gy42Q== 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=t6cdsL4fLBCKPWutRvB5gdlcGwcPSAfxdwEVorcUEOA=; b=EA50pMulqyPkpm2DVSDIT8MpMsYVodUEXiNug3dMGLcaQZftaUUGTMfORQR7/e38CkfcJ9stphVXgVsAwm0GnoTCQSFZOM+GmsZkqqOMAJhrl0oL6M8Ize9jKFdHPq7E+rIP/nn05SL/UFfkr32vCuMOfDnttVHW9XM5xMK6Pao= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:46 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:46 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 06/12] xfs: refine atomic write size check in xfs_file_write_iter() Date: Tue, 8 Apr 2025 10:42:03 +0000 Message-Id: <20250408104209.1852036-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR01CA0061.prod.exchangelabs.com (2603:10b6:208:23f::30) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: db5bfca6-8f4a-49a6-e083-08dd768a198b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: YoBQ8J0P8BKvoC8ItdAwYCCKyeBhWhIBz4Sl6zc/ZhtR44aH5+2rYdtxdPWOCiI6YyIiWLaQkKOlr2B5hQIjo6+9oQqxNEbiMcqMgyH7KVKd3ykGLjBGGzYnCXr7VGDdQKbHnq2opZHWmpommh9LGhd1OB72ekELWSjdhqfg0yyBZhO6WFSrSHvacjw0lfH7O12HPKzbSXQETOyACtVigaejLMw+TUs8rZkLP8qevAinNUCv9X8Pyk8rFybKdxjXeCXoj4HGIF1ZqiaqLqeZy7fnUpPrFZo3+AEBhsDNEsl85sHVJKuGPllTzXhP40zNf4e9HMLQDsaQDE93Vmi4QNOQKtKD0+84HNdreVFBAjrS2luX5aygMilwYEKpFGx9ZzzhOU2reXvDwc4il2tbARxjWu7lRYp90/FYCfSgeWUJUhSMN4cVgEzAVjtiO95jLzFsFhrQDccx4j9bXbbkJ6RiUHcYpMJlS6V8fYgGFvL1rww+ArRMCsWt8VtDqtqYmEThN37edf6vS22ScnLzPrVK2fSSTJF04j912tLoWHwpji5fEOqYf5OA0GPJltOIz4ss380qr2wBdyh/nj/Dq1JQ8ASzEcNc1rS2YUmDEvscrfl1UV/kbhLY+ltbNRP9cEeTUONSFWFI2WwhR2dSWaUWCAtliZaDyh48gurVllTlp1OUv5JOdjmOUSqCJCyd1b1JDcDsT1NajhhrIoxFpwPgDQm9OG6I0RyOM8+ZWuXklJJFUV5rL9S13p/8Tc8hy3GgEWAVEsNzolofP1liipaEfL3vC6b4UEyw1umXqj7m3ZG5h87EkQywvU3PjPDBT09XfyohOFuDRt6fFfLZNwTdH/rE7osilo+Y3/FzYfp9dh6UV2jQ3uBdhgxc1GABQnr2UN7JYPLxP/7dELnDWhL/j615rzCqtsaLPp4lji5/CCx+WMEO66K+C1QXO/+0D3OvnpMMIebE6RkWff22B5STRkOETyg5xh7dsD9VAV0ywEeKsVE4jzdU7wSR2HTOvkNPu2WTiCWKgU2wUP4IltaIi4MITwjo7f1Qn0HpOfabrOIvBzzJJvafPFqxF5/9TMGDrFcTEnJDfao66pdkFpP3X3gptg1A4wxN6JO5rUliUNsSwmyiXOUVLPzLdWLLOGu37AW39buuT8yrauCZgXsfgSmnpD0UQochAYCuS6HT/+H/wUq6MH8Zyvv2Ji+GFiqD7348g4YbeyYj+k3suDgbyS8b8K8qN0+OGQ7DpOACjJPCRgCgrpBzTf3OhIJ/d9BoSBE+9RBfBRz0sSLRfLYcZ6g4CcQA1K5g0tkuCtPocf2IBF+c6oDUcpzJc14JzkN7aV92gEQjMbkC10vsdQ1vspnqimsM1Vzy51u2ZXezd+oDqIIzWoEXAiwqmnym X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1aiCw/5rETrSrr68yRtzhAsZGf21wpAryKuwhTX6lUx8qdvjrMK4p57Gsp6vhBm8xsVioNkK/0r4YtRkc/Mvv/TiypuslDVIndFapYfuKisoGxZAqmQXp6MzkavDPqVEAwH9EAN78nv4JpzoWoy9BUq+QHupgZfdcymQDxEsp6C2B7JYXyMCeyeBoS1UD7U5SzgIc3cvIRBHytAqF9z+r81tEs3wY1sHRgI17Xyx0tHbC+O/v55bgU4SafYnDDK/cXxiO1GTlnxhkNFVTOAN9lO3gNXAknSWJi9pcTVv6fQ76rUjlMmsVp6Oe4xDQEh/+gX7HoNOcoZyw1fILWWmKCZUNXBA854nWgwvz9I4JZmaKq7G9HqIisvZoHtDMhqtkokZIA/plfHgo53f2M+3uR+l+oczKsrjfEek/ZZpfL4hHKhPzh6Ttsh65uPl+/wQoa7syW6gDV/f66cwdP//7LlPA1Kx+wUy+kGSiFFcKf71MyMXLZC/DgcgGp7vrtDDNC0KU5M+kxPwJl/I9KvBBirOlAip1PVV84Ko/kKOrLApqrwcA7iGbaVzNyfLKngX9JkgGOuOQW8Vj/R78//lH3e8iaXxoJtkXqyr0MfOX2TYtEjzC12sV67/obgn3lKf8W+HvwlqeNcoa7roSsbiNUXRWtjHCdK/sPQWN+YHIU9ebThogmmXxR2ukykl9p5YbJRasF8+XuYx4yiy4jhfJ2BmHxtpKTQxPwzMmKQr0NdAmtYnl3ySB7/rLUK61MUNQDoxTZ2w7eE3mBAF5dXRMnee3RWLV06/BxAn1lZusO+hnGtLxOPfQJ5GD6YvCvIdUDECVH4TdFJ/ZlqK5H65ncTQP2Ag9hgR4UIsj7vON+2fAPOFOfRjhNrlJoYxcFCGLUfI6q6FN3SX5KqYAJksvuotehPqXTFL44/MNAWMctS8zIRDkRpuMLhLyXhMveNJ5JM1DLyNPDpt5AqTbrkGN6fo0WQ9bMhPpNOrOYSZiJu2QSHw7/g43cAjAw1m1VISXYUwgpW8cJ3JPL1AsZSXcENPgqbgTC6aNSWfsojbF0c/QyRbYRl48b8OYV5nqsk81qdLIx4XNsgskrlPPpCoR95Lh+GRxQUCzJSU0RmbnZXkOaycatvz7ChFxNDwzq2CVmqYEHUFXeS1h5NR5IXKVI6jFSwaNwwtmIt71ajP09Dw9+wLTP2F+AEDJ/yuzMQoEuNl/R12LsTgpZCjQHSCUf2nLaZPGaKZxS2Tm2JPwexDLR5SHsdyDZ9inNfIfHreqFhftfPhLOkXjpo3r20v8P9nXzjj/gUeFWKE+sY1oKoNYvk+6E3uPuovxlkPbI+pnO8B/m+25pAvnJ/KBNc2w4s2/EW1VdxhW72n3KWuqoYRNnnvxGjoYy2arXhT30qEEHNhltQGy9CGDRxkZdPXDNZ+7PBnYTJfFvve6JmzOQa/hXuMaP3u8y7kgkBqhVqn/wVkNvTa8mFCq10alk4jur/c7VB+3fJYphVvtERHN4VTXYh/ccczDJ5gmJ3R6B0UWRL/Mj9JbFQcbhZAFgTUqC3gXW0xdHcIiT117/EqyBSoE2ANMOo9liC73j6WUcStOhUXPePK3OUC8pCO4SC/xw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: v/HXbboRnFX6pnmfjdPjbrGphXzMkgi3Krr/1r9bsQxHA9ylRLSbDmISPT46Zd/7db3mplPjLFD5MUhmLc4Q4tqwcTfGZiPuzWjF4/RnGI08UHdtd9uZBOdJLkL5O10HlmfbAVneyJB6hyLFVKPD7Wb32jZts8agROenei78/61cFZMtT307D0gJDqEjEisJqgU38EELvkSToHd8NapByIP2Z4MT3eRGvFbTEiah4Yu7p0ROmnEmm9ErgjBksnCyKqbgpRyZNet/+/vMwxq8OP4FiaefKBLLGEmKdhWK6mv+KGmSN5yMHJQXSfj+C9bVqrjK5+iLdnasnZf1zaOdJB8dzTEuzGpBiAm1NWxko5fk9CK93JrHZ97amb3sEr0dR58fbatR7Ngf2lcAgVCfKYWB7HsKs3crvGdWc2jdAwuAhQ1LdqoyS8zeVSWx9fKRtRJywi5NKaJNQLfJlpoDvOdSPXfhIR9nXoNsmPf3CG6fWa6biKZtMZccOn0NQxge+Wg3TzyHcw7XmxNYl2NHJ53GKAjNgnFKwNTne5fYKesKXfeWkLMHEPlxXZ9zlDAo6oVWKR8LPzALftumjxs9+kP7Uhom2tHVE17Nhby4QeQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: db5bfca6-8f4a-49a6-e083-08dd768a198b X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:46.3769 (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: GC1t4jtkKHU+r1AJPOk18bthW8J8QcmAGDYZG9bw7s18yXgXuBqcvYmC51Cs0MNEpX/PWkcxVMrQS3OQKLl1fw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: KToAuZ595qUANdE-MbYrVVfoK87qVhDb X-Proofpoint-GUID: KToAuZ595qUANdE-MbYrVVfoK87qVhDb Currently the size of atomic write allowed is fixed at the blocksize. To start to lift this restriction, partly refactor xfs_report_atomic_write() to into helpers - xfs_get_atomic_write_{min, max}() - and use those helpers to find the per-inode atomic write limits and check according to that. Also add xfs_get_atomic_write_max_opt() to return the optimal limit, and just return 0 since large atomics aren't supported yet. Reviewed-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: John Garry --- Please check new function xfs_get_atomic_write_max_opt(), added since RB tags were granted fs/xfs/xfs_file.c | 12 +++++------- fs/xfs/xfs_iops.c | 36 +++++++++++++++++++++++++++++++----- fs/xfs/xfs_iops.h | 3 +++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 653e42ccc0c3..1302783a7157 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1032,14 +1032,12 @@ xfs_file_write_iter( return xfs_file_dax_write(iocb, from); if (iocb->ki_flags & IOCB_ATOMIC) { - /* - * Currently only atomic writing of a single FS block is - * supported. It would be possible to atomic write smaller than - * a FS block, but there is no requirement to support this. - * Note that iomap also does not support this yet. - */ - if (ocount != ip->i_mount->m_sb.sb_blocksize) + if (ocount < xfs_get_atomic_write_min(ip)) return -EINVAL; + + if (ocount > xfs_get_atomic_write_max(ip)) + return -EINVAL; + ret = generic_atomic_write_valid(iocb, from); if (ret) return ret; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index d324044a2225..3b5aa39dbfe9 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -601,16 +601,42 @@ xfs_report_dioalign( stat->dio_offset_align = stat->dio_read_offset_align; } +unsigned int +xfs_get_atomic_write_min( + struct xfs_inode *ip) +{ + if (!xfs_inode_can_hw_atomicwrite(ip)) + return 0; + + return ip->i_mount->m_sb.sb_blocksize; +} + +unsigned int +xfs_get_atomic_write_max( + struct xfs_inode *ip) +{ + if (!xfs_inode_can_hw_atomicwrite(ip)) + return 0; + + return ip->i_mount->m_sb.sb_blocksize; +} + +unsigned int +xfs_get_atomic_write_max_opt( + struct xfs_inode *ip) +{ + return 0; +} + static void xfs_report_atomic_write( struct xfs_inode *ip, struct kstat *stat) { - unsigned int unit_min = 0, unit_max = 0; - - if (xfs_inode_can_hw_atomicwrite(ip)) - unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize; - generic_fill_statx_atomic_writes(stat, unit_min, unit_max, 0); + generic_fill_statx_atomic_writes(stat, + xfs_get_atomic_write_min(ip), + xfs_get_atomic_write_max(ip), + xfs_get_atomic_write_max_opt(ip)); } STATIC int diff --git a/fs/xfs/xfs_iops.h b/fs/xfs/xfs_iops.h index 3c1a2605ffd2..0896f6b8b3b8 100644 --- a/fs/xfs/xfs_iops.h +++ b/fs/xfs/xfs_iops.h @@ -19,5 +19,8 @@ int xfs_inode_init_security(struct inode *inode, struct inode *dir, extern void xfs_setup_inode(struct xfs_inode *ip); extern void xfs_setup_iops(struct xfs_inode *ip); extern void xfs_diflags_to_iflags(struct xfs_inode *ip, bool init); +unsigned int xfs_get_atomic_write_min(struct xfs_inode *ip); +unsigned int xfs_get_atomic_write_max(struct xfs_inode *ip); +unsigned int xfs_get_atomic_write_max_opt(struct xfs_inode *ip); #endif /* __XFS_IOPS_H__ */ From patchwork Tue Apr 8 10:42:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042722 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 BAF1A267B10; Tue, 8 Apr 2025 10:43:00 +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=1744108982; cv=fail; b=iFS9mUUicrEZ4WCWiq1iWdEMjrLrpDdo6RDcRI8GJT4zPhV/rSQ+ct4OI1x5q5tA25EPC+6Fzeb/HW7GnR8GwKCpS+vL2SJfvKTbAukd3XkML3/qoHFqrqN9BQ6CXPloh+p2n19v+Fqz9zO9Bk00l73rrcslqCSzUEudyN6JhUE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108982; c=relaxed/simple; bh=OtcZ1JjmwkA+Di90YuoOT/ZTbDYTSvuniwky34srzkY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=O8n92lAhhqwLi7RDFD/qU/OQ3inpe8FyODB8Y+hP8PvJYughLg3a+uW1lGB1r0UrX3zmGJ5nvvYBjXtTdI4Y+EIVADCa8mXALkpLTzjy1Dtsn1IzjQr6VHqUnLkEjtgkbI/Yc8Cm8CMccH98F0U/S4dqCTEuP2Kic/aHJ2blui8= 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=DQ/G3hG+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=wXykadOa; 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="DQ/G3hG+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="wXykadOa" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381u7bA001178; Tue, 8 Apr 2025 10:42:50 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=SLhGRlJUXYp47GZ9Wbfu4+42Nx1zvsZliC1vm/tALkc=; b= DQ/G3hG+vrkRw1ubq0HM6ngXDpUN7pAD3+rW/vP5dSfEGKre9NarB4sb3DvDPy2g lYGBe5jJwSxitgD3e8MBeqgUDKkN+3aMAZexcWAfyI5gPjKXhA1WXVG2ydV/6+23 arW7Ul+F7XRam1Nfxu+svgq6YlHUtmpn9hypAaONQmXKrRlwmxWuMTBEcMkSsfRc qGo1ICKvi34UV5wwgv4LRQf2wLOyz+Nourj5vzHinn+QIvs9j+lpYHbbkd+mtBQH hCnhIQHefKZP9TMKV/RjQRQeVNKv040QjUTMtG8xH55s0lk2aQnB+2BE1nbgKcRa nAtxuN1cjPG1rQOy5jH+jg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tuebmgfm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:49 +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 538A6fsP001900; Tue, 8 Apr 2025 10:42:49 GMT Received: from cy4pr02cu008.outbound.protection.outlook.com (mail-westcentralusazlp17011027.outbound.protection.outlook.com [40.93.6.27]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty93d71-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X5CRLx+n58Si1iZCslTTVa9jJnOd70lEjFwdG7sosyTkd2ywjj1kWmquLWeHWFpTJadi5n1FdXAIzT1Qs1z+va4zf/7ZzBilk90MfqiSSKiQapwAJOMKOKvhIrOnzMgK7xKvHPLI2TFJc30V8I2yeQPsRjls3ZB/Swr9xg/JIcdAiw+0tiAU/BnrufUm196+KFjOhRTPYYs/ZpvDs1C4BEhqh8PrPMaM6RehyFVCOawtbc4RRuDdnga0M/Zx7K7Fi0qADRa+RZ5UZvPFJulNwuriCH9bSnV9T/vV+IN5ARvl/o/+xFp+U286X4f6jbiXyKYDLCfWI0xYQewF0QJHJA== 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=SLhGRlJUXYp47GZ9Wbfu4+42Nx1zvsZliC1vm/tALkc=; b=P8Ixv0gzbv7Qyd10uQq3PjsvIgbRs4dNUOcYoil9vba16q1vyIjn6J2/z3jWkE/+2QegDmGbj52l5Vh2MK4ANqgPQnpinHdxPiYYikBIlf4iou7CQUPK7ZcI+bq8YaWoM7Gbyuf1yjb1gBgqOohBAkYM+JjgIg17KW0SVzPvxh6BPA8AtUDG0iCQkguQ26PJO6opDx65TVRDWthQ7F3eZFC9ukyomqPcZ+XoBteLs6LiWoQqaJaiyxrSM/DpO6DErKezsocPN1R/0AElnu0Qk8BMPnOauBYZl7VkwgvzIuo13/NkpCnWW7K/6ud4eQiG94JRHhs2zDJRd39hKRBd6g== 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=SLhGRlJUXYp47GZ9Wbfu4+42Nx1zvsZliC1vm/tALkc=; b=wXykadOaug4i9r3f0dmCDQFaui1v3/Z7LLutf4d+3VQkH3DaJCSWA/8d0MXjDb+JL7pvswnUn7SIvQiOTlCf0/xAZYD4nbdVWfUL8LOB/Bfebz5xIfv88ees7MV3sSa2STg2iCSleFwWrHbAIY/doF287j0VMvgqw3hnahPyNnY= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:47 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:47 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 07/12] xfs: add xfs_atomic_write_cow_iomap_begin() Date: Tue, 8 Apr 2025 10:42:04 +0000 Message-Id: <20250408104209.1852036-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR01CA0065.prod.exchangelabs.com (2603:10b6:208:23f::34) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: b42dac4e-74ff-4713-8867-08dd768a1a29 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: 4q5HFDQqVzOWztjhOnfeLSxtWGZQ3WZtjRfd8hm3kCJLKf9vX+zKBLGiXg9T7EKj6TE6/5D3MmGWALCDi7X2b93rVZi++yc+TBtRLn5WbHuW7likSlEnG9jsvDupdrt1uEPxZ4eMCZs+cK593BNMlurvnuFFxQrmbmuSqXrnXa0V00+vSNDrjlTGzxoL7b96/iFTMvInkwipfZLiEdyYOiKluPALosh713lJONTfgm7xCwrCFkaAQGo4aEH0lGG6+U3y9+qJHKMKYE83VVLuIEAgKZ6HVg8o+iRG0+lHgpmXUGfo8Sln7jBDq2CNcl4Tn9ELU0I8ZZCwdJFg0VAi1HL6M2nj955ZaDOPHl2Dwp36VwsxNgOTifffAljqkNeshvvrx7SwO1NI+sxIwKScojQPx5c1Z1TRdm06K/QAL4w5Vg6TAdEUro+anmzTh3Rnf4vISWKGbRy6IuBv+BCTOvh6DUHi5413pfu11349usulpR6qppvYiOLJ0cDBBN3rhV8OwQIV6jPYlpv7usGQrhF7aYUk0eg06WcQyndMh4BlwN0tb4S1kb68LuqoaGmMWjneVHuyoL73qjiZDraqJsbGxfQXI5Ra6YsAK+QnhSjCiO/q6jHSS7/4xTyBn5RzkF6yPqceulOWDD+p5KIbVZin9hEg7/ccsmmfEkwVAx9akL8xNOs6DS4s5yzIvBz+dGHq+MspW8yK7H77Jz6hsI5Zfqua6NSop8f2Rx2sUupY4xvrG73aRjFLhpZKEFwG/0/xOByKhUCxnGdbY8dm9t7T4vCZTKhK8ildG9tyT2rvIPcHDj7gqmoGpmYQ0rmuwKlxT+mTFjJ5MYn+CKmakV+9W9jQA8hY1aJwVjk5x3Rb8kkBSUHB3r5aUDC7B+olWr7h4nm6Ey7K4AEenF24FcP5RLLkNW0zzo69n2CW2omfGSkxPN4p9aouDNoRu59mQXv1zMSUngjFAJZk0Fb4MTtGcYQdzd/AEu9bw+MoTJM/pPqBpcogqpA8ljGkXLIShQmOgZFdddShhupEqz9QmM6LwmdskBxBbIlarqvbvp6A6tUigD+RZJL1iOwiqlIgCMP5ZXAZ6967T04f9QPZcEek7yAe11R10mucFdQ+YprrguEQdaTj7u9wimOswU+MtnWGS4pT0wwTTLUGA6lY10lp2M7lmeHlARAoGNwLnoQAsjsqRpLLTZJAbmuHO+d0/biaY0xt4V9Rqv1PR3Yxtx3m6aJzvpog9g1v7KfTb2r77dHDjKJ+5hYCS8qDxjpOpj9QQOxWQ6OigBr4XkP647dPxpyfcPmu2Jam5KbSJecNzyVgAXtJzQpuw2Hebwm2oLP7VRDOofHAIYEiwSlNFxvP3CqSswDI4CvwXKjndu5cPwa/OibTjOdSyMETiNCZ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hI8vO/GhW+OeyeN1PVOVMeTc7k1HBIXNtzgr1+bbLtizTgeTQSdKvxrRsE7IDgkTGMlFvMxxcv+aa4FhmNtqK2Yx+deIrrOAH+NYwQE2poUqtavtLBXZw4yqOsF4SSV2JvLu8u5Uczfvyob6g8aUWvTo1fCOdtV7suJD+rsb1ND5E1MY+tcFz91MW9E1f88e+wPU9a/doXyoUpwDz1SmSl5wc2nr4U9k5lhojOGI6zRakU4NQqRKcEQoXN28dvLsJrdOars1SLuoyV8GrgkHAR4gN2ADh7UWIDcfVZ6h67kByT6lf69f+vgNuoS+0wcLwCxqjbbS25tZhxLD7C+51gyx3+a+V3a1peWW0eWTkinoCqcaMIZOKZQxEjcL6mk7gbO5pEtk99F3xaGpmShXeehCbOWy4ylS38hahkaE93qPwuqRHjvcu5DR1Ix++WWFvxym8yWlGKWveRs2Q5pls9Ks2hJtUBqiOqnLhtYX7ba/HjDOahhAh+nOGv5ZDpvAKQJt+OXoX+a7exN1icMMMSA6ZPPyz7yWUgs+7Y4amcmJ9O7KTyc5OpkyKft4d1D7/9Ss20VSfN931pT72MqVh3Ev39KyqlUKqzz5vhOAje5/0WoeNva46nL/acB2wicYbLgPuDBo3ZK7JLKjyTe+xQDYAEAWYD/FOw5ZDlM9h6Glc0Fq/qdBWu8KGt4zw5CikK9VCsh3XBGywqLz5mEFBrFKwbt4hLADy+MqRxIUwtQCU9j0Zmu8SjHnoRbvDiZSVrO+jlilJ457f/p+Kv9X+9lYuSWI95VQbUQU9+nuhHwn54Kp6wm4DCy6BavNngM9WmqBA6h46Cwsuygvg6E6FW94zv1UFOZ8Xe85pkJljayMaceAWshgFyp7fDkh+HIwm2D+yllbzJsdk00gU97nS4kqbcgtlp08iLSu2YIHaA7CtIT0RhqqRVTM/utUyqw5PomOnVUW+sgwDiLfL6NvPaD/nxpKsx0KfOvjgw6Z1ua9DXChMh7KLip3NqjOP8rPR0/cQEL3Xvlx6fPbus5Ux4aFPIj72gDI0F/PMyUchIyE0lCpQUsDQYXSnN74K5MWUzlJ27ucFR9r5USQGuJu+yp4XAvGWJ8+FJwE/Y5qM/YdeDmv3Zg6RYpjazuHg/i60z4hzOHZdoGRVFstzUBYQPy5KwWZVHhesoQqH3S/6iRVnPPkbi4fEP78mx7Z7dUpzc1mSe76nGXGmzcHAaHdvO5v7rVNG7/nfcgUnJ+sgc2wbJSNgripmn7hfV8YHqFPboxkfxJ3co1qJpvQwBOXHPfLcQJtSOR0xVqpe6z3z9zPjGtgCtvcjhBqfA8fG9uGs9Lr0wDeRFdai2IOgo5aNm2MeLlMXihn8hzy5uYemUWJ47RKnQIT3KO2+rdQVK89QjHvVnpOhAKTZ4kgVnAia3dSOYVYor1I1UWYNFLO3eqxmfymJS73GKQGGvuBfQeOY6iNIyqgnrA9zAu/FUWuhNP+rokHrnxJFCeF7KfSYU/kV+A6FVgHKHpT+6GGthlkKhOim1TwCtNgKPYZI5aWWT8pzUDmU0qHBBjRgdEdbqPcsb76kROdyZ3QDqcY6k2M9NDP0lPvh4JqXs0FAxrnrA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SQcN1OQV4DCjSF573iHhubWS9yvq54Xz40d2UHEsqN3jJJLAusaDohAbfFSV2v6L5apECdMj7tVcg4RYRwYX0w0GmYMUfqJN2g9KDSw3q/8GTeaVieB1l/t+JDLGDUsH4ENVxE2X6N6H4SxLiIINUst/NVlyDYBlmiuNqK7VI1KUD/mvensAm0f1G/9gorYXOD//NmKfriEFs76eKvFPEUdluffFdyUMdCTJX69fNdCdB8Lw00aKsEaeHZ9Q4DQ8NcKifLdiffRHQ2XSidtHu3HrKylNlIrDhZ7DdhS7LQjFM0VNnP8yTgWlwDbJNx1416yqll3RysGVFnrO8WbJAiLZ0Fk6D4YIiL3dBPqOuW3en+/Yn3pltZsetkkKbxiB5liKDacX7o0rP/BUFnkBC5zl6EHaWwiVpri1FlWC7jL3DNvj5endhUI3sKfPVmpfn+Hs1CDFAJWfGnMZfpPYajyWYbRNSqTwBlfYEvNs4ZY82GnWTokci0aHF+AZF1srnQYaBrZdB2Sc/Sj9/9Nno6MgNr+fVXoZr9D2X1RjEHZEo3JNUceR4WA4cTbfAOV470kSc86+TrOrTZpCzDocbiVZSopkuqBcM3hJWpDDqio= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b42dac4e-74ff-4713-8867-08dd768a1a29 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:47.5990 (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: FoBZ+ZqTyGSHwFNmqon6qGrun108kP3z6ZBci8RKVCI3Hfw3suvXqMpbUiRU6p1Z8UVyzIjLziaeIVjOhdCZCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-GUID: PYZ0bb_1teCmjecI7UIDgwqfgwxI-9eH X-Proofpoint-ORIG-GUID: PYZ0bb_1teCmjecI7UIDgwqfgwxI-9eH For CoW-based atomic writes, reuse the infrastructure for reflink CoW fork support. Add ->iomap_begin() callback xfs_atomic_write_cow_iomap_begin() to create staging mappings in the CoW fork for atomic write updates. The general steps in the function are as follows: - find extent mapping in the CoW fork for the FS block range being written - if part or full extent is found, proceed to process found extent - if no extent found, map in new blocks to the CoW fork - convert unwritten blocks in extent if required - update iomap extent mapping and return The bulk of this function is quite similar to the processing in xfs_reflink_allocate_cow(), where we try to find an extent mapping; if none exists, then allocate a new extent in the CoW fork, convert unwritten blocks, and return a mapping. Performance testing has shown the XFS_ILOCK_EXCL locking to be quite a bottleneck, so this is an area which could be optimised in future. Christoph Hellwig contributed almost all of the code in xfs_atomic_write_cow_iomap_begin(). Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 118 +++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_iomap.h | 1 + fs/xfs/xfs_reflink.c | 2 +- fs/xfs/xfs_reflink.h | 2 + fs/xfs/xfs_trace.h | 22 ++++++++ 5 files changed, 144 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index cb23c8871f81..fab5078bbf00 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -1022,6 +1022,124 @@ const struct iomap_ops xfs_zoned_direct_write_iomap_ops = { }; #endif /* CONFIG_XFS_RT */ +static int +xfs_atomic_write_cow_iomap_begin( + struct inode *inode, + loff_t offset, + loff_t length, + unsigned flags, + struct iomap *iomap, + struct iomap *srcmap) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + const xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); + xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + xfs_filblks_t count_fsb = end_fsb - offset_fsb; + int nmaps = 1; + xfs_filblks_t resaligned; + struct xfs_bmbt_irec cmap; + struct xfs_iext_cursor icur; + struct xfs_trans *tp; + int error; + u64 seq; + + ASSERT(!XFS_IS_REALTIME_INODE(ip)); + ASSERT(flags & IOMAP_WRITE); + ASSERT(flags & IOMAP_DIRECT); + + if (xfs_is_shutdown(mp)) + return -EIO; + + if (WARN_ON_ONCE(!xfs_has_reflink(mp))) + return -EINVAL; + + /* blocks are always allocated in this path */ + if (flags & IOMAP_NOWAIT) + return -EAGAIN; + + trace_xfs_iomap_atomic_write_cow(ip, offset, length); + + xfs_ilock(ip, XFS_ILOCK_EXCL); + + if (!ip->i_cowfp) { + ASSERT(!xfs_is_reflink_inode(ip)); + xfs_ifork_init_cow(ip); + } + + if (!xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &cmap)) + cmap.br_startoff = end_fsb; + if (cmap.br_startoff <= offset_fsb) { + xfs_trim_extent(&cmap, offset_fsb, count_fsb); + goto found; + } + + end_fsb = cmap.br_startoff; + count_fsb = end_fsb - offset_fsb; + + resaligned = xfs_aligned_fsb_count(offset_fsb, count_fsb, + xfs_get_cowextsz_hint(ip)); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + + error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, + XFS_DIOSTRAT_SPACE_RES(mp, resaligned), 0, false, &tp); + if (error) + return error; + + /* extent layout could have changed since the unlock, so check again */ + if (!xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &cmap)) + cmap.br_startoff = end_fsb; + if (cmap.br_startoff <= offset_fsb) { + xfs_trim_extent(&cmap, offset_fsb, count_fsb); + xfs_trans_cancel(tp); + goto found; + } + + /* + * Allocate the entire reservation as unwritten blocks. + * + * Use XFS_BMAPI_EXTSZALIGN to hint at aligning new extents according to + * extszhint, such that there will be a greater chance that future + * atomic writes to that same range will be aligned (and don't require + * this COW-based method). + */ + error = xfs_bmapi_write(tp, ip, offset_fsb, count_fsb, + XFS_BMAPI_COWFORK | XFS_BMAPI_PREALLOC | + XFS_BMAPI_EXTSZALIGN, 0, &cmap, &nmaps); + if (error) { + xfs_trans_cancel(tp); + goto out_unlock; + } + + xfs_inode_set_cowblocks_tag(ip); + error = xfs_trans_commit(tp); + if (error) + goto out_unlock; + +found: + if (cmap.br_state != XFS_EXT_NORM) { + error = xfs_reflink_convert_cow_locked(ip, offset_fsb, + count_fsb); + if (error) + goto out_unlock; + cmap.br_state = XFS_EXT_NORM; + } + + length = XFS_FSB_TO_B(mp, cmap.br_startoff + cmap.br_blockcount); + trace_xfs_iomap_found(ip, offset, length - offset, XFS_COW_FORK, &cmap); + seq = xfs_iomap_inode_sequence(ip, IOMAP_F_SHARED); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return xfs_bmbt_to_iomap(ip, iomap, &cmap, flags, IOMAP_F_SHARED, seq); + +out_unlock: + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +} + +const struct iomap_ops xfs_atomic_write_cow_iomap_ops = { + .iomap_begin = xfs_atomic_write_cow_iomap_begin, +}; + static int xfs_dax_write_iomap_end( struct inode *inode, diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h index d330c4a581b1..674f8ac1b9bd 100644 --- a/fs/xfs/xfs_iomap.h +++ b/fs/xfs/xfs_iomap.h @@ -56,5 +56,6 @@ extern const struct iomap_ops xfs_read_iomap_ops; extern const struct iomap_ops xfs_seek_iomap_ops; extern const struct iomap_ops xfs_xattr_iomap_ops; extern const struct iomap_ops xfs_dax_write_iomap_ops; +extern const struct iomap_ops xfs_atomic_write_cow_iomap_ops; #endif /* __XFS_IOMAP_H__*/ diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index bd711c5bb6bb..f5d338916098 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -293,7 +293,7 @@ xfs_bmap_trim_cow( return xfs_reflink_trim_around_shared(ip, imap, shared); } -static int +int xfs_reflink_convert_cow_locked( struct xfs_inode *ip, xfs_fileoff_t offset_fsb, diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index cc4e92278279..379619f24247 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -35,6 +35,8 @@ int xfs_reflink_allocate_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, bool convert_now); extern int xfs_reflink_convert_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); +int xfs_reflink_convert_cow_locked(struct xfs_inode *ip, + xfs_fileoff_t offset_fsb, xfs_filblks_t count_fsb); extern int xfs_reflink_cancel_cow_blocks(struct xfs_inode *ip, struct xfs_trans **tpp, xfs_fileoff_t offset_fsb, diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index e56ba1963160..9554578c6da4 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -1657,6 +1657,28 @@ DEFINE_RW_EVENT(xfs_file_direct_write); DEFINE_RW_EVENT(xfs_file_dax_write); DEFINE_RW_EVENT(xfs_reflink_bounce_dio_write); +TRACE_EVENT(xfs_iomap_atomic_write_cow, + TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count), + TP_ARGS(ip, offset, count), + TP_STRUCT__entry( + __field(dev_t, dev) + __field(xfs_ino_t, ino) + __field(xfs_off_t, offset) + __field(ssize_t, count) + ), + TP_fast_assign( + __entry->dev = VFS_I(ip)->i_sb->s_dev; + __entry->ino = ip->i_ino; + __entry->offset = offset; + __entry->count = count; + ), + TP_printk("dev %d:%d ino 0x%llx pos 0x%llx bytecount 0x%zx", + MAJOR(__entry->dev), MINOR(__entry->dev), + __entry->ino, + __entry->offset, + __entry->count) +) + DECLARE_EVENT_CLASS(xfs_imap_class, TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count, int whichfork, struct xfs_bmbt_irec *irec), From patchwork Tue Apr 8 10:42:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042727 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 83EDE26AAA2; Tue, 8 Apr 2025 10:43:10 +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=1744108992; cv=fail; b=cdyLYMAJFicQMRr6B5li/hHWraoEGyg21bzk4AM7wxIIl0bAA6YfwTbEMguRPy8VOyKHTF5u3AU1wLOOVw+llmBSaYF3ouLyJhIlfq2bZY5M/3+OZZrNKWCKSs6zMSOcofeUa6jobpRD/PHTqVrbfNus/gSuGa/AetJkvOyC16s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108992; c=relaxed/simple; bh=2jJkABhnrEyKbe0ozz7no348NBOtrP8EBFxVbQS5RRU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=e62UpB+Kiiv+2KnPQ7C1DWQvBvfc3AooqFPg4Cr4b6xSLb8+PzGUUxsNeexezZbIZhqOebyj7w0/Ke+bvJ4KoFdn0PElV0BEY3MoApQXO/6OJrVgb6U4LjTho0pPwWZwr/InmdBDUbsXQhpuZI56i8bKt9Sda3NorRYUt7mR9KE= 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=LzUgKGbb; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=K3fRIdti; 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="LzUgKGbb"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="K3fRIdti" 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 5381u5bh023227; Tue, 8 Apr 2025 10:42:52 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=q1DtlbsLn4J5hJ4GnVTm7CnqZhuyDI2jzTVVRPjjn5o=; b= LzUgKGbb1yuQn64NNy3rx0zrGZpeGVVNV8yLcmigDkEu5tn227e4gAJHkPJA9aTg 5XsM4luVhy7Hz4rR2as2b3abmeyuTJYVzd8SgodMQ8oc/PN6EdXuiGOCLrooPkMj V/XlDvoEjmua+R5GcVO+sUourx2QyNiYrcfggk69q7Q000mat6t06aIIgtR7O67A PwD24siTm53dgt1xPcUMFe6vswic8/l+FSla+jPJhzjB3up+GEJE+GA9punAVn4j EZLzjbf7e2M66n/k6RXvrXjl8Bdl/WJ1Cp1IyGGLFJG4j+GclsUgSzvw323mvdyd KbJR0DDIGS+NhyUJk5PuIw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tvd9vdn5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:52 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5389F4pw022201; Tue, 8 Apr 2025 10:42:51 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazlp17013061.outbound.protection.outlook.com [40.93.20.61]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty9twg1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pQ+wQ/w7z9sze6SusaZE0I2PoT2S16Auk87ipm0uXR12rV4vBeNQgor88kdY15XCFW+r45rEkfTe5vQQGVAUB/Uif2zu37ZpSuAolKjTB8riSTm5kwcQhNBEEFNUY/fHglFGPp7ntFEZ+pB4cWq/iKu73RO5WWW5WlsWJVmK5r8H3KAVUAHC/jd9GMtcrhuCp+2iRheeeT6E3fAcEkUB3OlqbRi2QHYMhQfsKc6pghtjz5aEKlAetg2D3mUyZJvoQrGg8MPiuzFHadgIQl/wJieLI8wCokmbFbCQ3e5SpvuWjh20zVoK/vLitPliYkb3rMnmfBnvv0YFx3OiD60+oQ== 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=q1DtlbsLn4J5hJ4GnVTm7CnqZhuyDI2jzTVVRPjjn5o=; b=ov9y7PWmNDaIGT6rtyPSNNb5lUFUROzJqfr0Kr1f8kz9qLlwqItlwlvJ1xHwKWCKBeT26+EjE8kRn4n342jZnQPJ8jVshcJg8TSWYzbbdwvzhjI6qqktIZADWTHO568aYLnc/e7O2xFaBD7Hka9xLPwi1VzzFF8abylqliIhhySzx/1W0npKxph+YI7VAxalYt4isBSvY0lRFFXsEfy/BAeC6C7Tuofi0JJO1qs35YHSZdBAlG77BuI4n0LGD5vwMcU/23VzPWnRNyB3/TjYdbHqgzxJSvjLQrYBiAD5FBVi5Jsw+QSffO5z1LMCLJoZJAd1rvlZgGnJPoJ7Z4Xe+g== 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=q1DtlbsLn4J5hJ4GnVTm7CnqZhuyDI2jzTVVRPjjn5o=; b=K3fRIdtihgahYSE8QK4OY6nAaRXEUJNdnH3qHvjJK68Kq4Rull9oO33WmVgk7T1YnDumO7GsjmAghtIiGUlmmgFWj+2KtQVkut0zX4ypxgJg6Ov7pbXEG1KFSarOShYtZE4JZYTVKlq9dJL4uyuvQhXQ33XwNbYVSsVGjYfOyLQ= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:49 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:48 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 08/12] xfs: add large atomic writes checks in xfs_direct_write_iomap_begin() Date: Tue, 8 Apr 2025 10:42:05 +0000 Message-Id: <20250408104209.1852036-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR17CA0011.namprd17.prod.outlook.com (2603:10b6:208:15e::24) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b8a1313-3efb-4477-e9cb-08dd768a1af2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: VTwadgjP9tqmxlyYno06plEC7pjqneJZLsF9w5pdjTOmaE4GkKvYbc65RuowfsesbcON4rhnM90wvSNApKdWCBfmfKrL3Mc/p87/R5LAosFY/u1vNi1vqb4AeMJQWVBTOMNHMk58SlCTN4GVAavnHdkoBNA8u0eu+vsNMo6cmo3dG9c50cRBJNqMCXo752fC3+Jugzn8iFAlUJwKDKe4P89PCkKkfzRXvvismnx17AxwQlpK8vsyQkEfXm4U3YdwLVPJCUGEDQH5J6aIVm/HwLrKzfmSbSZd/BfSvp59/Eqt4M/Z/i98t50WTYdELjJoIomOqsPABkFZsGnZSfw3eSrepXgGRUheT3MhKYUo3q+wWaemMPy2c6nn2t0jYpsvNkrKfaS/hm1bp3d3Fl5OMdsU9FSrPHdQnzEoXyreS7N0H3r42mlEhH0kiUz30183zIXAqZkcPFrG0UzYS6yUptSNmJjT0QRnriPCfM6ljdwPI6aiU4U3dZzZj6nHGXfqv0bGZys6hehH5QSB8brGzJIVWK0xca8cdMTQauZ4uNgpXOGdtU6g9+Mv+zSymrcwBacMnFSFPXyE7OHbPt8HHntjAnEagI30aLbPepnovzMwmVKVyMJFcF3YIvJIlI1nOC+OoUqK0sQhEOoVcd341XUiIQ4uqrpQIUYOfZ3mp81MOVL7lR9kDCugQC5Lpn2hPbunTbMjTaGiUe+RYO01Se3sMqzgUzZlizg2eRHK+cSo7ZVI65caU0gwjr0lIMSX/S58izIplgToYxAqKyReyRP80EBKF7dW4rD4E+71zK80I612BcVRzgKI8NqcDy7Mle9iVKjqwrjkIdriwI3RuRtWoOwm/0ks0AFH6DzY0mYx+UO0mQ5rHC7qcWnSQYmqNu2imNEOGNjp7yZJFh3kEGlvUmaQteQBAqG2dcTUYT3Ss2kRmp0veMaDRYou/CbZp0/jg1/dcF8Bi1bwTLOpJCrcKafpDZ6tdKM57n0z9p29rZMSzZSg64y/u8uqBayO6wNAFTn/CSwG0OOBFzIARJbYe55zzY2XvwR9tRdy4EXmqbLZLQ9LIpBVB7NbOO2Yc5DmlVV+QytY0We0IqYuQiWyM+WvQtkFpBnR16ZWD1WGC9oFc1QpwlHrTQ9mo6HkXAoNkEu7lj9AjL1dAsxMeXmMDlHnQvrRCrz0l5K6D1TIe/wJpIQiUvfVuyEr5j35euJkT+gJp7i+SX667PFpuyAJoQ1XmTFBL9iXADei8aIWfIPwG36JYqFem0kjrkY/gYifjUY5s2iwLzFAKcFmN6q3/DXlJhq/qN7XTVR3A3xJrhq6BfvtQFwSpKxcsmRCfXn9cJ3mh6mI/JkNjxRbYgQvR8XIbv3a8di4TwHmNy2cd1sJWgjqfgwIL65jubWw X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SZtHSy4p79SV4CJRkj7vh46t2LYLUsW+5Cvp6KPLzjj3Z/kfizoYtjNdHlEEI5EZI0eiSj8ryJ+IXbQ3Md8G55xGZdSR3giGBNP1kOJ23CqXQmRfSjnGBK0S1zZCdZpgcMf4an44zYLL4uv3U5h8UR6enLvBBGRCTb/Tl7+Gu8iMu4odfvk4rrIxUkuAVwE9xIXctqqxIjwnrgwy5U6zLQIGLs/cPJ+MOcytVijT4TcaFjYk+vjgY7s7ONyV6YNAh//0YZjcn9vUjh7qONkrL2oQ43ACF6Brq8U2ddMHH2Tf+D34g8jXMzGETLHKXwK3awULS+WXm/iYx/Ef30tWgGt+R3APjiSCQlDK9+mvLtMW4tEeR2SoDjiPi5DDXrYwdspTrzA9MjZGITRo4cAqNYZHCoZLXl2m2lCu7gZLxriiM1WGJ8rHWqb5Oq1BXG7sGp1PFDnc5M1aaiaDL7xVGlPWxWKg7HjF4fO3A4q8kOSKhT/BbYn/bkPJrpwTNRLgHGknScTjaCz7u1vmTAvrUdiky2C4L+TWiB0WhwokRSAqV7QWzPNXxQfnhtUeSX6JHlh5/jA5/o8/ci6FQyCT3XhmSW3y9SCS3G4ZZ6iCug7xiuNJb0G2FRHNgG++7FrL5Roe3mLaZfT+qU0yB8XB7F9GImagNu5+eiYK0olPcsXuMhQydk+EQblfWBGifBvJGlJC/xc28YvGkj30Z8GUNcimv54KIQ2uiBS7fhWSosu6mXZvkrp4opH1L3MtuxsWzm5M9zZd2trFiY22XxXXH4M1ZZzKsuqcGJp+Tn0/bX8ZgurKuuwfznbwniyDD1NuMbFTWPIp6S3keabKpp8jVp8iItKd95pMPpFFokRffpyYqVogdsMuDCDlDZIqHlgEUVMJX6zdCtjBe9WpkmRYB4+/UuBBG/nanYy02i+5ZyAVtMB+zjDQpLHG8ctH9T46E3Kjz8uVftCMXTZsFl1qjjm5mzU3JY89gH0wC9RdIp4RRg0UoSnxtE/WFprYRLn77506955aK0MkC9WmddC4o+25DPhy5vwwESF/uySccU9qVKu/f6IcwV95teBpOxbg2cv59yYrhlK92cBB7p20JvAKTX2s4BVS6xjQefIBpyblNDNw1bREB53hCGQeeysBRydHNnR8A7RT2n1YqhjL1JzjuqVV83LvLY2A8tAyOIS3mB4KnTYl/qXesOQf/089RCdb9AaWrvYdWbHm82a8ZziP7O/FiNYmMiv5CIvkZ4bO8UuzmccX/3HrRCRmLP60AsMTCu30hGwUw4ORw81Y1bDl23dutDmZRN5yAGDmL4ZlazRHUY9hcZ2eWQg9V2ihQyrm+Jk84ePRcG1FVLxQYg7AtfxrN3znhP3UdebJtQL1u/wSiLqCH4Tt8C62RJentAtL7abEzrYWXTYpZNXMEnoCb87P68/CzC0/h2dUTAmRJjnxOk6djkQsbtfAfBIF0/k9n+bgz5Z0HzMMWdp2zkl2olDiXSg2ERJHw85d84j6LwsVCVhxYJH7DViRmrm8+nSIGsDMuTYaaaH/iODeTYz7KeHympA54fARS4eTv7WORIR6N4cJN+4Ns3aOZsMnTyOTH7iaGB9bfkcO/RRL3Q== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ybaMUS/xqgkikIA8HILhI04ZrhFzYjmsqM209R5GMepkl7QSMk/GfF+ur637KZPxCS6wa1PnBSQLUhfSQYmtlGGvwCZSR0CP60JE/TsEY9dKWz5djkoaPuMwjyRyl90QtTAJV+eXgP/s7iJZeZGG5yyMyMAx2Dz8dA7G9bqYVWOPxQh1oEC5dJp1pJjTzTBcF10+jig1am90vQNNNI2dRrZm4EIULPNy5uEHSpGkfib+XoCG7mFtjjzcCdx+QBKdifmjV4FZDEzFxdBw/207pZBNC83L4x59UWMPhmALfZMHmWBI6EGNM+J14T+R88kjiOs7paqP3cWylytcEmCuuf+XdNR9XPWarpe/cXEBtvGkaSrT3w6BVbJi9eHrZuAaoMLCTCtwnD0polHMpjA3XXjFG5M/lVFlOjFO+rDGBVz9FH0N28kuE2qBTgFUlb7DEsa8MmRtigOOHbXMD6/yrMuVEZcsCkycWktUMNt6CiTTMDOWWwsmBs5veHQaQ4nv9lx/mf2ElNb5jgQL1XeHxvIz2v9hQ+fK0ZjWpKHKWBmsw0mSYMVqMiLT2E4fg911khabu8BXn5eY8nZ7704Sj838ZhZudZalGf1SapRMROU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b8a1313-3efb-4477-e9cb-08dd768a1af2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:48.8800 (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: kabsoMEHZMnWY/YI/SesU/Tvjduft4dBnAO8Mr1hgPvdPkme629LOX+iys/oxrQBIXoh28vpoF7L0DDTNToFCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: hGLV76rGzk7D5d7tU8a7eGi3PhZ1lbLR X-Proofpoint-GUID: hGLV76rGzk7D5d7tU8a7eGi3PhZ1lbLR For when large atomic writes (> 1x FS block) are supported, there will be various occasions when HW offload may not be possible. Such instances include: - unaligned extent mapping wrt write length - extent mappings which do not cover the full write, e.g. the write spans sparse or mixed-mapping extents - the write length is greater than HW offload can support In those cases, we need to fallback to the CoW-based atomic write mode. For this, report special code -ENOPROTOOPT to inform the caller that HW offload-based method is not possible. In addition to the occasions mentioned, if the write covers an unallocated range, we again judge that we need to rely on the CoW-based method when we would need to allocate anything more than 1x block. This is because if we allocate less blocks that is required for the write, then again HW offload-based method would not be possible. So we are taking a pessimistic approach to writes covering unallocated space. Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 65 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index fab5078bbf00..c6b5fb824f8b 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -798,6 +798,41 @@ imap_spans_range( return true; } +static bool +xfs_bmap_hw_atomic_write_possible( + struct xfs_inode *ip, + struct xfs_bmbt_irec *imap, + xfs_fileoff_t offset_fsb, + xfs_fileoff_t end_fsb) +{ + struct xfs_mount *mp = ip->i_mount; + xfs_fsize_t len = XFS_FSB_TO_B(mp, end_fsb - offset_fsb); + + /* + * atomic writes are required to be naturally aligned for disk blocks, + * which ensures that we adhere to block layer rules that we won't + * straddle any boundary or violate write alignment requirement. + */ + if (!IS_ALIGNED(imap->br_startblock, imap->br_blockcount)) + return false; + + /* + * Spanning multiple extents would mean that multiple BIOs would be + * issued, and so would lose atomicity required for REQ_ATOMIC-based + * atomics. + */ + if (!imap_spans_range(imap, offset_fsb, end_fsb)) + return false; + + /* + * The ->iomap_begin caller should ensure this, but check anyway. + */ + if (len > xfs_inode_buftarg(ip)->bt_bdev_awu_max) + return false; + + return true; +} + static int xfs_direct_write_iomap_begin( struct inode *inode, @@ -812,9 +847,11 @@ xfs_direct_write_iomap_begin( struct xfs_bmbt_irec imap, cmap; xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + xfs_fileoff_t orig_end_fsb = end_fsb; int nimaps = 1, error = 0; bool shared = false; u16 iomap_flags = 0; + bool needs_alloc; unsigned int lockmode; u64 seq; @@ -875,13 +912,37 @@ xfs_direct_write_iomap_begin( (flags & IOMAP_DIRECT) || IS_DAX(inode)); if (error) goto out_unlock; - if (shared) + if (shared) { + if ((flags & IOMAP_ATOMIC) && + !xfs_bmap_hw_atomic_write_possible(ip, &cmap, + offset_fsb, end_fsb)) { + error = -ENOPROTOOPT; + goto out_unlock; + } goto out_found_cow; + } end_fsb = imap.br_startoff + imap.br_blockcount; length = XFS_FSB_TO_B(mp, end_fsb) - offset; } - if (imap_needs_alloc(inode, flags, &imap, nimaps)) + needs_alloc = imap_needs_alloc(inode, flags, &imap, nimaps); + + if (flags & IOMAP_ATOMIC) { + error = -ENOPROTOOPT; + /* + * If we allocate less than what is required for the write + * then we may end up with multiple extents, which means that + * REQ_ATOMIC-based cannot be used, so avoid this possibility. + */ + if (needs_alloc && orig_end_fsb - offset_fsb > 1) + goto out_unlock; + + if (!xfs_bmap_hw_atomic_write_possible(ip, &imap, offset_fsb, + orig_end_fsb)) + goto out_unlock; + } + + if (needs_alloc) goto allocate_blocks; /* From patchwork Tue Apr 8 10:42:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042771 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 9174926980C; Tue, 8 Apr 2025 10:45:05 +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=1744109107; cv=fail; b=OP7cc1Gg+gbpL0sXhnQDWDh81VVTpjTrWIzhvxreJwimxYSxO4jIk6sh1Wp4cBjgjhleKmyYV+GZ83Qro+xPqQYkpSyrn4IRKQXcfduJQPP2CoCa5SvibaXcLwRLjDnwknk/Azf3ZCYo0GG652uZ61ZEF40mxe/IgxycpT80Llw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744109107; c=relaxed/simple; bh=OxQNq6QEGCEq+/HwIJELBoLmLVhKQyZgrkasPLbfpgI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=YNyXLYZ9SgBFBWWc3aFOKkM97B+tngERfZVlBTCw/Fyc6HfV+r4cm7daHxAldW2wJZJl9IbRBdm7xGw77xBULXLQNGufJ+LClY4JWcVlb6UJKTs7B5aGU3lSvLvbBunwTroyMIBIGlwRQsrsUl4KU55360XNa7n/3XYFcChw2fE= 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=oUUjTFpc; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=j2YyDT1N; 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="oUUjTFpc"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="j2YyDT1N" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381u4gq029500; Tue, 8 Apr 2025 10:42:53 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=7fYyOlvylyOU0DXb15UFUCNloOEWOG2/wSGF8TCYNmM=; b= oUUjTFpcFv22NUVdBKAMCbkvxqzDen27bd4Sdsss3240yfg2BLgvTlfKGOX69DdZ b+oFX4rbxZg3O32i9FqP5tG2pTHHPI0er34ODgFBID5Q7ExGWJJUR9UclpGeV9g6 1N+2bT97By7Faay/zocbLLqYxSTbi5yB3zsnt3L0IyP4hV4DCy/Ne3D2Dge5SZZG WulkatQB4nsuiTkbboPxyLxsmLQ75hJvwAT8FfOm+IfIzXOfD41xzVbUYJ9hOVAE oH/bTsP1db3yq3PSC4T1Eb6HVld/rQGFii2Wv4izDISiyNcCTuqWdV7WabyKSfCv jUN548FSBvJp+XjSQjlcqg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tu41cgqj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:52 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5389F4px022201; Tue, 8 Apr 2025 10:42:52 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazlp17013061.outbound.protection.outlook.com [40.93.20.61]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty9twg1-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z0W5p3yDPazn5Pf5zx6x9y4461+6kn6SbkrkQdwmweh6t319eRzqESyIOLcjAEn1QtSKBG5XDrUZH9hFp7yfHZoSER3GwkCbgcIBsB6s4cV7YlytHBhRptF9XvuCGtxG37OLruPs2dddxGyj78H3m3ljUce8bSwNfGqd29lJzq28/Qf+k53Q4JPAnm+ZlR3mJV78UdZFN57bHiVQ2SC3pRzdiNAtJA6mmdnFO+tYgyWqiyO48B318KrUBThfLImDFUfUqvVbB0YDp6El1WAXJOgRCmhIQ5/EDT68aDeDztPmwPkIsEjZiJ68oMDMipFk22RUddQ0GnH0v4xUoZpzBA== 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=7fYyOlvylyOU0DXb15UFUCNloOEWOG2/wSGF8TCYNmM=; b=uaXMENwWoNHmLGl1e4O2V5Z2dlYU8QjACIiaHWK6b7LdQ3Etdjvz1Scn4cmCREfyi6V+U39UjbhKbOazO31hez/g4M8wrk2gUlhhEimdswRhsGNMBhlpi75Sv+KFS0+kc8IQCvBAWemviDtLYWS2yqmgGueE02s1ZyhGVZJSvXMNGca7G4YMb562nTNC6dk2gHxDMTdX8zNqAYoXpcT1iPmlYoZ/C4MC7EFftlLlZOJ5NSK/Ca4Rnvwa70rbLRvG4g0ExjZq5IxVIdVGs457DIZEE/IeQD6DAw/pcgO3xrxL++CcA8WdyJT3OmGF+imOkHz4CLAwuGYUDQ5LY7jpEw== 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=7fYyOlvylyOU0DXb15UFUCNloOEWOG2/wSGF8TCYNmM=; b=j2YyDT1NO26SyJh8Y9Y0cPRG5OewmOLemiWoKTT/kCg+v+TCVMXQJGA+0823XJzGHBntmxiBZQVBmFJ42A2WVk49G4yCLFTCm1HtDO8tijETT3EbZvuIEObRP0q51xWjRxmdvZAvyuVJvi1F0KzUs+rFsvc0viMLMxI/En5Utq8= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:50 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:50 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 09/12] xfs: commit CoW-based atomic writes atomically Date: Tue, 8 Apr 2025 10:42:06 +0000 Message-Id: <20250408104209.1852036-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL0PR1501CA0017.namprd15.prod.outlook.com (2603:10b6:207:17::30) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b89fa20-7687-49ce-aaad-08dd768a1bb3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: Q3TkXI89a0NAGs1p/Hn7LcyA3YvmHMLE+ALPp2Atlh1mQes11WMhRBpWDIgUivVB0kYp+BJg/Ki4HA37QeJcDJ7blQLRWHlfS4Jj2JR/FsalL4Rc5Czbnn4twlAbajiMUxK3CrRD/wSiOcmW5ateInOpRMfobOyAzbn1BLcsgPoDStjpziV1PVYPsMg1ReNAHRxjgu2AHyENYkwrplUvo9IusQSirKsv7KJpuHlf5557yvSangVkfoWjlAbaJByxO9mq18oqaF7PREs7L7l/cTyME6ItowaRJEMPO7n4IAfQnRvJlM9Ij3IHNrTWOlQfFkmt3HDL56JCZwjqTIl9t66Wc6md0FTBxVLqxp6Aj1FhHng10j9u5XSXurkvM/+RzIJ+ZDviiSuwg0eKKv6Jw/VfAxf3dqf7iq0HTqgrGucFKDgjRqaUHxk8C3xnyHoO8+FKRblQlhbO8KD9mvAfMFIjYm80tbCk1ISVhnvWiP3M3H4tm7cillNH0ty/w9s4TlWcW6fh9rRF2OJZlPnYBP2p6mCfqYIK6a3mHh2NM+e8eFU5S2jtuFEXeWkewRwF4aCaIGLGFae57OpLCKRzApPQNMslSi53eHSsmMq3Mu2wxOWqPrkNKhzuDMtAHBtmaL1LzGsx+AT3Lz/wOFQySIf5hUQv6n+AB5fQpehFXq7SvsGg8wReIOOCLjjYD0UhNEuDLQDLLCZ8AbOgdfBSo0WcVlDTUMsEb9WejzSG56JG5ilVMVbZIVb73zUwD/4idBQsfJ2uaEvo7yTcpL/tk8kd0jhMjnoRec3+8iUrJ6Su5KYFxDu9p0pdBoOOIWTxdeRLU4DkKHlTxRYCEXStXdMNSszrmCwkNJa1TNvUCwC6p/OAnAUJQ8epfsmbAnEEjPzwKkK1PQErLhIAYvGSEL6wclH3SNoPgbEmxyHjjIyoZMYLaI7QIzodbhsj9KKWr9b+GKLsGXf+1M+tjsFk4djFUeTjoApzuAdnX68h1J0NXfjx8cr2hls2bGp1PYD7qv05XfWx++wFqH07DivN5hj6I6klA6KQ2MNIFQ7uDyRAt+zeJ4yCI0XPfot6aw8xr1cDGUMXjWIB9O31S4PFBxN3YFqNsVRlzblgiul6TOrCZHzxVo7keHK5B8p+QqT1PhJNeOsJVvb5edoKEDWrF/WPWXrxu9+uOD1aqI6M5wVRwvccUH0oHn3y7woCLOER1m9f+vwQFpP292BJZkDMXN6XQm3GvjXvs7429wYOhHN6rS2daSIlKkcuzilB0hy/ZGuk8MUJTC1MFkPsErgoBl593Dd7XUFaae7FczIEvSELJdbzYphyYOr/f/oUQLGszESeTNFfaM2hvVglrNlzExO87u14XxB+Qtk0ZUUqYMeTKB3aU8Cw55pTY5rhsXkR X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2SoEALCfpW9RvCUWMeFWguizobc7pVZykykbKqNqJer5aSo0qZt3nnGsX2HUDj9917Ub4BVWbm172WdxYgvEoIqT9uhx5D0glXbuExoTxo5z7Ib3g0vsuyuH7GVJIrMW95JmoE13ZS6Rylcx8R8ttMoLMihze9sQyGbIPfyTmmMuVTQgE6/UBZc0MuiLwwjmImcHPRFeAYoR8VoKr/9YHB9yEb0hb9g52zIFvQhi2pN7m5dXwybmgoIMqn8uoBc991Yv2902F4l0SKNst8WneUQvwAHeeAw1gMedXJ23lKEQDiR/panc8cRmf+EYalblYXOu871qes0d8ybmphQA6F3rslLht/8eMYo81TzSuCb/h7R0yDDivVukJtXvuW0PHZdxyjZ16TklCfZu6v8J+3WAARuR84ipRw1JaLcgtBmemLfSzCa4jNloQn8nLkKO2sXt9l2zfyUbNyRS1GoW9XzTyrZes13MwhQsE/CPL26Qos5Vu0zSI9EUSmFv4+JAXJYJ50hHLVw4h9i7v8gUQBle5FP8ZjrZPgzdopkHTonvyUwrVJXrp9YvVXCgdBysJRVeQnHU5eEEcsUJ+Svz/karAnFwjKG2m3XUV9M3j6jTq/zRwTE5cpp6X8Rs2HpEcSZDHJK1974YPkbReysN/rkHNnBUZ4mkaqrhT8AukrPiO1LBhZCvxRh5mb1wbN/tAbnFP9c4a6fw0asZLFEO62YYvmJkON/U4q+WDKBMmCN7d6/caG1uEcUo5z8OjU7v9lTMvh8ak3458K3EDMyw1N1MpVoMipk8i3TM3r9vh2T4IRHWC4K1AZPKq5F3tY8rifmAkVLGGYIKRsDpY3UevOYwY+n+N/DtExvoa8orkClWjorDH2A5ZqXrjY7GWrelAy5O2BSNp+yH1UK359sN2G3rqWVhdqmk0e8J3zqwYdup9VUbodDtLk3jXz/u9IYmnvtjRQo7uP0D/HbDpBNTzeO4vvgbBHkwamEqDt96qTRkt+XX7nLl1E9RXgqmN2zpOnRdjANTn49l2D+wn5M3gL1peSmSgec3QypeZIrnY//U7zPFDeIrWxYvJulnAE+7+2wjTMNsKob1PH4lKrShPGj4XT8BfTHYoF/9X4wWyKPuWLL0dRM1JqCYH760IQ0Whci2hs4umhyDJVQfSrc1UGZAHfdE0PUlITCHYyN8EZPJ1+gDpRuHRlw+/L3k7vVC2ic1u+87VMi4jXfsxLgx32Ohl4fDDSwdgbPwV/ca8LVdGHtj3MIDBNwJ5RZvkYRdr2wEIPxRItGxYOkVw4ch/YKt6SmqRxsTWBGLEdPk6vP2kmLzr3As0KVkt7LYZK0SEM8eN7QZfm7su3FY+XZ5bIdzL5vk42Vcndmab6kmUs/gLvozEGDkiWittDTW0AMSvfkRsF1uk6WGndw+BfQb8xQhC0ny4G1OcAZ4ivf/0lk7bqd4wVBkIYsuqohXOF3gCqYPyT6y+UTuIUGokMVOKdpgzyghAUKP97C4xvGQHzQU60SUejslIQ1cNRsZna6HQ9qItOkxuKny/xh1TvM2MMYcBpC3Q5Qq90eN8Wk1JglRscHCVsG1Ipczp97S75vTdXLxpFbNFuo/Kc3Pq/5G1g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 9CiprKysHWkznA14vUsbJNui6twhSPtHp211GjXGethxSEHOrZ5gLBYe73Qr47jCMxE5Ep4Y0M/6AatlKicSHyLvp0kQWhWFN3fRsWxGpXHz1p1uD1k/BxbtwwDjZlIQCxRkfA26KWc4bAl9+t4ukHcktxhHDaqQE9x4D73wPUR4wFAAIUVG6nArMvusFhB/C7oO2oPIRZuvQUXkA1oFPK7iJTvflX9l07e4gYxeQ38rM5vzL94grUXgkxyZmHeI9Mit+bAmQrLb+A+Ccf7Y8xVMsFuH2HngkB4iFz6ZZ6vdOHZmuqwlQRmvUC+mxxQdGGIxBPxvJm4YgVhswYYfw6ToSKtjGcd5Wv38tuCHveol5DAKpODIHX8O8IlR5g/14u0eF0okwiZc/7hPFfR8h7kDdmXviJGWcpb8+WoynAhMZ8G+23iJ304rR61YMwLd+Ld716eSW+uFiQJKqjiSsSXeVkyB7jTu4M+Cb9Au9Jl7YAKbnTpvmlYccfGJ3CfoRPqzHL2+pt5fCafMX+7fF91L1BwL7AABWgv3MgY6l2ZHjFAoXuOI9hcKm52/Kd5lY7B+2vDlPbOYKPPCsDIjKtEctORbpfCqC6Y8ydf5IHo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b89fa20-7687-49ce-aaad-08dd768a1bb3 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:50.0860 (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: iRD08i6mJOPATLP7t8FP2AtSi24JdlQaDSCMpNV+N3BoHfUIYPpNf2XNfLn0HAH3QJLtlRPtbfv1JegIRvDobw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 suspectscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: 1P91RsN6HgElpGn1ssEza6B6uCnykTC5 X-Proofpoint-GUID: 1P91RsN6HgElpGn1ssEza6B6uCnykTC5 When completing a CoW-based write, each extent range mapping update is covered by a separate transaction. For a CoW-based atomic write, all mappings must be changed at once, so change to use a single transaction. Note that there is a limit on the amount of log intent items which can be fit into a single transaction, but this is being ignored for now since the count of items for a typical atomic write would be much less than is typically supported. A typical atomic write would be expected to be 64KB or less, which means only 16 possible extents unmaps, which is quite small. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 5 +++- fs/xfs/xfs_reflink.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 2 ++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 1302783a7157..ba4b02abc6e4 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -576,7 +576,10 @@ xfs_dio_write_end_io( nofs_flag = memalloc_nofs_save(); if (flags & IOMAP_DIO_COW) { - error = xfs_reflink_end_cow(ip, offset, size); + if (iocb->ki_flags & IOCB_ATOMIC) + error = xfs_reflink_end_atomic_cow(ip, offset, size); + else + error = xfs_reflink_end_cow(ip, offset, size); if (error) goto out; } diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index f5d338916098..01f1930fdde6 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -984,6 +984,62 @@ xfs_reflink_end_cow( return error; } +/* + * Fully remap all of the file's data fork at once, which is the critical part + * in achieving atomic behaviour. + * The regular CoW end path does not use function as to keep the block + * reservation per transaction as low as possible. + */ +int +xfs_reflink_end_atomic_cow( + struct xfs_inode *ip, + xfs_off_t offset, + xfs_off_t count) +{ + xfs_fileoff_t offset_fsb; + xfs_fileoff_t end_fsb; + int error = 0; + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + unsigned int resblks; + + trace_xfs_reflink_end_cow(ip, offset, count); + + offset_fsb = XFS_B_TO_FSBT(mp, offset); + end_fsb = XFS_B_TO_FSB(mp, offset + count); + + /* + * Each remapping operation could cause a btree split, so in the worst + * case that's one for each block. + */ + resblks = (end_fsb - offset_fsb) * + XFS_NEXTENTADD_SPACE_RES(mp, 1, XFS_DATA_FORK); + + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, + XFS_TRANS_RESERVE, &tp); + if (error) + return error; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, 0); + + while (end_fsb > offset_fsb && !error) { + error = xfs_reflink_end_cow_extent_locked(tp, ip, &offset_fsb, + end_fsb); + } + if (error) { + trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); + goto out_cancel; + } + error = xfs_trans_commit(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +out_cancel: + xfs_trans_cancel(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +} + /* * Free all CoW staging blocks that are still referenced by the ondisk refcount * metadata. The ondisk metadata does not track which inode created the diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index 379619f24247..412e9b6f2082 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -45,6 +45,8 @@ extern int xfs_reflink_cancel_cow_range(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count, bool cancel_real); extern int xfs_reflink_end_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); +int xfs_reflink_end_atomic_cow(struct xfs_inode *ip, xfs_off_t offset, + xfs_off_t count); extern int xfs_reflink_recover_cow(struct xfs_mount *mp); extern loff_t xfs_reflink_remap_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, loff_t len, From patchwork Tue Apr 8 10:42:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042724 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 75DF226A0DD; Tue, 8 Apr 2025 10:43:05 +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=1744108988; cv=fail; b=Qn0BO7TV0hdGJVwkbmhknKVUd2jMNW189okkelGkLuAErQq2fwO+AnhutwI7prgiuPvRLQJJ2a06JBW/mjq/ej4xkdddRNcu4U0zC0ZXdVumUjhCtxbf1GBMOrlu8ypgKwp5+Nla69v7S6dyHU+kvd48SMZR+rHytnK/2YPTT2A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108988; c=relaxed/simple; bh=Ma2jTPnf3reRU8K4xdK3InXuGQGQ3bi+l9Jc38Nl9Qw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=e/P/+TJD59cI0326B/hjctOL+Q/Z6BVUKJ5n/ceXJUyzJ53vZNz5/9VgNs8AAz8CNX4ehvCguYfrC/1h7tZ1VdDipmcKsjVg7rZYhKd6r1QZELlwsAQ9o1VSbAbgo5LRmB9/ZKB3bFpO1+wxPHStGOvD2UqXknXk9Wbv90KX7fs= 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=AgeSSqP0; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=pzIm5F7c; 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="AgeSSqP0"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="pzIm5F7c" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381uUas008022; Tue, 8 Apr 2025 10:42:54 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=WopXgF8hk2pX3KSABAZDI8azfuEquV/UZ7Q8QMjPJjI=; b= AgeSSqP0aUKg14VdKYmeyduuHSzIHEBzll15QsKecLcuEr7E6OfBssa5ftLNmcPH EunF0g+QQSoAKTF2Rh1EZF8+etFAEglyLQl/BS4Joy6z8SzRBdOXbZe6/yLhWn5r GWvv8ekPU2rOuoKvUDKzN5AgnejSzRNW6OAInJBMljjXrGQ038rcDJATAx+EG0FH gPcKaL33bzPXJlZ4GF5u4D9amHqH5rBNgGAgpXR7aQbbnk9GK7I5pjMriCODzRGA gQlFzDHk6w3PHqZFOg1O69FXkBz35OYtG4BMKmY9QonK9EexFQ22dis9oBpfPixQ Az1ouNasWtJ9YKbdhwL8ww== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tv4svfxw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:54 +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 5389UL2d023953; Tue, 8 Apr 2025 10:42:53 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazlp17013062.outbound.protection.outlook.com [40.93.20.62]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45ttyfc30y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Aj6u2QecTeNh9MPvvuxdVo5Cw8jVTMliXxe0ny6eQZFM8S+q9Q5+7XOJxjRKLOXccZNqk0pY8Ev3ECDxZYgsw4MPHjyPtQ2QkttDi8Z1RYhH4jYt4b62SR83o7y4XoDSjTPNwQLHI1h67A013bMQ00+mKvij8VufIh1pvNXTkFprTn55BzCmsfmUtlQTKjd9NJoe1l5ptmyEklYAcMxo8r1/iCTNQ49Cl2oEe1ihlMclGBIGsvWH7NeEbWhaoITrMebCJbpk5zGCMFbdZNMiBILS2JpMKCl7m79FJDr/oXpv0Hdb7gzvswDwuRpOjtxvra4uGZZcMmJ7qQpVB3iSEA== 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=WopXgF8hk2pX3KSABAZDI8azfuEquV/UZ7Q8QMjPJjI=; b=wuPSDDe63dhzr3RH44LcEO+3NLZMq0+8eTmlmAe/jy8addOouXn3hRsoN9HRQQFx6bYL1O08xCU0Mg8zkmlt13rMyssUyrmGNSbEVOL9lE3RymZtChjeOE0bLbut4NtFt10lC6hYVrjoET0cN5OjtKkZiE71pBzg5xdjk3+Rywd+t8BvTIlO/Mm/kkCFy685d/qMY6Av+g2SbJPsCnbde5tmrenYhqfl6JMx/9TsbNo9EmhnoY77oitjyxw5PYROdaVTwShC0qK/ulophGdacODORc1OWEgZ7sLBYEFwE+DSPz9UMjDSMeuwANIvtQCpRsNGjtgcV1uGL4FvCsJ4KA== 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=WopXgF8hk2pX3KSABAZDI8azfuEquV/UZ7Q8QMjPJjI=; b=pzIm5F7chc+TwED4J7pRSEzX0yDsM9B8AxfuIeleVU0VcbTlqQOAEJy3ZHsXbz1hYrs6VMuUg/F7eiLLcJAiyQw/GwK7MdYqlKLXuq0hw+w/fISBoXywbd89bKxJOzqbhErkgNC78iAVJf6W9RlBuLelMiQzoRd71QsiUHPyyEk= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:51 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:51 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 10/12] xfs: add xfs_file_dio_write_atomic() Date: Tue, 8 Apr 2025 10:42:07 +0000 Message-Id: <20250408104209.1852036-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL0PR02CA0067.namprd02.prod.outlook.com (2603:10b6:207:3d::44) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: c475be29-d97e-4d20-7a85-08dd768a1c73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: /NoasFb6UCmmi8yYbAds87cnoGxr3Ee/XQ9iI190LED4MlGddQC3BsJiA2fDpeqAeq5ayQghEcELWJYdBc9WltUw9pckTiBt8sd4iqvmysf6AiM/RZ2N+c7hCk1LfXwMqboFmcIsGmvtLO0kkRBXt6WfnzjQJMEQn8tJOKZZyxzORdziV/WhgvtyVW7NCF/H9jPKkv+aBhp7CKZWGnvImtTQY8YpaaCaBJHxR5RjeDhH41u4MW6U/1k6Sxy/A9xz8VB3nUdh6DfXlxlzNKthaP1/1zEOqqHMgJN2dGOPdhBGrj05yQa1X8L12wvjLaGYag1a/yokslHfQ9eILUmiyMfNXSPcUD6kDfAsmQko4EK0Au+xBuRQW1j/6ghk4AcbaC4QZxpC04YrPGVeJfDdY9mox7BUewEubolNgvHvW34nlUZhsWCmJzrEqrwxxLIYJ89XX2gAlT4LEkHeEqzXzzhkGZRzvXvwWtlYYsGzOgfxjz6stEFVkWDHPFA24p8g70NymXrJqUeGTZYRmT4rd1sSPZBpxKLLOfCddYvQQFNsq92FAqzHGXENrRh0OxDSsDimkvlfyq1F+dvHcwy25j36vp/BeFrVaZoMPQcUArPJoQSG+wgf+lJvBBbzH3cjeNtd/yHTSonNOH9HKfAOwPSloJ+VPMSsXNyTL9SY5ibfUBDSMIteiua3yIpvvPdg30lpNISZzqPz6mF/aLZCte9vqGyfY8aXtlWGr0UO4Ibn33QB5HZgP6DKp0mEB3VP2T8KhzbdQ1ga0zWhpNnLfKWeqlBFomHiYou4DLYjr7RYPBg4jYCkJVqWFLApHimUCGuQMv1Jh4jCA2v+GHh+0jJeTHfRDtZ+v0iH8e0EzErTsFnqayDwdMBZwTNFLr3c7frbyGpHSOCmdgneIj5kbmxdi7+v6aHuHIyqnnkSS0T8B96mOkeSS11FA5fEM/UvkTiFZ60nDllVzdh4KBgfT4qG4jLhCzyxlI6AW7TuFzGHXiJJLC9ojVrx48WQ1a66yYvJkfoqZNpSDwnXlDCTHN6lx1G3t+5KKfcnPuCU3cyAkSLG7onqgFCM6Tg7kEKW7zXd9PEOg1TFFl5/TVMT79XjDZcFndBz9sckRQWhsB1POf5nV6MG7YhUwz56ygMzQcNvCOCw0IjfztcaQWdVhUYzdPvhVcwuE6j05nHxLjiVDxrRU1gO11aQVBSGqL5QWbOxKvRvrr7QEslIMv0rUaLqJ+qZqKBgFNJnCCVMNRaY59ASb3i3Nfk2XkzSIJ3b956ir7ufkRKH/RB2phLynTs9a94Razawa5qbKGJm+t2xJZjlkbbgiyRQiYkXeSCphMxN9sX22AA/8XaXya6rSE7DaRyyw+YeDlzW4gCPU/CxNvXSvKL701lcTBQsucbz X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /BkEtaH6TN3TipkHduwT44mjdizIMZJoo2BmsRKhRmPGx73lxFOhTnt0gUSA67oJzMlIhkCAlyeyY5B/mm0BuBBz1m0TmIY1PpSX+gCsZIsuqp2NjwJhX9Nmn0+TvFINkyqKS2ONr8T7nKjORSj56WJ4gMN+L1VndoCPoFk8KfSNWq0QMoo05fCuAB1u8860ICUkwAlNpOWuQqkN5BCN6PFqh9dBKmL2AKZ2jy08yxqpl0O1fWAbq/oQIFAyjeoDLvYksQ6zF+floP7zaErQDz8YtrnMt/UblmLd6aKLHHC4eVjndDcuAuiFiglLzPMKXUuqofmHci+VuLd/r/dyVqVJ4x8iR2S1MzlH0DWzRiAI94S9aoL++Q3iUBPpAvGrmvzyI1gdpm1A8XRqPE/gyE4FbfnqPJRUR9xrQk6VrcxC5j3y/AlQDLt/R7vEcEaXmNyEhbNjo2dtVZv43xqi21/YatILD4Z2brNp50TozR7pdbI9aKYsr7LWKTrTBQmBzxDTyR9tgD9PtuWFkgsokY4Qv7xh6ohH+734pS5LDpQUsT+On07R4oYg01lFAKmja/6iPhdw76cbP3WHc1WcVY9ttu5sxtUo+Hyh/R7k0DlhV7sgWSmDKs+o7hfEczT03bCoXBktUJd5ZQoeGYvsXuYJM/TBGtMByTlYbxWns+R8Rx0Cnmij5mxu4usJn1P+1SNFQKRpM8hGc3Ykk5TCzaaGgCN29Zf3lIZuwEWCyLQZ4AuUgj0uKmAmbq7S0azOdT2nv8ErRTfnYPhSMlQjUZJuQhubk+t9gpci5Qku3v9A2j9DCiw2Xe4cxIQP+AJnOiiZYDSwauoP8EjEjTPxkP6ldRVS7uyXa5M7tPq9UoFZqGDVumIyAASjpfACwvq47iENlyFICGzW+QcLurp+jvOeH20RnpvmyH4Ht5j8xBI0Zk1vA12tnI5eyEQiltqKk9hY073sQLooiSFxW/0pY3LGtB4Ay8unsBjnl56oDmIk+zZeGjVxEnRV7Z5j0VwvWyCSqG2oPoS+M7kJaljUyjDt1ZDDyQ0x+4Ux7QKo8sTjVgyQxoYug75KI5E6cvHZTrqSyriSwbCzOCqVD5IPVpyDFS9ILR85ejdH1bD4bnNDJFcezcNqxvWK1iLAj2E910x27J8HuOcyazQ8WnAtb5aUPB9bUHC4pIdrMsTzG8Ri8nljfxqWide7VfJkpG0lPAJa6x6tjs0pTdjVqnQkdQlO4Epy6B5+sHwH+PRefom1jNQNTiKyZAUQ9t28FuM/mTMvJxnoHaqFylzzN3HJwbXc+3H8VooXmVMqs9tcdmu484/AB47fAvGXYT5pJh32w0BV4PazFPNe7NV0Gr+YKGqky/96vZ/U5CWcTOTtU6DR2evSXmzGGfBhgNzIPKXdMLQRE692s6v7cPdgbVzTOhBy2J+BZBUN5uQB5rj/dQddUHpPrRVVYIXbRiJAIw+BDOfCdrG6DVi9zVyzqS5Q9HK3uNc3yq3QRm78axMW8xc2tqeYlV4CiZeI+1YeEmrcLfiZWiTaySlExoRXCElHGFvEhT4FVRgu39dNwpFid7zTKDD3qybiBZSSRkqKrkq4NSo4ssHmHWz3dNrxbVRSsQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: MCqO2TkOak8os9UTJptg5NJJ9Xpfk3pQVJ33vwEGw5vb81P3otASq+vJultJrOkDBc+48ZxTIUd1ElXsHPJLNZG3SD3IqloTPRnEh9+xZFAQz649DGcu3Z/d2UAB7lso8Uy/3p2mjd6+zkf+U0tHT77N3OTAs3aWwmlhSWg68Sg81h0QIDZRFBPfGOQzf5oHG14ibNMq75P4GuCNvuFxcFwnoQw6P6XXeQ/RxRTeZWQjIV23E7sEWnbCmfYWr/rq7TgQenNJIyy6xUiYtA6xv68u2Wiehi0ZlalP+a033wx3yEZlNB5zwFY5Jjflzni2P+KX+TM9iSU4ymNuF4MmMwTLq5sL+Jked2cJV9LOpLkksuBq8noI7ams5rw6WdYiER2UqyQtX2M14nmCnJamO082N5vWceI02tABLAQRWvhMLAmsQzCLG3NsCzOgHpg2ymtrD1hP+afuVYxD5Gryg4MlEw2dTdclE2qLad7gv1oHiFRsi5mtRgV5ZAlyBr/d1iiz+HqnR4hw4V2lqb4uiMtcN0Zj9bTBXoNpoNOIJwc+FkEkQ9FXkYiWJigqILvyxw/UkJ+Foy3yVlRKHYq1owX7LdwyWEoRorBfT4pgChM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c475be29-d97e-4d20-7a85-08dd768a1c73 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:51.2515 (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: bAM888bRvIsGRAVgewHp5nCQjnvmEU5uH3fh877XvabJ1d1/7PkUr1pVOEyxYdZpYaH2Orw+wEu0ZS4Cbg+kkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 bulkscore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: SQKtiZiEbWzh2JaZ5geZzMPeDVa4OXBm X-Proofpoint-GUID: SQKtiZiEbWzh2JaZ5geZzMPeDVa4OXBm Add xfs_file_dio_write_atomic() for dedicated handling of atomic writes. The function works based on two operating modes: - HW offload, i.e. REQ_ATOMIC-based - CoW based with out-of-places write and atomic extent remapping The preferred method is HW offload as it will be faster. If HW offload is not possible, then we fallback to the CoW-based method. HW offload would not be possible for the write length exceeding the HW offload limit, the write spanning multiple extents, unaligned disk blocks, etc. Apart from the write exceeding the HW offload limit, other conditions for HW offload can only be detected in the iomap handling for the write. As such, we use a fallback method to issue the write if we detect in the ->iomap_begin() handler that HW offload is not possible. Special code -ENOPROTOOPT is returned from ->iomap_begin() to inform that HW offload not possible. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index ba4b02abc6e4..81a377f65aa3 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -728,6 +728,72 @@ xfs_file_dio_write_zoned( return ret; } +/* + * Handle block atomic writes + * + * Two methods of atomic writes are supported: + * - REQ_ATOMIC-based, which would typically use some form of HW offload in the + * disk + * - COW-based, which uses a COW fork as a staging extent for data updates + * before atomically updating extent mappings for the range being written + * + */ +static noinline ssize_t +xfs_file_dio_write_atomic( + struct xfs_inode *ip, + struct kiocb *iocb, + struct iov_iter *from) +{ + unsigned int iolock = XFS_IOLOCK_SHARED; + ssize_t ret, ocount = iov_iter_count(from); + const struct iomap_ops *dops; + + /* + * HW offload should be faster, so try that first if it is already + * known that the write length is not too large. + */ + if (ocount > xfs_inode_buftarg(ip)->bt_bdev_awu_max) + dops = &xfs_atomic_write_cow_iomap_ops; + else + dops = &xfs_direct_write_iomap_ops; + +retry: + ret = xfs_ilock_iocb_for_write(iocb, &iolock); + if (ret) + return ret; + + ret = xfs_file_write_checks(iocb, from, &iolock, NULL); + if (ret) + goto out_unlock; + + /* Demote similar to xfs_file_dio_write_aligned() */ + if (iolock == XFS_IOLOCK_EXCL) { + xfs_ilock_demote(ip, XFS_IOLOCK_EXCL); + iolock = XFS_IOLOCK_SHARED; + } + + trace_xfs_file_direct_write(iocb, from); + ret = iomap_dio_rw(iocb, from, dops, &xfs_dio_write_ops, + 0, NULL, 0); + + /* + * The retry mechanism is based on the ->iomap_begin method returning + * -ENOPROTOOPT, which would be when the REQ_ATOMIC-based write is not + * possible. The REQ_ATOMIC-based method typically not be possible if + * the write spans multiple extents or the disk blocks are misaligned. + */ + if (ret == -ENOPROTOOPT && dops == &xfs_direct_write_iomap_ops) { + xfs_iunlock(ip, iolock); + dops = &xfs_atomic_write_cow_iomap_ops; + goto retry; + } + +out_unlock: + if (iolock) + xfs_iunlock(ip, iolock); + return ret; +} + /* * Handle block unaligned direct I/O writes * @@ -843,6 +909,8 @@ xfs_file_dio_write( return xfs_file_dio_write_unaligned(ip, iocb, from); if (xfs_is_zoned_inode(ip)) return xfs_file_dio_write_zoned(ip, iocb, from); + if (iocb->ki_flags & IOCB_ATOMIC) + return xfs_file_dio_write_atomic(ip, iocb, from); return xfs_file_dio_write_aligned(ip, iocb, from, &xfs_direct_write_iomap_ops, &xfs_dio_write_ops, NULL); } From patchwork Tue Apr 8 10:42:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042725 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 75E4D26A0DF; Tue, 8 Apr 2025 10:43:06 +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=1744108988; cv=fail; b=QbbibjV41Cqk/l3+T2C+oJx1sIXWE/BK7nrRT5mgvWmX+X3hF+PQ2/yHdkxeOri5DOXawn8XMENN4jRJSeCLZtdyo5yXUl22T0KlQv+8IeHQRIKb2swvC8FTSYN6E2g1hLeR12ZMATy8RTK15GaYKpfHjFN9TCecyPhfPDj0Jz4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108988; c=relaxed/simple; bh=tCLhW3SmDeqPqy0NfzQVxVwZ0QIWSIEgLzir2TkZSEE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=cFnoK8gG8TKLc0YP1XD2kOYepeu3aGpfQQu6kdNeigQLCmBk7v5jL6FgqWpNwyHz1TmidXqZ6feyE7j65AUANZcMz3ys8icyo3fX0b6KRY8TnMfZMw/t4nasDhZi6HjEgyrQqdp0QndXDTEFL5lka/jorQAGZ5CIZzkGHVu6+mI= 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=bgfLZrkn; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=UOd7SeEl; 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="bgfLZrkn"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="UOd7SeEl" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5381unqA029521; Tue, 8 Apr 2025 10:42:55 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=QGUEX+k1c830+1cg9sMujhhw2cob7Q6KkVPAw/H4Ax4=; b= bgfLZrknWAeYUZ2D5Zn9Uqi91MwpvMlo7TWHJPV0nWmwxrHClkfb8fCkM43/EQl2 i6Ox5ZCkAxznMDI0iyALLEd4dgnEl56AyhGDBlmxjLTRIuwbVocm27bQgxsUdLCf 60ttzVCUW6umw76HpSbHjtVeIc7P1YzS+iN4pYZf+jo6NnPxvSNTkBAO6etDsD8G HHq6KfsPBcGumt0o5DSSJF7WzkuPVie2P4fzM6lxFKWR5Ruoa015G3ZPMdRiu34N py8KD5vvVKAXaIP0IRL+qDPzBzi7qndPePUuPCJtc/gTsZRMlHR1aEMpQoOIrpCE VJyHaG480CYgMTUHQdNi+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 45ttxcvf3j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:55 +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 538AJTWL021221; Tue, 8 Apr 2025 10:42:54 GMT Received: from ch4pr04cu002.outbound.protection.outlook.com (mail-northcentralusazlp17013058.outbound.protection.outlook.com [40.93.20.58]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45ttyfchy1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LS5ePnQ3fBdJNBt9ORZ0ibLQjQP/BLMA6ia7w/cmbw52gmeGgDUwBAMS9UoF1fsL4VyozrpyapEvvSEawEWXHQav3xxTju315tv3X4jsr7wXNV3EFi7Fic4X0bYQpdMMfPguDkpGaTFfOE1ui0pjFsJAIpzwVAZuhuZ4XNdth72H23gagUIB8BD1csfpmjsZ17Dgfu/HhTGm/OCvo/WA6xvqz6kErnzX2VoMcUeEAl/IanYNPqR//CqSEX0ADfMbR16RGSOC4/r9ovfXqkjYvh+TBgzD7YCzZgAdb+6nzYn1jzfGMRK9QJ1/ouAr6S7K9xHY9xxhHIg0Cb7Tq3+L8Q== 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=QGUEX+k1c830+1cg9sMujhhw2cob7Q6KkVPAw/H4Ax4=; b=xwDOK3ZEjgpBdNOQaECUuksF+t+l01WH1YnyRW20ZBchxsSv8LquDaFvphpwncSZNZe2x35a7Fm0ieWFIW+JKBr3vEcCySF0zRzP6CofF2mKgs7Lr3ORrxPQX5XEMbHxog2jvIKghg8ZnRJ2R/MgNZvQp9ARgkQ0RuitOYrb6d1V2hyXH492F182Ex41zyJ+iGD8G4yiLVja81yOlKIG3reLnMEX8po6sjvnZYIfh0ulJdqToy7Lyy3WVb3vJKLRmen2YxCJPhr9JUX3JAuoH630uXJW5pWNKNnRWXwB85NVPfa0REzxSx3l2bG7BIcxhFZU70ZWJ10cv5mcr6tQFw== 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=QGUEX+k1c830+1cg9sMujhhw2cob7Q6KkVPAw/H4Ax4=; b=UOd7SeElVWqGc8QexKBcJSkvsRlwloRdbEUy4pYFW69GPdnA/WAoAfLnYeecw0ugE3kd7DBV8dLqUAT9jgv6wELVbiYAjeXKLCSW+fcB9OCO6A9amYnWSPzs6hA6nk5QdDoUUIHtVaIs96LYaWrTt5CQN7+P8RMSqEye68HMziU= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by CY8PR10MB6779.namprd10.prod.outlook.com (2603:10b6:930:9a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Tue, 8 Apr 2025 10:42:52 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:52 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 11/12] xfs: add xfs_compute_atomic_write_unit_max() Date: Tue, 8 Apr 2025 10:42:08 +0000 Message-Id: <20250408104209.1852036-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN9PR03CA0985.namprd03.prod.outlook.com (2603:10b6:408:109::30) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|CY8PR10MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: a0ebeb42-add5-4152-4778-08dd768a1d56 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: xGFSs+NuapPIs5VXvqxgPZyvdjCdEIpJCBf58/hhA0O1D85wZ1Jtr+Hz965QNQe8om7KKCsqaGt5/Q6Vq72YDrjJQrGAC7LcyvuLNy8fj0+P7pqPxaxeE2G/oskr7wz6pbeSA8bfi9w5tsJPO2L/LXglA56M6mRSOVccTcJniBYzU8UuRFLSxgM1L2Cb6bK6sg6qm8GnTadbb7L+ACu7LVrIm3eIYGWAf4gCCSV1oR4fyvjfszxd8Yf56FYUO6IMVA3Ytr/na9zTesGnBJ6FpdHWS8/cLUa6so/roSsVZ/DThmI6VtDJ9//AlyLNkQQkwQkWu06CbLFHwb08rb8LmaFV/ONkwfMsqte40uT2zsnjMdW8jlI42N68MsQSsbM2E1ss/sZ68Oyig1iyHJQ0N7BBLoXcHNwNDtq+vR5BbOCY1dpU0SoUclzMg6TaRTXbdslNAAGbdPUlj+VcD689AiKTO74NoTbHO0Pv6u017p8A1UuL/leD7MAWoUoexoQq9CEp9pXqoKjbZe1kHyUZV37PWiaOR4ZOsqSrV/qauRJtlPDarJr6E555FTpns/6ioLiGUqWH67MBGhkh7/b9sOtjL2Rp8Fh45YM2tAphG63Oc/0gD1hzuD56Bg426zi7D/PQW7DwUoVaSNJ0nvXS6gQjvivAXJdR3EGP/DBEwaZrKVkpTJEOBemh1M43Vh01hBQL7ADcBz+6NjV/sOla7LvH1WxdG+hOfawHxDqNusf+GoxR/3ouHAxF43OX0lTAFSaIEWsVIu/JmyLHi/pMJaTzpoRJL5ELiKFrtWhgjVRyWoeU0aaTWT1r46MWXqa9jwT9VVD+vfKw33+w+2GcNJYAZ86eO065UKehw2NQ+0ghcn09dM7nrTlQxsrd2+G8YzxlFHKkTO0BOUH+s4kOlSEeZuoEitxaT96PHGFyKmGa85dt4vWS9LJNq1IETxTrC42FibEa/iLigvJ3z+onKwNsr1GGCQJtJ++EUvAV0zy7l2hUymyUjTEPPXWsyXUgU6bTjavINYhwphxP5ln5aXHntGd8DBbY+ubSBKBVwoP2HS8e1mr99WQfQ2ACWO4pA2DfZvyWZkMp1dkLc3sZv3Oi2ducdsLJQkjQy/FVoQcjFw6jrkhFxll+50uvQf4x5UkDvLgKKTLPjTQCvEGI909vSmoMDv/YcF2kPfH75iJ3WdQqdB0uNx79rB0RJYxVDjV/PJvXtMNw1MSXAzM4/tnS1hskTrYAAOiBKiE5yY40jdy35HnAdY/l+bhgDRPylTetd3z9MQ4Vj7wSqcGdQCSvHU/xuky0vnUDhpT8rHDnuNUhjPJ8DsY7vn843T8btme0pcIDjF6ibedvT8gpU7HyifcdlM3MJtcN/TfsJfYf4DakZgfwKxP79PSHHwg/ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Sl2JQ5SzdJ4bo/YEgCuViffZizUwFMk1IOgjMa6buYTEyJ00NtlBRIcK5VfWau6RbJvJLk5VZEbuNrvPcFyRUPfC7IAZxvRQy7Hr5nr2SjXGsWKZBoPsnmQpC4SlRheMJOtHDfrevdebrX3CA4V77HXMO32eOxgUxptn9LssRlDMd9kRF9wzIgmKOZCvQsLTgI7gSSu04upa9garRCPrFNHm5RRDW6JBNFTKIC/bffrYk/yIdBI/5X3pqiGb5H88hEC9/e8SgcvRyRial+S47zj9AMKu1itghisPxHYHnwOtpLKvCi3l16doQhE7kkQ/l2VzFkKuB74YuKyCXrO7iM9b+XNxci4EavLy6WynSYGHtf56OVFw22/jzTI/Vt3dv6BKUrycN81/Jj0UKYEsQdv6OBDsMbtSM9T68JSir41vzfH2nyPoLtCh7HVrG6eNpc9o7xLvdCT9HEiZh5ym/YHkPhydmlCjIaIiJbRUVCqveqqHT4bev/lTVH/8xDuwJP/gWs5woy59XA/fMGBzgM9f1blGQ9zIb0EUcjBT89SgFqbNYMGyqNmjxpqs+BUI+LT89OzGpLI2BZQ+Ta5uAIRQpGJn40E6yahNQRde5tGIyf9+mhrVdmJV3MBuhId49xltadLP/Q7l2cdlAktEQOxH/re9RnGT8nV/zNnrdRjFoVJYPo//yBoXAX/hiwBM47/OQki2lIE61yL37c1dDlqIGLS/YIR5OdqhaOthxAtM2+nHGdFM8oBfGKoWJLyevHAc41qnjEgny+PclQ7IgffPVe6kHDAk3nzcUGhpWo2qSMhtD4oPo/7Wb7ozMG9VzU2IFal+1nTOtor4waSjWqiuWLXnKFpXgPrO+h12E5u0IQxA/z2FML6ERt9YbsSpOF8palsswebgS+QCIML0rSpfUrViV4gJMEeoGVKOIrg8sx9Z21KY3/Uq951lg+fD/j71FokqVTld4QBj3+K5sX/OoebUf23nbb06oq11Us+nlOAzN4Q7GZG5xZwa9OMGf1ju7pAxeqetMilJC23jziJehFd90B5xMztiknxVuqcZ7vR7++hc1VsBe4rr2YeesomHd7UiQ/5iWV6Td2jIz7TpYykZREzbz3qdM1c6Z1F7YV/l6yNZ+qSfmzMUTuN/KCd7hlDyaIcdvfNi6eAmnr0dBHF8tPtGBgNmOpJJpsGr7E45/4OIInwQadz+XwF8WyxC0QZOvJO/P7UrMykOkz7U5OXrT/GOquXnJi6+l8tASA8QgMEKT82XcJgCkBFQC+lylKA2swHgblmEnkap5pyX3xH5H02QrurCUAscEcae2DvJiZ+aBHX705ICXcJzQhnQPj/Vu2a1ASSf8Wr7PW3BpD+qgdrEtasM10Iylte83g2N+RfPr/z9N13pYNWmKw+q7Y4+n5MbM1m8de9asHcGbORdaWadCTwxbLSRbDfUv6gG31fwwDxgF5bsA+yDLXPYS4MJJiUkFGuPDG+0B/Kp1sxdQKKNrRUhFKy+uCloeHkDVxAPmFbuaVAtbjiONXA1+xOuJ8tznlXxloxyFVnNHcG8ELQaMFNr9IGRQbTf4FizOvCRG66+mQqcI2gyehEU963iTaU0KfiNuTMHxw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0FzgH7/1tXxUCU6lNPV+c6Vb4WQD+5aZiyF3+0FjeDyeULizWKlt7h2KYEwISh45jsXa44paX/kIh5BgcMdJ2MnxNr4HwgLt7oE2x6fbvueMe81yBur59aGp6FAZZLDslXkOn2ViVW73sXL/5OwpJANuniCbd2Eo+Y5TQ65UL/j+xNncTYX4AYtpVgjwrVFD29Plgr/b/UL2SPUr9eW+uNbjvpRiyQ1H9S5x6uiPCCSZAXVqWZK9hQzgVIHhtBGEBHe1WUqRdgZnIR2rgLlsBb/Km99+9HnfCr4MCfMS8MdQcI35oBqrcBGKEejhWmJ0rqfJfWw6qs22+RgPZAz90lhA/Ni3i5ZxEmAPG8anWCBTXktBCp8+1+o4/XaGrBGvs08YvoLb08Bd9UKXZJBJwmdFelUZhjzO2wlaRTtwkHZVUlpeKH6jyDv/NeLTKWiAamVQssbbPO/E05orRlR5gAmyftQHDNsFMVX5PiE5SoGyJJ46bVViNs09W3CQfbeYP+FTAaobHnHwBFgvXwpdHE0FGNAduY0VdA7QxHXskHc4Kqz7QbwSwkAW3VEOIgGoWGxQxgEhtEy+yjA8HiYcMCXOo97QgXgorgglcYYuAF4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0ebeb42-add5-4152-4778-08dd768a1d56 X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:52.7798 (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: 3xT0dt3xmTpcpC18p9wsplhe12M5ogfgWU6qDY4QQHDzrKjbIhWlbvEDhQ4CI9dKz7i29vNU9mIWIHCuXqK8Gg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6779 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 phishscore=0 bulkscore=0 adultscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-GUID: hpTE6Z_UzdRoNjIBNh67_SHwpkuNGylH X-Proofpoint-ORIG-GUID: hpTE6Z_UzdRoNjIBNh67_SHwpkuNGylH Now that CoW-based atomic writes are supported, update the max size of an atomic write for the data device. The limit of a CoW-based atomic write will be the limit of the number of logitems which can fit into a single transaction. In addition, the max atomic write size needs to be aligned to the agsize. Limit the size of atomic writes to the greatest power-of-two factor of the agsize so that allocations for an atomic write will always be aligned compatibly with the alignment requirements of the storage. rtvol is not commonly used, so it is not very important to support large atomic writes there initially. Furthermore, adding large atomic writes for rtvol would be complicated due to alignment already offered by rtextsize and also the limitation of reflink support only be possible for rtextsize is a power-of-2. Function xfs_atomic_write_logitems() is added to find the limit the number of log items which can fit in a single transaction. Darrick Wong contributed the changes in xfs_atomic_write_logitems() originally, but may now be outdated by [0]. [0] https://lore.kernel.org/linux-xfs/20250406172227.GC6307@frogsfrogsfrogs/ Signed-off-by: John Garry --- fs/xfs/xfs_mount.c | 36 ++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_mount.h | 5 +++++ fs/xfs/xfs_super.c | 22 ++++++++++++++++++++++ fs/xfs/xfs_super.h | 1 + 4 files changed, 64 insertions(+) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 00b53f479ece..27a737202637 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -666,6 +666,37 @@ xfs_agbtree_compute_maxlevels( mp->m_agbtree_maxlevels = max(levels, mp->m_refc_maxlevels); } +static inline void +xfs_compute_atomic_write_unit_max( + struct xfs_mount *mp) +{ + xfs_agblock_t agsize = mp->m_sb.sb_agblocks; + unsigned int max_extents_logitems; + unsigned int max_agsize; + + if (!xfs_has_reflink(mp)) { + mp->m_atomic_write_unit_max = 1; + return; + } + + /* + * Find limit according to logitems. + */ + max_extents_logitems = xfs_atomic_write_logitems(mp); + + /* + * Also limit the size of atomic writes to the greatest power-of-two + * factor of the agsize so that allocations for an atomic write will + * always be aligned compatibly with the alignment requirements of the + * storage. + * The greatest power-of-two is the value according to the lowest bit + * set. + */ + max_agsize = 1 << (ffs(agsize) - 1); + + mp->m_atomic_write_unit_max = min(max_extents_logitems, max_agsize); +} + /* Compute maximum possible height for realtime btree types for this fs. */ static inline void xfs_rtbtree_compute_maxlevels( @@ -842,6 +873,11 @@ xfs_mountfs( */ xfs_trans_init(mp); + /* + * Pre-calculate atomic write unit max. + */ + xfs_compute_atomic_write_unit_max(mp); + /* * Allocate and initialize the per-ag data. */ diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 799b84220ebb..4462bffbf0ff 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -230,6 +230,11 @@ typedef struct xfs_mount { bool m_update_sb; /* sb needs update in mount */ unsigned int m_max_open_zones; + /* + * data device max atomic write. + */ + xfs_extlen_t m_atomic_write_unit_max; + /* * Bitsets of per-fs metadata that have been checked and/or are sick. * Callers must hold m_sb_lock to access these two fields. diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index b2dd0c0bf509..42b2b7540507 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -615,6 +615,28 @@ xfs_init_mount_workqueues( return -ENOMEM; } +unsigned int +xfs_atomic_write_logitems( + struct xfs_mount *mp) +{ + unsigned int efi = xfs_efi_item_overhead(1); + unsigned int rui = xfs_rui_item_overhead(1); + unsigned int cui = xfs_cui_item_overhead(1); + unsigned int bui = xfs_bui_item_overhead(1); + unsigned int logres = M_RES(mp)->tr_write.tr_logres; + + /* + * Maximum overhead to complete an atomic write ioend in software: + * remove data fork extent + remove cow fork extent + + * map extent into data fork + */ + unsigned int atomic_logitems = + (bui + cui + rui + efi) + (cui + rui) + (bui + rui); + + /* atomic write limits are always a power-of-2 */ + return rounddown_pow_of_two(logres / (2 * atomic_logitems)); +} + STATIC void xfs_destroy_mount_workqueues( struct xfs_mount *mp) diff --git a/fs/xfs/xfs_super.h b/fs/xfs/xfs_super.h index c0e85c1e42f2..e0f82be9093a 100644 --- a/fs/xfs/xfs_super.h +++ b/fs/xfs/xfs_super.h @@ -100,5 +100,6 @@ extern struct workqueue_struct *xfs_discard_wq; #define XFS_M(sb) ((struct xfs_mount *)((sb)->s_fs_info)) struct dentry *xfs_debugfs_mkdir(const char *name, struct dentry *parent); +unsigned int xfs_atomic_write_logitems(struct xfs_mount *mp); #endif /* __XFS_SUPER_H__ */ From patchwork Tue Apr 8 10:42:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14042726 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 85AD026A1AD; Tue, 8 Apr 2025 10:43: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=1744108990; cv=fail; b=q70wfewxCUNCNz3lVs1FLNr1ocMKNlazQrkfOP92rrlTgSWqpED87afWOGkv5o3c2qhf7FAh487j2vPJIGxDyDMSQ7zgH6RDuU/JU4QsuarT5GCFx6iQnlRczx7Ex/8+hF0qHkHDtTlmmGFTEvt4YbgTpyXpllybNFcO2K0iUV4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744108990; c=relaxed/simple; bh=Qka5esl4do73t9eWxVnRmzqc4T+aOFN3BaM4tqH47E0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=O3V5ddjdnaOQm5otxG+oiCL51scas9vtQhM1xKFiD9f235vBIHEO0f2nWi+HVB6NBIHiWQCf8fRN9stAXEXTtiMFEYaM8UxGJbe8pz8ePgkomdl9CFlhgOASlfZEEj6dOLgG8i3CbuBgDUCiIGNPzQooONWzN6UsojSOrSDNeu8= 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=lEOt6qyB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bdkVvNYU; 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="lEOt6qyB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bdkVvNYU" 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 5381u4bi025619; Tue, 8 Apr 2025 10:42:57 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=L8T9k8/yZ2/9JgtUeIXvx7zT/lKWVjyAkFouKFEyQro=; b= lEOt6qyB56gasdhN/n2rkyDfzJKc8wtr3OBpcaH+o/WAJG/OVi/7KswWwKgqBZ1g 8ztnSOkSmHijzWQe/sKPDPArZ7npHObgs4ZY3ozfIsUdIZzZyqZydzAWDpLyX4T3 GcizgeUgn/vZB4s7D1r1Oo2oxJg3tUHYPR/4HTai/5azCxRKo0ReYJHlVVh2iqqS 08ii5ci9vZsW6BbOMq2vb8901t8onCoKYD/SeGn9Qel2OMaUYRZ75VUXsBxhlDPt U48GyUxqqhWutFMCM3OhZr6yPzC59q0oBzSXHyxeEB+cBJamt7vfePo2DuTB4M6C yKu3u7r+LGjJvsx7MjjYpw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45tw2tmfat-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:57 +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 5389gFML001477; Tue, 8 Apr 2025 10:42:56 GMT Received: from bn8pr05cu002.outbound.protection.outlook.com (mail-eastus2azlp17011030.outbound.protection.outlook.com [40.93.12.30]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45tty93dd6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 08 Apr 2025 10:42:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zCYATMyWXACLkZZNNkK7spUZ3MZJvzPzze1yaXuTaEP4EpCqtMQo1zxffWmRLNfWCwl2q7vYpG5Tyde6q25/c1Ks/u6vcwtkFjz/u3RdyZtHzj29QodTjrwd+IzGCAPeNkkO6lkoBtcY2y4XclmX+Fe5MOtvuwMwExbOPiG0XL483PHNLcIuKoR7HwTmRZ5BndNiRpxb2FNOgK9QQGlZKTadBGfUGA2GlMFEQOBZDJ45yFTQa2jqkRRJHu2jHIqow1sv4gdCXgHjS1M3BzQ5y5KJ5KY/SWLgsGJzxUZDCmmJe8KcJlrI64yuxWdJ/Z28i9pNQXF2VIhhQhwUa91Mmg== 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=L8T9k8/yZ2/9JgtUeIXvx7zT/lKWVjyAkFouKFEyQro=; b=G0NW+NGL9zmjh/ib/S2m/PUHqVtfeuAgwRvQyH2vO1QVGk3j2zTSNAhc8a8x1cvzG1jliZ6G/MOfnCpI5rbXoCG3qWVtIwQC/i2DNZAmGyO8wc1V4SOyl6/5R/NWtFEQjwql8JajXXPJRRl0l2BhguFxyCnJQneEYLEHXxjXPHf564KbBRW4MDj1f5CPyGIVGKHGlC1/ipgHPM1RgUzBB8Iv5A+m89R+sR5Obw/pB+eEYmCeNNAUB9FkhedU76N0ld4qAxlxDpbpFOvOdzebTRUcxLr0UbS7+HE8qrKIWdF+VtI4PuOFffR4BgEF8H3TnzCs7VZq4tuuO9SDWBGYSQ== 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=L8T9k8/yZ2/9JgtUeIXvx7zT/lKWVjyAkFouKFEyQro=; b=bdkVvNYUbMq+O+Rkp7Wi3g+9HJyVVXFFQmXrmg67aHKdfe2xmIWzwXUd/GTbktq0fliPic3r3BDyXyGy1vMTHk0bvhhL2ktCDFssE+UbAJ3Dr8YjoZOZnbNfoU/FLXBLyO5QPvjp65nt5uWITI+GIwkVNZaqI7ATivCMRbfXjVg= Received: from CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) by IA1PR10MB7486.namprd10.prod.outlook.com (2603:10b6:208:44e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.33; Tue, 8 Apr 2025 10:42:54 +0000 Received: from CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2]) by CH2PR10MB4312.namprd10.prod.outlook.com ([fe80::fd5e:682a:f1ac:d0a2%6]) with mapi id 15.20.8606.027; Tue, 8 Apr 2025 10:42:54 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de, viro@zeniv.linux.org.uk, jack@suse.cz, cem@kernel.org Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, catherine.hoang@oracle.com, John Garry Subject: [PATCH v6 12/12] xfs: update atomic write limits Date: Tue, 8 Apr 2025 10:42:09 +0000 Message-Id: <20250408104209.1852036-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250408104209.1852036-1-john.g.garry@oracle.com> References: <20250408104209.1852036-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL0PR1501CA0010.namprd15.prod.outlook.com (2603:10b6:207:17::23) To CH2PR10MB4312.namprd10.prod.outlook.com (2603:10b6:610:7b::9) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR10MB4312:EE_|IA1PR10MB7486:EE_ X-MS-Office365-Filtering-Correlation-Id: 8519a017-82ff-4951-1098-08dd768a1e0a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: 7m0/kj6M0xSCNc5wEhqsfkmeWQfZiqxX4ReQIEfCSiopabeEy4dncFVCl/P65cc5Do8NqIEGIIGfQbRv7uC/DSiQYtTiX3iRdUnJ3copfpvnRUW7pLHsA0xqTcXEFs8BK3xVntQ5Zu7IFda+cRmq+NJdJPLGSnw6NCpfC4FvEbwziZTXG0kceqXqGjl5tdDbKUbuk9i1XPSJjNgtwoNGPmzRnTn8ZrvIfi2TaUgnhWTK8A01EI1kaDg3Z1wjUueT6mCDL4MXOIj0YzRVfmCFxHTCxdmZbUryjxRftwjpt96LT6ixGqvSsnPlxCu8YICuqdp0RoJNxTg+IAMsVgE/wycRbprxFDRl/0w1S/3YZm7Sg8omNZ1+w7myqXXsaNwdk43xXV7c6ShO2/O4koSAVWRFdn3uH4lSZyJGp7DYLtr0qav3mV+ZGOZEOf7LXY/cIGThchr2HcCkUPddPPm+6RXl4D04OH1IiHwTAt0tp81YxQRwIcLLQUbAV6ZTfMXJfe/+cfRFWakDvjvVD9fX7GfXaMzkKuDx5RjOVqrHnIsYb0ofNTufE1b+17KH16dnB1H+5U/DUWVnagKXt7d+GvMyUUEQmQJx1Fpd/0SUSLzMd2ciHOtuooD7+hy8WN/4cp3SrtDhNBdpZ1V/m09Jg70XkqPiwxpHS2+A0SVtKkIbqVoSc1GbgB3cA1dD/81jmt+ht38zZ2mY/TZTaCg8PJ9vdCnYpnCV9G/4FNeNd4cQdGAKnluBjieZLAMZCd/EX/5NmGGD5+cEn+TPSPZJVrAVRUYawrA/iUUFrIlX4BhpOIg4oVBEwMf28dqAjtF37SdgKakd0yV3mRklMvfXH/e+0kj8rUDRgwsm6Rl6HchlP9ZYDlz6gfjOL6zHQyXfOFwj21ykWCUOEhqJFfcf4002Zcl6B8UQYGjZWdJmTb3e4rHztF1Ky7T5mO9Djjry9RcvvFW7ALqKjCTbAMooJXC/VEQshZrm1QC0g6R3NfPneY/DynOHAPXBTl+bL2FLXxNIu03gZSr7rr+haaM02kVPrU+/LSeTbqvQfDDRE+s5XGtRffbDb+vJRwQSY2x0IQEk7woQ04OQeM0cesmzI/fpSHzZ5i/D9FMQhVeJlWVeKyhPqTQest5aaXqIgNN30kNpDmmULjOqpgiomJVF9iJQjvcYrgcVbpiPrZeP6lLIdxOx954lSMxBmXGdZGvCqP1q7xztGM/KuZ54V/ic0JrwYK4U7RLwHOUdFNBPtBMWqixMLQ7PcacedfjvzeFCTHtgHVRNdgS1j0OIZAdAIyLHCINemCBsYAiQAIVcE1c+qoX28jmoRZmbUQUJgX1rBWw7xsXv3DPBy55QZxKe0JQLDF81E3Up1gJa1wcmgKDes5/n/zg6cy++FJ7oyknA X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR10MB4312.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BbU3BkNd+SqsznevcGHxmlmdCeKeS8SkBFa4zvKDYmW690wGMJyqFhckOimASNWXC+HLGYajmlAYg9GOLtlV3fnbAlnUpO/yC+sv/F4Csj++tvR4Rjh95Z9GEt6V2kZAXW22/p7B6qywOj59YHe5DpgcY8H6LI0EG7xr9RHaCgqDQodhbmlwcIVbEBDavL+2G/rcN18C/Qv4wGWoxxHeHMkGOerem9Vqc9kJSQlY9yDsFY6+ha4TRGN60VbJOvmrwYO4zGJTYU26E1YU0Ae9fuWeGnJKyMHAgaZpOkGOPitAd+XEQCux+qJzxXG5Dbwr05p7aQz1RbSsb+RPHwzJTPY7ebSKAMpvF2d/H5sdTLNKejEpJVe0oVnivWzEgnzPQflOcX0rB7von0LBysfmsBrw9+UpJbGpn4/0mABf1Vce4C9ah5vCWfgFH0WmG2CaE/QyJRbFRLxiXjPWkx0vFtbVQwQWTNqYRS88e/liwnN6wIGy7Cag6jIetmJozwJhZSquDIy3TVCPAYh5G7yEUxIxcVsrUvLgqzgyGYn0M3+gz+P37u4EueZbLvuGEaIVc0wEmIcG6m2PMpq7r5Ol3LM761uZW0QX4RcB0k2xddTUEMcAy2dpqj9zbrgbxNAhZGyuS0JHbs13JqZPilrfV93jN3m0eXsY8iZs3IAodlaIqUB32Dx1PBhtE+QuY/HoOfkEMyvDczSHt+jazg/Xxc4/6l3NLMobi34uD/GottRYqDDJnA9FJIU2gEOCe0x171J0am9gkpI7q3ThFYcrczS4qIk0Gq/lJSw4wwMTPYr/vrdJbAfS3YgYW75uDBA+ftOxl7GPQAndsCi5LrGgfkGJEkKsEd4lF1XdBbtRmgnmL/WgHRj9K12BcUEOe0tQ0NCqtMwdbaRaYubtM1Y0/S0kzMAtYd/waJrpnYpMFhrBX9eWtHxmrSlQOw2xdDe7RtkgQaNbyUWYuhevMvUXKgyBNO4tXUHeP20kfQ7jG8OqmqayoiIXPwzdXMYgJQTE8p0gVJXWzqoRAWXkMIOQ4pP+bl+H17kJH/52pgyfagh2m/XJU5PBsrnFr802uuHwNXECkj1wd798nTU6Law+A15hgWR7tdafEcMENQrJbs4mz4PcA+CpCq7kftI7TfCk37RQRsXlvunaTi3GyGY9GwW0E9HZ84FuJtjYOldwu/VYQ2kZj2cI2RkAiVYdym1CDPkgznhfl8RQRvmg0IVvA/kugloHmx4x12E1hWJXv6LnzqrTkanTIxl8s5YT/mqAy+bdCraO0NTxaodeSWcnmjLkJp2Nji8qtrvBZdzfZ8NY8SyagmcmYpV7F77v7/DiYjAtMaKOyshx47sw8YKUtvwwo6YrnTB9MoChnJX0w4ZBv1m9miud57VXsvSnBQYCSuGoc1D7tWHgYytRnunp/1fC9kUGgWyp6LLhpCLFtp773209pRdmO64f14ice/M0jVSQSaDsAfX1eH1QD8Q+iTVQ/4/TWcgsw7pwNBrCIkZSuwYEwpGkkEFrSIIhnikCWyGjIJEkloojE3oerol3adcjqEN7qUO2SSm/c3QB+SSDmpsTbkCF7MzwbD6sY5YH7OCYLgbVHsL77VkaKfQNSQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 4dge3eM8rXCxfihvsJlSnLVMaz1OljIpSb2GKm2pA+2+FKLis4uNV2ayKXheYWM1M092RCUvwokIDkdp5nzg8lPoW8PnjN5UxYWgfLI6+7DJD2m0d0WHX3/gInJL1NTSZXPqDMGgB1CjkaAYUoQxBT0gMCRkNA1/a6vaBfCKvD8C280O4+QoJ1wPFjW8u3D+CWP3z/uE1NMqgQGbLYtvjXU92zUxjcesUgtH0R6QbrFiOyWevpMNX4JaDRJJxXlA+5HHAoF4IAgL7roek+MWoyk8uwRR/CJ89kpUJgH0D1UbVJCuHZ6tZarJgey6/MXs5LtmdZ5FGmlsNLnT9BIsh+bSynOLNAjc9j3T2C4R0ddjrESt65HKE2rhMWpcJYeR7OiW33QDtbPPxbbQmaFD1/0RjYBizR4bgeltDhTgwNeeo9iqXf/aAkCfb1tBqiSvUUkC7HpBYySC5MRyzWNVaWuuk9w1RRt22xst3G0NDuHSZCrs9FAu919S4ssvnNkz/QSxwRt94ROtLlhRva+Lmknxre0MbmLRj0Ny42egVtltsztA8HW1L0m7rylFzd4fSDv07JR0uob8TPPMpSQkMvBdFjVAKxn9VxzSUmNtsaM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8519a017-82ff-4951-1098-08dd768a1e0a X-MS-Exchange-CrossTenant-AuthSource: CH2PR10MB4312.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 10:42:53.9067 (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: gbB/rxwG+DN3JJ5yy0NKiovoVenuKnFPChqvd8xkCKbkDk+u7qv5MhspuTuB0/RAJIhdPJ4qjv2lPsd2yGWhgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB7486 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-08_03,2025-04-08_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2504080076 X-Proofpoint-ORIG-GUID: 1eFCvZL5ioGlawa1n_KBsRFIvD5mj_vB X-Proofpoint-GUID: 1eFCvZL5ioGlawa1n_KBsRFIvD5mj_vB Update the limits returned from xfs_get_atomic_write_{min, max, max_opt)(). No reflink support always means no CoW-based atomic writes. For updating xfs_get_atomic_write_min(), we support blocksize only and that depends on HW or reflink support. For updating xfs_get_atomic_write_max(), for rtvol or no reflink, we are limited to blocksize but only if HW support. Otherwise we are limited to combined limit in mp->m_atomic_write_unit_max. For updating xfs_get_atomic_write_max_opt(), ultimately we are limited by the bdev atomic write limit. If xfs_get_atomic_write_max() does not report > 1x blocksize, then just continue to report 0 as before. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 2 +- fs/xfs/xfs_iops.c | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 81a377f65aa3..d1ddbc4a98c3 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1557,7 +1557,7 @@ xfs_file_open( if (xfs_is_shutdown(XFS_M(inode->i_sb))) return -EIO; file->f_mode |= FMODE_NOWAIT | FMODE_CAN_ODIRECT; - if (xfs_inode_can_hw_atomicwrite(XFS_I(inode))) + if (xfs_get_atomic_write_min(XFS_I(inode))) file->f_mode |= FMODE_CAN_ATOMIC_WRITE; return generic_file_open(inode, file); } diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 3b5aa39dbfe9..894f56f1a830 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -605,27 +605,52 @@ unsigned int xfs_get_atomic_write_min( struct xfs_inode *ip) { - if (!xfs_inode_can_hw_atomicwrite(ip)) - return 0; + if (xfs_inode_can_hw_atomicwrite(ip) || xfs_has_reflink(ip->i_mount)) + return ip->i_mount->m_sb.sb_blocksize; - return ip->i_mount->m_sb.sb_blocksize; + return 0; } unsigned int xfs_get_atomic_write_max( struct xfs_inode *ip) { - if (!xfs_inode_can_hw_atomicwrite(ip)) + struct xfs_mount *mp = ip->i_mount; + + /* + * If no reflink, then best we can do is 1x block as no CoW fallback + * for when HW offload not possible. + * + * rtvol is not commonly used and supporting large atomic writes + * would also be complicated to support there, so limit to a single + * block for now. + */ + if (!xfs_has_reflink(mp) || XFS_IS_REALTIME_INODE(ip)) { + if (xfs_inode_can_hw_atomicwrite(ip)) + return ip->i_mount->m_sb.sb_blocksize; return 0; + } - return ip->i_mount->m_sb.sb_blocksize; + /* + * Even though HW support could be larger (than CoW), we rely on + * CoW-based method as a fallback for when HW-based is not possible, + * so always limit at m_atomic_write_unit_max (which is evaluated + * according to CoW-based limit. + */ + return XFS_FSB_TO_B(mp, mp->m_atomic_write_unit_max); } unsigned int xfs_get_atomic_write_max_opt( struct xfs_inode *ip) { - return 0; + struct xfs_buftarg *target = xfs_inode_buftarg(ip); + + /* if the max is 1x block, then just keep behaviour that opt is 0 */ + if (xfs_get_atomic_write_max(ip) <= ip->i_mount->m_sb.sb_blocksize) + return 0; + + return min(xfs_get_atomic_write_max(ip), target->bt_bdev_awu_max); } static void