From patchwork Tue Feb 4 12:01:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958983 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 D6E1D211298; Tue, 4 Feb 2025 12:04:17 +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=1738670659; cv=fail; b=dYrsaQvZfp9SyIyryADco3U20tvyRQVPifGM7E00UY7fhQQT2iruNWsAB/RlD3oSl4SdHa7C6fH97Bw01mFqpcb7nWKp6ByJ21ICtLvzaRXMknLGupbVT5BfvGNyWwU+jpUw8aOI7kKv1DlkPZcAuoU7Yi9vKcj9Z9XRiiEmH64= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670659; c=relaxed/simple; bh=Rs6Y2RijMk6vqCiypE7qbIo+0N7BxFERPAr6f7++yec=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=I4/9d9yTvQ/PT7Eb3CeR1U84DcXExpZa+0NtlOYYojjzCqfQNPsMF+ClbQxDKtoYhyuzd+oVGAoW56/1t18NOq2uuGtbRPeyGCuiOhLb++ZclqLLFwcw+vYXmUMBXY3bCes2rpdfpr1E6VUxRygefpf04b3fEnU+zzbass9aiZg= 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=mW+mONTQ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=hCSCpwzY; 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="mW+mONTQ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="hCSCpwzY" 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 514BfVLY013676; Tue, 4 Feb 2025 12:01: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=eeNkSfVsqaDK/HRonFeexF7KCPcNWrhOLHzLpGqNKII=; b= mW+mONTQJ4McBDnD3BTbzO7tN69bfKs1i7+S1rZ2QpZ0jHwfyHguCT/gyqqT55Z2 vLnjhxcjbqQBiY+7x52HC+fUltt2M9fH++iUzhTN9Q+Fa32p+jZP5eAV9Xt3C91Z 3ko5UjBosVmHvS8GDy+aOmzIiXQD/EAWlb+uqiMLqZSkrrvgfIFHCQOu9vBH3H7y yX2Bx188WnZ6qVl8RJCrnoiJOb8SDh324DQSYzneZ3bvHmluwN0meKKRHfSRctoH 3vVBhfvhTv7rl9yxTZhZ71YniaAS88Kaka7rCJzw26XUWxjtOPNpmQfgK5AYYQ0T tpHqonhmds0T+Fbi/HTJvw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hhsv4ps3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:47 +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 514B5OLs029398; Tue, 4 Feb 2025 12:01:46 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8dm5drp-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Wb176etjABcAeELH0fYDnotZQpY/Uin0DUThvpmy2u7Ou8nUnf5uiiMKTOC31GAF3r5yYkFeTwG+SZXXQjgQTd2Ym51ct7/+tfvlvl2T5yOkKeph1oI2wCOUetNKrn1sjvIKwnX/gS2X7FgNusSCFN6BHTkuxY4MlLz5Kxlx7HFER0p/jPUEDYDiCOn0HFkZK+xQUPeRzIlXdHFaYEmlF4FFuHT+7JvA9I6pFO90KUDI/VUyMt3rhKtSeNDsW+67YZL9v41/DSMVc9TDrSvnCUzMOfSeLTsjwq4YDuSxfnpCv32v2pDWPs7YimDCPor2KTRCbCJ+yO/P6YLn3aRYQA== 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=eeNkSfVsqaDK/HRonFeexF7KCPcNWrhOLHzLpGqNKII=; b=fUTrdYxCW7DLtbw+Vjr7rQH9EbOFFXNBd29Fob80DT/IadB5Z5EGt1nqhS7kc8QPdhyNNyvqDIERGLVdJuGlZ09iNLU79FgkIKPIUR5Kf0gakGTZSMEbT0w7E9CuMQJugLxcqiEkVVh435W9QRo/J8fELF8bQgvyGGEHO3d1BkHev1liiWytcclhnlf0hCSXs3BQoHITPFzM/CkAbuJySgqEevtDG4CRpHWHIB0/Kqb0b6uTqYxUDgLTsNgM6KBJR5kNNCtR1Muqgtd5riBgRW4sYOS9YTKL88whsBa/kH85VvQhZznSTo2aKM2/VlN2vdmj0sWO3yCiZCvvCE9JGg== 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=eeNkSfVsqaDK/HRonFeexF7KCPcNWrhOLHzLpGqNKII=; b=hCSCpwzYW7bm07vUapPfx6AE3s0BHVavuqM49K1PZ8zmOSRythwdRBHZAbnoRNVv+/FHlg0rBOGs431Y4b8Hht4pisRX3yJGx6qCvWgY4O3gi4WZZk4uJ9mis5IANHMjtA4P/ALG0D0N3cUPw/vWuKU8mRG7cfZgvG+KhU1hT4Y= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:43 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:43 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 01/10] xfs: Switch atomic write size check in xfs_file_write_iter() Date: Tue, 4 Feb 2025 12:01:18 +0000 Message-Id: <20250204120127.2396727-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR15CA0056.namprd15.prod.outlook.com (2603:10b6:208:237::25) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: aa8890af-8b07-4b07-1482-08dd4513b13f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: xUK3wc+IShG0jPYC/1LKBNAPG8BtxIbov6Sr2KuqknAslzdCUNnc0hD9PeCtfl6rgYes1W+h1DUgMWypHJW8uBQrbuC4yAxfzah36Bx/sO/CMjnynPRAZ1EiubKECcL36bSA9iHJ1oES2nydZ+0l/ifYSMSTgkjhaDtv9f3iE6TWkOv8tdfewQE/BMykkmyhSV/rgYSy1yMQXKswPYXkOEi57WLI4VOLABHB/gVyJajY52mrB0M2WtP/lDUrUfZ6Ycjm5NHNS2lnRsstDxSy2FVBdgLYoMjXxl4NKrR2uQVcow9xMaY+w1+pjpNmDhSQcozrihRxIqr7RfTBCyI6t5OTXvtzuR2dtLnPa/fD5gpBWfGYMzowbqIwxN2qJcWSwp07OyZsRz079XMwDrKslGv55RjC3QwfHOyRj0YgiA7L8te7Se7v6mb5uwF9LLxPa8MAUOXOo62MaJ2ppT9Kr+VgbcI7/H9Ns0kHh93RW5IGgEe1luWVjRsojDLW8XdqqRCQBxKos18n5x2NYR/BQfZz+mt1/IZ3mdqSRFVMvPV0JzVZPNzjsWxMAW8yMiDr8RgzecWQkAiLNAIkGSmxwSY3Lg2YEzVrRqV5k9oorGwhK95ULlw/QzcRUb/zkTUQqaN49UWWoTslS1Sq4EEgCMHw9NCyeI3ib4SPN4D3f98xw5uu1oa5X37mdhyU8BDyEcpMHeYiWMQIRypSyXAuiRg+pWhUtuWcTT+RqYYPHlHbySyQVS4893BNbCYxvVF0xng4KGo3fSrQu1nva/M7X5/g2iRiYhXz6mLiY2NmeY/8wzuXp2BeyfEWQZMtRkrGOo4fCwJcRlKywHF1L7jXImBdrPihac32jsAg4Nmon3vfflB4/c2V4QPlOr+4k/Zpqjp6VJQlR9UlLlDWE6scQ+5Z5Q94AdpkUt+HPjWb2/aZyUb0c2sDARORZV7l3DMZTlY8PzLQVZ7t9Wxw4mSWJXtQArkMIU9reBRZi6fYlp5xYHboFrvFzLKtpxxDRWbOsrOPp6jpuP7R5Tnb8dOFufbxH2Pk4k85uXjvgqmPRfcEqD3UulRWrRnhixy8h04Qzs9ejQSgl1I/lmdW/zR+t52PJtajw02RHwKx6qm064ETFd9ZQPc1pkUf7v6KEan9achb65C08xCE5FlIyn1T1Lt2DfJXA1Jm3X3xyOohxnMdO7EKVI4JTcXfT2Z9o7MAboWbUcMhkR9vpV/zv8Yrqge1eNPH0g4R2bPEfHChEz6O4Qfnzo2RsVuFhPOrfojcajN7SEcJsEiA9y2jrSdDjEvA77k6eslA1HmhxTLsv3CLTlLb33zrJJ6FGhdUY0E2Anyo3i9nBa7eZwLJefqYbTv51pe50od7I4fp0+P+pyu89iBUDAaPKFjlmr2d+4dm X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KDAMIcm4h0CcNJ08Yy2FrPiuEv1Zk+PGff5h1QWrV8OH1XefDIZkREsZPXMmyUpvuv+F7pIeZ/ni8NFcB8o46eBxHzefMRMytCmSmiqwAMeLzgY49xOJhADCnNTzx0HA2RSPylkI8am9n80cQLssDZhbozl+gY8jVrldnA29/lkdOq1glWbCeAL12nkDMmn0xVnybkMFZeQR6DDF+Z6Rny4+1L4yjSbHMMna00w4jy8MaOmm3wejz+O4g2w2CDmHznQrmYp63BYlVAHUIDtzAgc5t9P/+iFq1dlCZcDdVcEVUWxxYhDfONby+sVVkzl1etD2uXw/K8y5xRD7xRIB2jJ6A+KAH0u2/+tQ/Ymujr+/JPpUfwZ9ZtEVPJYVn4nGT6kSpglxSrNebXPa96nIvwwztrugZS4QgoEZw9euwpqTopQbbaUI4Cflq6qDUOdFuQjdScMMrkeHeDdWNI16hF4ob6lH+oXngefLWPEH/0ZwEShtfmzTjWr4KZXOtBgTELAvRAds7U9D/YTX0luGgZGqTjEAMvwhL+UUy8zpl8oyqc4TidjYjGItOMZPjcDGRhqCMvno6yNAahdXcaQMvRnYbZ2i8U8LUiVm3kWMssU1TqROnbdF6BX3UotxenKaGIeP5C0cybF2pBUWfXdNBJuZBwYmteH4rCnnGZEKMjc22s3riK6Vx73tc+iqbtk5NJJ6QkCOrBVGCSSAQ5xke1505phQW3Kkn5OBE0iqxyrE8n/2cHiYj+C7GhjZxO0waGahYsjNdZfy1mz1GqdcjpnW/aaBPQxDfQzQLVsZD+iRUJSJjsHUTBxAZoIIRGF/H4JX0gKHB2CGoM429DI9Zz2U2vUWgNN5YSh0R2xleiesStP3/xiSDSFF656xvFm+V+oPthzC+qscJrO8vofEA6sSI84uvP38RjDFv6plwYFhSIoP30NygZuHMw9I0ICRdB1iWzKPGVFuApfkW3QF+0dWHysgwWvZ5HAwWWRSquEw/MWSqT9OYcSUiWHjsnkVrrA0IKNe6MbM+gkqiwDrBXHBfOfaYkdszj88AZoSao/vjUwPUKQ3+m2iaPEI6DEmm++6GzVuee2x2OmwEetk/IhdqL1Fwf6iUPERYuZt4w1KRI6ghevi9x/jTeZ3bill2VZGK0f7v369R4rSZ0W2hBY+DXLMuawfaILqMuQp5J73eHfPv52pEXqSGvPy1jMRxQ799x73JEZLWAOkJsF68NLi/wxokXCloDmgQkRx1E28yp6+fppj3oNGpLshrvmYZEZ8jn1MeA4XMTbjE5o+sUZfrcyR+m54e7R9uiJT8rfhNruUuaAQ5IsPmcC3eav66WAYUlm3zfJol2iCJCdkL/rsvnoIWPtXgamG9zmu2obOkfel5IYURzfZ0yueVyuAv/qvzSoh2Y31I+hoXIMrFE0HtEub1w5424uuVHiI4bJTFZxzAdRzkeOfDr5u7/qakX2mlcRveaM1XFiUnFvQXRYFZbUlmIKR9sT990hPPXCgWeiOa6Cj2IgHkZ2mY6eOJ7VHrDnWIEWWyIB6WtdCtEFk9723DZFfhVWiNqJVnxH7TXQadXgaWQue5NXxHzAp4+nSe3GdPvgJfW/TOmKE3w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ppv0LpU444rg1i218rsuLkZfz/CmZQ2o9fV9A4FUpAlaxLa/JXaxycMvUOKWNZ4O6OJHDQkOltYhJebxFYXTPg6Dbxy2nt6S4opIKyRRhW4J2wp41jc/bwv0WGRZ88ncFldAejgAcogMLgYbADizASC/pPr7tqnIaBh5LkBe19gkfp3DnKywxUMICZUdnUwKImo6YMrso+xtohSxM2zT7eG6TUIyQOZEghiwSFR5IdlxokEqJ6VlbfF81Wx9s7pA0UgraKeCkihDh1DCFORfcDyAZCrMVgI2MHpVtWQCRQ2YHTwLqT/5g89q+i/9NxEOulbzmaLCOjuYgatvCugvpbaYUmOsO79tNK+9c7RqMbQM0rlimhPqPN5yYs2zNLyzb2xBqKSHtwajNPNG4IxCv2k+rf1Gh3Mu95Az2UyzJSADioXWmmDfvro/AEHxit3FnJOLV5/LJbT6mCeZ0A1OQmTx5MOkld86vmCn6pp91EbASQd+VkfGS5hOIPlFwakVlrzHr2I+mJOgq1JwSTPSzFCjRv/j/JhDZFXZo1cpFfWI97R2wv5Yg7EfqHBbnlv57J0pjMyO7NZWkFkODJfSgvGU7keQYlkpzEECgUt3MWg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa8890af-8b07-4b07-1482-08dd4513b13f X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:43.8349 (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: +WerXK+88GbVKXwh9ZhJL7JTEZa7g0DOQVCFIqj0yky5gVqvOCI60k7PFHT3L4BvCBgvQuCOOp2WlP8+MtSTpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: GFWxnvH4CSkyWSFN4mXs0IArIk3gkGbj X-Proofpoint-ORIG-GUID: GFWxnvH4CSkyWSFN4mXs0IArIk3gkGbj Currently the size of atomic write allowed is fixed at the blocksize. To start to lift this restriction, refactor xfs_get_atomic_write_attr() to into a helper - xfs_report_atomic_write() - and use that helper to find the per-inode atomic write limits and check according to that. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 12 +++++------- fs/xfs/xfs_iops.c | 20 +++++++++++++++++--- fs/xfs/xfs_iops.h | 3 +++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f7a7d89c345e..fd05b66aea3f 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -853,14 +853,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) + unsigned int unit_min, unit_max; + + xfs_get_atomic_write_attr(ip, &unit_min, &unit_max); + if (ocount < unit_min || ocount > unit_max) 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 40289fe6f5b2..ea79fb246e33 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -600,15 +600,29 @@ xfs_report_dioalign( stat->dio_offset_align = stat->dio_read_offset_align; } +void +xfs_get_atomic_write_attr( + struct xfs_inode *ip, + unsigned int *unit_min, + unsigned int *unit_max) +{ + if (!xfs_inode_can_atomicwrite(ip)) { + *unit_min = *unit_max = 0; + return; + } + + *unit_min = *unit_max = ip->i_mount->m_sb.sb_blocksize; +} + static void xfs_report_atomic_write( struct xfs_inode *ip, struct kstat *stat) { - unsigned int unit_min = 0, unit_max = 0; + unsigned int unit_min, unit_max; + + xfs_get_atomic_write_attr(ip, &unit_min, &unit_max); - 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); } diff --git a/fs/xfs/xfs_iops.h b/fs/xfs/xfs_iops.h index 3c1a2605ffd2..ce7bdeb9a79c 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); +void xfs_get_atomic_write_attr(struct xfs_inode *ip, + unsigned int *unit_min, unsigned int *unit_max); + #endif /* __XFS_IOPS_H__ */ From patchwork Tue Feb 4 12:01:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958967 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 C217420DD68; Tue, 4 Feb 2025 12:02:13 +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=1738670535; cv=fail; b=h0jj8lkq6GHvoW+y9inGFLciI8cj+I9uES6DCXYYdezyQyi3rox4WRtrjKRnKrwWRRFBl4qMzevSuNyAJbr1ZNlC7fMAmWFmgmpj9QdBWOr5ghBjh0A8Nuw9rlDVc5TNPYDHl8vP22QLP7jbox01I1y5owhvK1YKqft7hRCJGRU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670535; c=relaxed/simple; bh=5I+aaL03hgQmBUgDsvtjQuVA7M4kihj6AtBZWMuhEMo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=mggg7A4YH1QXuYn5jk/na+mbKh8lFYCK9bcdvPFZAeCFRblu8qYnVZVYHIprBIaj+Jcz9EiSMZmOcExYt+gdTnz9lUd2j7jKQC5TnIgLD2vj3zltgGMiluekrZNPJZ//P9WLyl226KXJNyqPrNjMACq5rqGAMkIlM+hXvJlbRKI= 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=OpbnIdK3; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gFLGD87c; 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="OpbnIdK3"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gFLGD87c" 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 514BfUeY026091; Tue, 4 Feb 2025 12:01: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=2fGuV27Ovy7ztPf/Sh3UsP3aKqe5tw1m/30oW8XgfP4=; b= OpbnIdK3+yQUt4RjGwbFDDAAASvIYBtuhNE/9IDmyurH+wQfDE0OIbEksCoEfuPu kwWqDeWv3Io6A23vzLzRve6ajsS+5vGsRrgFpPwO3tx7coMY+iryJxWZGH3BmM8/ jHEMSmLebn+7oeewFgYqoqksRqf4qhffw0+VTk9+c0hrX1jZNelMsrP6hR4Vp5/J jJdffD9cdqTNHsaN10bNQyBRl4xcrtdHJ8aek5TYyWrEw+8xJabQiV6/ua/zcuU9 hQlS4tVDBHCq84XnFlCP3jWj90Emq/RezF3rlDs1IryGaX9TTr/H2/gUXrL+APwA CrKVPHD+BGbv/2XSKiuD7A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hhjtvkvt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:47 +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 514B5OLt029398; Tue, 4 Feb 2025 12:01:46 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8dm5drp-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CPNq/6IRkU0r2ovYJTjdROdCW2w8eRPPlJqjk+np9VaAJBZ9AIQ9vwO8ZOwNWBv+gQz5PW/ZJao5PvDRfNpmxSRvgPhXspl/V3L+wWHOsFzcEpTn1kTDNw5hziLG5Jy1yv3zsaQYeOGoXTh9hYCWTBottCimmN+ihHDqrAnRtOShqSvgcd86EbMBtfqpw5BrKJJJs8STK4XwTR5XEj/CMEjP/OmabD6KI5pDpv9VMI58FmbmnHriPIvcLASbD8gs7XnqJWQRRAcb/+OdR/hp9b7ne0YLMT2iXG6JtwCnFTDOMz+oVvzytbi4hSFFgR64/97AgeWOLs6nCxNB4+MOyw== 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=2fGuV27Ovy7ztPf/Sh3UsP3aKqe5tw1m/30oW8XgfP4=; b=BGVYf/oRIklMz+sbXOJKmPsFdeKpEasT/ucDGzd9zm8LhFT+woN/fWbRIXsQhNeUw/21lvkgj+gJXhD6JEhPuZcciFZvAtHAMZt7NghB1ee25K1cMAxfTdyDR/N1q7ENHmSjfR8AdDsdc6k3hYzVxnHqFuWXcHsjGcqkn8QJ2r4T+L+yR8dNu5+RPlmdc115OAzohyvUXK5GnkHDo1ZXnuN4vqPaFQr6cGqgUTIghxNUir5xyhW1/fuFTq6dDR/Ii0FBjlSqqx5BHViZQH1iRmOUcnXQdSV3Ge+r4qV6JlUykzARqX4b0+vFYe4H/rf637dff26jze6TQ2PW+pTsTw== 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=2fGuV27Ovy7ztPf/Sh3UsP3aKqe5tw1m/30oW8XgfP4=; b=gFLGD87cXzcqULj1fzhHDHlJt/EN2iNiR1LvH2oU69OhC4f3iFqhTXSPU8yDdubfQPYQQF4LP853vq0oXuNCR2noxefwQYTFyZJpYqHLJO++bHkmpkyFANJSRdfV0sYNREvkdrz/w/kOxFj0y1BK9YRpKRY48bkgQgHGkCVLhyI= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:45 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:45 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 02/10] xfs: Refactor xfs_reflink_end_cow_extent() Date: Tue, 4 Feb 2025 12:01:19 +0000 Message-Id: <20250204120127.2396727-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL1PR13CA0431.namprd13.prod.outlook.com (2603:10b6:208:2c3::16) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 17724e0c-8284-4af6-8fe6-08dd4513b1f5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: cg2K3ITbGzZFwUfm7RaIGqbHs3qnSMD8meZmgKaB4rgdu71f+ThOShyB6qZHyKYvsQeDWCEhEARsuIih9a4emiFNP9DvIDMGts2AIG16oRQttFxT8oKRCkHQO3GXs5vkuwRMtvanmlxqftKxI9k2FxcdqkTEh69yhCeK0jbFCArJJ74Tck3gyCdz/fetVb5ceTlckkYuRf6za0dJ0Dg8I0E1JfWOyCAmrVtMyUEDBJqWKYaW4NuzmE22ICqBjW4YSe7FZ7Sg4yPKjBTwRvqYvAuTPJs33o17CuC/3V+7wkQLH+XBNm4fp9j6ap/UCSRks+1iKcd3FpmVU8+equraH8i6FEFjzzgvdbn3Xv8+bQijN8Clsn0YQJdVv9Mn+T0Ea54g0HKyJ5XMks7U7vwqYEtIUPkGAPDVP2N+PdHrBoKYg95bP9OX0d4eKCE42ZaHrSEO+O2OBTuc0O7IV8Wnq/25wy+gE9POD6/dZeHg/+1pncpQkJGWf++vnV2FeoSD6OAS3rW75b5dVUTeqXLcSr9xaMbToMl8F0WMOg9ro6bwRXOle3iGVmYGCO6y5wWcXuyPaV6dpVrtVRV8xelUzqdsJacWejvVwNk+k7cKmZm8sRIPPyJSnsew1svU0SKYY84X0iCj2fTVpM8y6hGh5nLUUVFXglxHVaA58k5e5bRfN+kjcH50atFcF97WcHqEIXScUvCKAvRKdNKcPl7A0S8/fYpp+DEk2g852g2rFH6RVBru2ay5nfpA60GOQIsHGS9afkccGwAXuieq3h4Tl9C7owq5NaUGwPsTMz9+Dc8JVaFQ9bFa3N2gg+HgpUqb9Jyea9TDpCK8KdFJRd/LZ0wDCKyW6fnZjVY/vS11zELD60n+Bc/KhjJQ9ojkS3+ZPLsOuWXYOoGwRHijqh2qv3K8JAE2kZ3QFmnV+OSaY8yFJyn+1zYd2VG0q4Bpw/Ecv5YI4OeX/rR5D7d3/men+25bb5mycgNQXs84aPgpbvmDP9M49Lr/mWGqT92H1e+BjjWUXNvEwuIrWIE5g9grRLHvSNlimJaxrE6TueW1tlPFpLRw3kQ4eY8xAJCKHMXEW1VrChX4xo/dY5YRxwGttxcRJi9HnhMfdsZqRW9EJcwVEooa72WC94HRJphZnMiykzdW9/LhaKurypRojM4B81SGj98IJUyiHvHoja6z1i4Z7m/ulxI7gvrQLtAdGZCaUdsERHzVmimCq2YGHZagJIUN1HswmKPP4O3Sa/gbDkLnkKO+rgwuviLVNF5sf3Ziqvl314Hg6lTb3Tk+aCf1Nh6G7RlBULHZei9c4iWe5EPZrwGKnJC2N36AJTTG055QmaVFYfJqpArPo9RXBQD8BMjLL0KN3YNL90nDIIVuGGDrtz+PZGO3KbChZVecd3fh X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bNZjrIjrNhYrz4zLlY9Sp2TqVg+yRy5yyyrDJIH4+/IHtqfKvfar3NRUL4IsdVFAfnlra5ua00i/0Fz04NTEwoWlfTZua1MgiJmkmzLm5/mJ9FiHie989eG2hUA7brP/y1pEPpwl1JNb51SyhooIL9iIjdTAH0CTs68YmB4UlgmFaa2WkceOoJfhGYZtexphaV0GPv+3IqlysXdT/uSTFKxljSwLWKWaWwG0x5c/FbSVhn1NLGycsGI4aaRlOEPtmize1YPwBQMAE1e0WOwPYWrYz8PpuY3C1RSFB+thyIhi41bnncN9IdJ/r1jjVKMT2+rBKSmnjO1QcrwP+2jdcM4t03RWt5mC6hmVeFRLyBJkKL2SuCAXs3GaSzy1rykECKCOa+WJV8COANC7ZKJKszS0DXzkS8sMGwEXFT8CIej1Bu0jm3riMIj4dFFpwYecLkpwNZMGPIu1xa5Bx6zdyrSOsRz14Gxd7YWdhU749vykzgOnLIu9h+RTdfS+4eIrlRsrL9BouNm4TqLJQI9y9SCtFq6WVgtaT3a9QnjeahS+TklpeshWJmB4rw9dO+NFohMM2Pbpst6rVIeSNmyB4CmbI2SQUE3uiW3WOeCmPik8YyNNV2xaJBA3i83OnKHaHGa/XJPpdDhhO5TBYo5dS3ffUars2TI8l7qwAeyqkdzBUNY7V351B6zfuR3DQf/akpBY7HVPPeXmcd7q1vvxiZQrsuXbVWoxIfzygneWoazwsn0jnP1k0n33eJEH2pTHFTFh5KE8Ah5i5IEvO3zOkdPLGEmQXUNwHhZN9G3Qgb4RKmok26ALnN1qEzxTZtLsEeyVFF86xQL7yEguvkWSJdSNoExrKFE2taiU1K4UzfmJZ7kctjaGLLnpvaUP4CGO7SI32lz0wZwFVZDaxgY2i4845FMYg1qvlcOeXI1Ukv+3tWFHUsOcGUj8FQa61ObbVU+r/7fEfbNewgpVw1lJQKdUhH1cJCUl6JORuwKTYs/Jpgubp0QxEmHoKp0lrsC02cKeTGOgJ4I7wrU053mB6YeEzK5H5Vj776vOjdBhZTDrU8AmI1E3rrYMhNoGQoRpwuSmYskqeakPSnqbAS+7ggPDTDD7dlX1awcT/ivbh4imTwaOKSU6fJK4cDfc2so4c59/3VQkbFmB65yMlP9UTAByfRckBoBz3thq/2TtqReXb0gplz9usBwvTLFErZRXF04yZuJZxWByOE7ODGM/io30BaHEAP/mUql31JituJovSbRJrRy3Fc89yFFbroS6B2FGNuO2C1IaiLRwWbyH5zZsAGLNTPFDepStMKY5o099FZYJea3LcqjcGr5Fgeo/ocm6mjFNOoJhwAtRLPRUGx+f/4HgVQVbed/v1w0YJEQzZ5c4kCnwE9/igK7Ird60tUXNcWIfHVqEf0Uj2VhGBXA1/3z5KEtSWhKx+6beuRN3inZElHSmQCDeOGvWsi4jQOiO3nDs0U3fxV7hLUSTm1UlmEvMSwJWaIpQtYUCL/wGniogzcQouTaVT73XaiO1KmzybfGK7h+jLdRTwRElFAwaBJ/C+yj/djoAfXXkG02IBVEH6bnU97q3f8A6cLN7lxqvpANLrHzsiq/Cntxh6Q== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 7SPSGVyz7Q0OEuxDme0m4xBJckTDv2dBbMsMneZI4qdJTDo7e/AG5rQc9zqwwHscASBgc9gi81fmV4qF5hira20NGUIgqKBsIizaadZH1KYegVjYSKFNlfyJjFfKQOSe8htp+N5/INQETaT2iYbT1uIcJEEmPektFcYdISYK1kI+r5lB7zmGqWY5P0UIBf37xlQaMH+ORcJMi6UCxe9An4ngQCgA4VnL7QJtHBzorUJPVik34KBq1YwMW1GoiqeMO4jjUXeAPI5a5fcyd2bz3d3zkND6J3YExoxIm2adnwKejDqcF3VUwNnO3+b3JdeWtQ9YadclYr9tWjNa6i5ofJLVv4mqz3ajSMi7zxdmS2HchGTpe7iGuG1UYnncdZUN2FQjCCxhb1iEo/3fxkDAatbYLLMokhRgrYalyo2EsPj6VRjkyR4Z1heDN+sJpTQhgUgprMLVuMPJiGI2ZEP1QHxqlem5Y4+PcqVMiO/NGyiRc0cv/GIgvRDDefxpuTADutTlAEeIHi9RUMe6LlQXBTWyq6tJvzGPW1PPwHExyppjcvovxU+3ba6IXy62Q0NW+TkJ2CHFY+T+HOFtYY8rXqfCupiv3obfFb7NFpQn078= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17724e0c-8284-4af6-8fe6-08dd4513b1f5 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:45.0091 (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: Ys+LKI9/DemqrjAP0m/gvZfdsccoJlZp795PMb7gkIBq4TYaAEKaDCNgv8i0cYtUyr2G8/Q9axCEp1oowzqU1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: Ab0fEGnq3aYDu-RGw1ZmMZUrHG1pJbxn X-Proofpoint-ORIG-GUID: Ab0fEGnq3aYDu-RGw1ZmMZUrHG1pJbxn 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. Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 79 +++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 59f7fc16eb80..580469668334 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -786,35 +786,20 @@ xfs_reflink_update_quota( * requirements as low as possible. */ STATIC int -xfs_reflink_end_cow_extent( +xfs_reflink_end_cow_extent_locked( struct xfs_inode *ip, xfs_fileoff_t *offset_fsb, - xfs_fileoff_t end_fsb) + xfs_fileoff_t end_fsb, + struct xfs_trans *tp, + bool *commit) { 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 +808,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 +822,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 +831,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 +867,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 +884,49 @@ 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; + *commit = true; 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; + bool commit = false; + + 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(ip, offset_fsb, + end_fsb, tp, &commit); + if (commit) + error = xfs_trans_commit(tp); + else + xfs_trans_cancel(tp); xfs_iunlock(ip, XFS_ILOCK_EXCL); return error; } From patchwork Tue Feb 4 12:01:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958968 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 51C8320DD7B; Tue, 4 Feb 2025 12:02:14 +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=1738670536; cv=fail; b=omnmUByL/UfZrIf2IQGCNN6isqkNgckVQyS6TtG6/GEjmZEVmPUktiP8qyZtmMR6HaXHlLvTXznVxL90blBOyR0keBK5nRZf3rJNTWO/+Gwadb+ePFduaCVLmVRqA3r+w3X/GxSv0dc3IiuDkfW/mF2LYST79NVMF4Z8fXwZBE4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670536; c=relaxed/simple; bh=I+3y2WX76jcSbkopRcOCaoiR1i7aktuR2wNooxmEmFs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=luoAP6D0JyuRGTLOciisjN7Md6rZCHCLh1gahkfhdsurp4Zf1/Hqefz9Kp6fIeoEC6t+yWmtwZt9wW83rxWpjQKb1JEsr5Yx0fwTDXvJVB8gsJ5ONI5OWvUX6MCyYxCNvEMKbZA2kqvuMKcb8fu0pLlXhC2XHEMmdRcIrp3NYgA= 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=S7SrDJcv; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Eil4EH9B; 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="S7SrDJcv"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Eil4EH9B" 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 514BfgQb011187; Tue, 4 Feb 2025 12:01: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=6HM2aeNeWSn4BRDpOA/EfiMomlNorF+UAPSQcVaDLxw=; b= S7SrDJcvrh57VnVPgxTkutdBcjpq0D4UH938jprPciM2no2GnJUa1/RTJ0Q00iO5 QMtSAXDnxrrjJRlxJT6c1gHrLkJ2ijqgXZ5/vctER4IBe/Z3DGJ7+yjNSDDO6SO7 JKdg99oBIgiT5cFhLBDAxVUA8urN+Gzl8otMDFiLbHnM8/RWzRzwXOMDBj/aYRWg n5m+f40oLFbjFsF6DwfqJ/h4NLn69jzZ1ECuQU5fjNzTJqiVlQaSQXgxT/lXdCmn KLYlU459aqDsKKoLvqzXuSXQq+iT/bPbasZwZ98Ktin4uVQw95U0l1vx4FT0mXzp GPXSqD9WNz+XgvJh6vp7Lg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hfcgvruf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01: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 514BA7w8036476; Tue, 4 Feb 2025 12:01:49 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44j8fm3ygr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kX9kWGiYighXDiEpyUajeYhR8Mq0tye2tFwUl0vd6LluTOBHZnWPpoj4VIFyBMwKjr5e0UJKxtWWKlCf2B41XRhOJrwsmyBi4F8QK9pcavaRVLJ6v9fKqsS0A+McU8xf8EKpUQE80eYouidxRB7aoCtUi/DKB44Yy8jBWwi4yXjXDgJSMMbZV7fKXtct3AX6Rs0kY8H4l0IIg4L6MM2t0qZ6sN0FCNTq/OYOCbhjppNffn/VR/5KEkomAJme2J2V5ISOzVfFQJ0//b68+plggfUkMX8D7Xwuxa//nVeo47M+tKnC1CGRJJjfB5o3EJ0793B7Dmr/OgY+E7MT7eU5pw== 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=6HM2aeNeWSn4BRDpOA/EfiMomlNorF+UAPSQcVaDLxw=; b=zVrUR3e2EExX7WD4Aymjp8lDS/wOr9IxrbqngnMHOfYOT3RqzyqKBg0Eyb3lmks2b9jd9lahgdcAuUT7RKn+VeUkZwOPnZqpczrIALO0awlF83olYZWLhhNzTE9gepNHn2WD6H+6l09iB53leICFyEmlf5bQlSmAzw9mAmmD0WHwjksrMGZzAu1/obFY+hWMq75pJ48D7BXnLAyjZ6o9KXbdETy8QmCu/3hmxClUdYvFYG0YFvrRECOGWLSTr1FcKnIAIQuu/g/Sbrh4PiAYiA/RujJ9UnOD25s4Fdm9dRVJMHCrggSrzZsXZFylo0kFJ/rfs7Jt6kgxzl0nhlSg0w== 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=6HM2aeNeWSn4BRDpOA/EfiMomlNorF+UAPSQcVaDLxw=; b=Eil4EH9BFwPpW0LxPgp8GCPhoYxI6nm5SUsEoRW6tFmgJRMnbgBwo1RGpUlrqen/zTw75rpmlXNzDjCddDqs2h4I39F1BSeUS28U8Aq8Kgxs153u7vMyh/92WYt5EHjXdBpsl2VruydWIsUzalDpAiuha91aZybfSEpYeKX4y90= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:46 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:46 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 03/10] iomap: Support CoW-based atomic writes Date: Tue, 4 Feb 2025 12:01:20 +0000 Message-Id: <20250204120127.2396727-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR07CA0003.namprd07.prod.outlook.com (2603:10b6:208:1a0::13) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 42260a8e-ce14-4ecd-1d07-08dd4513b2ba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: 7Ifvwb5yx7otd+/twHh7Zm7Ex1YWC127HBKWbCqkgsJAM0SlIFSr4kQJYzRECJfnSF/Ujsf/z18cUn4GekrOzXCF4s+0DiZhZCNSIWGtLdcE1Qjrf2nPBWyJD145chg4PCUH2HQjX/4RQxE7tVAQQyOVs5th9gk8nTOf34/uI1oDR4rIm2sBGhSG+7mgRTrsPv7K0xWDM6aVwtD3LZljzjWOwrzqxQbSe0yWRR+oiiMwdCPCrbRHpmlZHY8XSy1G1Rdnb3nbfZervRw8bG8OSCgcRCJnV3WJ1duWjXDiR61iS2NyJWanU2co13kDnpvDoex0rZi4rebAj9AtH/1Bn6Y4BwZIHCKlsB7QlllHblhb87CbUoczo3P5YPqeY24eQxkXopWMyVxpoFF1PPjk+jFV9O1tS8T3WNSuWiwBYi/0yjQpQbnyjR7QmOxiOPWdIwu1azSiseF1KQ2L8yu0XSgqByLnCbRJgO1X2qWvDzbYIvClx+pG/RfUCg0Xni54Gx4HYA7MOgEQay0xpwdZrq/pDf9lIXjs+GZBbhOwiEJY2Xjj87KMdHFGCE1pS3SXgXfEO8S5RfgkjhmSQpa8eRduqxQM1BrrPOj/8ru642s2/ntSbktlAh0LU1W949SwrOmR8ETJndkX6SI7XrN3mfAHRGO/NgZ8TgZ6qeUjs/tfBIhZRN/XiS0GHSKzuEKfSkDvRMgxSdJzIqqdIrV4deAwUgCbT8jb2SCnMWxVI1wUZR9l2+wDaRENjG6jcKuoZNFSu4eFl5HHnZ+dDjqSgZ/vbxSwjvfSXbsej0qVUvGpWMmu9yJ/sLuBhNwkI30pOIM1QLDEwV4HnVwZDCNLYlD8zZHL188cD14SPI93c6rNmR0KDLGpApCQgvHhHW0oZn5iSWvKwJaUuPa6t+SM6XMMHqDi/ffs6eeErGfIYn51G7Ejha1O18ivHtxCqXl6LTel+EJqVjOgSKsgSpjjE7XeGSjmXsJYmzky3o6fjMVLKlv/mrxyFi0nJuCW7eARdQ3qQ5Rjp6aLLGnN06H30c+ONYndjVK07cmDwSRMyN4WmEfdC9zDN+NhvkJyIdzw6DRMesq3WNyx2UiOtAIpHGXOdmh6ljvAP3enaytuMJUTmEUotfbVrQqdg/9SUV1vVza6rFaNkeIks8gXEAtXR3HId7fQYI4hYVMU81fFinjEwFhKyfV7my1f/wTvW2oT0lWh+atCgAyx8T8rNvzIGem/c+l5l95u8CXKqhz4Ii1QifaYOVyI+sf6z4dUZd3OQSyDvhRUWeSnm7JRTrzuw1eJNnfqXTNnFukGvahNT5IkULBc3YSYuXeQZpBBxlfPhNwLzufTHYEeWlAFRDyBBWFsQx8t1k8xlYtPL4Z2TyQtJngtXx0EVrGTMSsainsL X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tjEuvaYWWXGDq3mbltJjSvC4XjZajM23uWfFtiI8X0M6Qph2hvxyDlY43YPo7OWNAgr4jaTDQ+cyztwB4TJ+NthfhuCTzkMvSXM8F0txgZ9bj3jY0mvaEGhhGREaB6m/xRJbeG+/t9Gd/3CTaYaPPJBotN/9V1m0ayPOGtdc6uHdprzS+9tsvNKb1To2qH6KqZx4VfH6hjfV9UPphaj+P9pje+eQtNZ3+7opAwP0RVL5W4vZAjzclYSl6LwIDkEa792PGiTRTcJzVHc4SCTmU5LfgTrZRpRsUjaWyrHOAiLCvuaj68u7eIX/jNtUDhmEBeXDosIisgKSTg2Mf7pPY4bJy2RiEhIB3L7MPfiutZgBOTPHwPdmilGLkIdsscIRFzEWrgNPs4fLdgRyQ4ngOyiEeAhr/aeYqN2ufPcrUukDvrAcRhB3HspOcSPaidG+HGgwRUeY93TyejuX6ZR07rP7R4TVKlnoAHuM3ieCAkFPJ2LdDbWrTS8/ptMFXexRefTi1BxBz5F0zUjV8HkNCxfe99HxO05EeVoCyfy0vHPi+iFEWvYDx2Oxfw/VzTqjDbBQkiSvXECDM03HJeaZNPTUKX0F8ketnEEvwBYM4j8mCffNjqvB8ilCpddVXjhfgpMaV3KSD3POhswmRdA2JiYTSxVvm5QDWDdoIEpiPJRrWilJAl6YQixCdeNMPMHg8nBYwbC/IqKmLFTxmWgnAN37a12hwRMro/cyNkQMzpcZSUk4aGTRzRtkJfkECMyq05iyelH+GiDS/2HMmVVdDOcofp4k9p4tC5HAwf3XlALp72PyTiattH4ItG54hO6kAB3t5Em01vD4b4pnc7bUMvwUtbIbNhxyNEy0A1BPhnj33yzjIlvqgyrqenngrNnFpk0LN32uarWbGyywoCeWm3jwIw0I8eQEs7YQS129gUQK/SzoRoU/057bGNYfRx8GBNEH7Yx2qwPkyiQVo1YmJahYjZVYq33tHpd0edyRUPWH+adGGfCk/tp94D+GzcOSBQx+KnihSgpvf/iPSN++tEXF6iv2smYqScQiG+ZBSqGHIURjeUBQR7XNL8Mutzpbevva3l7sKS5lng1SFw5mAXi2fUuGti9RzYNnOL+Odj28kMLX8faO/jZ448i4GUH65TOLiFsFUQzjf8XaW3e7ZUonZVLq2RzknL7D49QqTVHvB61Xq4X6hkPaYRvTYnmgnGuEek1HwAiKi/gUVKZsvnbc3fjPd7J0mEvSmya5T0+lfGMKUult2ITWfo2HwPtcvxrd4gfXc0X+2YxHZONE7QzWaQ8lHybk8YsWxiZlyzkHJPhpiEbkmhCzPuXuTMf9mQnwA1lZm9NFc587J3GLtU4sJS5GNjexHCA4q19lkZIsmOkJ3KU63RtkvW5BQPzxZQKP47OOAitl//ZEhIDwtEVP6/8EKDxdYvLiBi5PXvYqibEsSnzB3V+PoFo/tT+WBLGBi1p+wHvhK/jOPzCwL0QrkoXSCNHOepZk/AtgKrXqFv/DBhCPPmXo0jcCnkQTWqv12ko0bFHU6PbrZoG4H+KJJS0TzjtDFZtkJrVHb93hrClJMZtQokr3EO9zVNtywwHfNjiF8I4GAk7A1224PA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: skfaIdunmQCSzR4/7zT3jIiHf7FqJ2H86HSr87lPJMU+DbYenGQBEp7Qmu+HEldOCcNdNAl+R6c3Pj/KOM6fTNE3jeKuKkKHWcFwNvGjvjZQWI0x+flWskFEdl2Z5S56qQUseyUWHnRhKgrNTJHDO78fmIa5CGh7SEDaRRqUWlhkO7bmJl+SAuVuhjqJsDlYT8T92ItKn8L8m8X3BGcAdBxZQfruMnSVxM29LMw8TLaxMhwSq7y9gnXvF5j1Pbo7PXxsvb4qlH7r80zueSBttRZd0nVMPCF8fWv7oR0LM0c6fK8FyBrYIn+0nUWvIs7pwPqPVVSozJDQi2fVBvRg1xAUBXPs6B8DJL7MklctY+jwJuOs9QomdQC5CL2AaTld5nT931IH71aIs5QKbgl16grizs3/ovKPRy588nMErNDwdxqAx9qpzc2UWJuP4091McIt5rnyma9VetP7tfryn/8PUvq5BhSILcfTdhNhe/zoBfE/C4Ij0tgdDYpgqz1Dn+x7KNouGDXboqRRbRHd5SvZ8IH4+940FXfiHSPiRlonD2vFjeWAUSqpF2KMGVfVXmkQFwK/peHvrE6S0MMGYezwCnyaM8rkGw+cIlRmiAM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 42260a8e-ce14-4ecd-1d07-08dd4513b2ba X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:46.3224 (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: KJDN23W/7vODe2V1x2XAIComVks4IRnNgUBEaI8pStQ04FQPv6c2O1PmoZ+XI/dOkcFAUxrSe6k1J4aRNDaryA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: eQoVkYhd8lRXEYfWEF_WvQr4Y9EdhwZp X-Proofpoint-ORIG-GUID: eQoVkYhd8lRXEYfWEF_WvQr4Y9EdhwZp Currently atomic write support requires dedicated HW support. This imposes a restriction on the filesystem that disk blocks need to be aligned and contiguously mapped to FS blocks to issue atomic writes. XFS has no method to guarantee FS block alignment. As such, atomic writes are currently limited to 1x FS block there. To allow deal with the scenario that we are issuing an atomic write over misaligned or discontiguous data blocks larger atomic writes - and raise the atomic write limit - support a CoW-based software emulated atomic write mode. For this special mode, the FS will reserve blocks for that data to be written and then atomically map that data in once the data has been commited to disk. It is the responsibility of the FS to detect discontiguous atomic writes and switch to IOMAP_DIO_ATOMIC_COW mode and retry the write. Signed-off-by: John Garry --- fs/iomap/direct-io.c | 23 ++++++++++++++++------- include/linux/iomap.h | 9 +++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 3dd883dd77d2..e63b5096bcd8 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -271,7 +271,7 @@ static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, * clearing the WRITE_THROUGH flag in the dio request. */ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, - const struct iomap *iomap, bool use_fua, bool atomic) + const struct iomap *iomap, bool use_fua, bool atomic_bio) { blk_opf_t opflags = REQ_SYNC | REQ_IDLE; @@ -283,7 +283,7 @@ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, opflags |= REQ_FUA; else dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; - if (atomic) + if (atomic_bio) opflags |= REQ_ATOMIC; return opflags; @@ -301,13 +301,19 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, blk_opf_t bio_opf; struct bio *bio; bool need_zeroout = false; + bool atomic_bio = false; bool use_fua = false; int nr_pages, ret = 0; size_t copied = 0; size_t orig_count; - if (atomic && length != iter->len) - return -EINVAL; + if (atomic) { + if (!(iomap->flags & IOMAP_F_ATOMIC_COW)) { + if (length != iter->len) + return -EINVAL; + atomic_bio = true; + } + } if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) || !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter)) @@ -318,7 +324,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, need_zeroout = true; } - if (iomap->flags & IOMAP_F_SHARED) + if (iomap->flags & (IOMAP_F_SHARED | IOMAP_F_ATOMIC_COW)) dio->flags |= IOMAP_DIO_COW; if (iomap->flags & IOMAP_F_NEW) { @@ -383,7 +389,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, goto out; } - bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic); + bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic_bio); nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { @@ -416,7 +422,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, } n = bio->bi_iter.bi_size; - if (WARN_ON_ONCE(atomic && n != length)) { + if (WARN_ON_ONCE(atomic_bio && n != length)) { /* * This bio should have covered the complete length, * which it doesn't, so error. We may need to zero out @@ -639,6 +645,9 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, if (iocb->ki_flags & IOCB_DIO_CALLER_COMP) dio->flags |= IOMAP_DIO_CALLER_COMP; + if (dio_flags & IOMAP_DIO_ATOMIC_COW) + iomi.flags |= IOMAP_ATOMIC_COW; + if (dio_flags & IOMAP_DIO_OVERWRITE_ONLY) { ret = -EAGAIN; if (iomi.pos >= dio->i_size || diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 75bf54e76f3b..0a0b6798f517 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -56,6 +56,8 @@ struct vm_fault; * * IOMAP_F_BOUNDARY indicates that I/O and I/O completions for this iomap must * never be merged with the mapping before it. + * + * IOMAP_F_ATOMIC_COW indicates that we require atomic CoW end IO handling. */ #define IOMAP_F_NEW (1U << 0) #define IOMAP_F_DIRTY (1U << 1) @@ -68,6 +70,7 @@ struct vm_fault; #endif /* CONFIG_BUFFER_HEAD */ #define IOMAP_F_XATTR (1U << 5) #define IOMAP_F_BOUNDARY (1U << 6) +#define IOMAP_F_ATOMIC_COW (1U << 7) /* * Flags set by the core iomap code during operations: @@ -183,6 +186,7 @@ struct iomap_folio_ops { #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ #define IOMAP_ATOMIC (1 << 9) +#define IOMAP_ATOMIC_COW (1 << 10) struct iomap_ops { /* @@ -434,6 +438,11 @@ struct iomap_dio_ops { */ #define IOMAP_DIO_PARTIAL (1 << 2) +/* + * Use CoW-based software emulated atomic write. + */ +#define IOMAP_DIO_ATOMIC_COW (1 << 3) + ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops, const struct iomap_dio_ops *dops, unsigned int dio_flags, void *private, size_t done_before); From patchwork Tue Feb 4 12:01:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958965 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 9753E20D50A; Tue, 4 Feb 2025 12:02:12 +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=1738670534; cv=fail; b=QZZ8pr504z+i/F+tvHZB473d2I4fM1OCnPOyYfJ6csOdXJ0P+5tFOBgh3mFHga4Lrc7XKfC+7KYu93rw9FNf9WQkQfPElA8nwHSKfyXed/wGr1T1ilFXXWOyJSd+euDGJZw0iZ3GxMRRAUM72+aIJDYfvz6nbGq2snuK58CZnNU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670534; c=relaxed/simple; bh=MU2xEhHV9A3cFB1yt2MDDEL6ZPjAJH7JSnkvfFdCf1M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=HTTViWlHeNBP7DzykP/S2g+ZyfWB1T30MwYB5+tzcA3vchiYkE1tWZCXm1g7DEzkjpW3X/S9cktPkwcz+dPhVUH6cwh3VpEaFJ9mqHK1fo/LkGPWaN3s3nEsBL+sQUkcoQDPmS4VEQhyXBkuH+D9btqWZpPMiHnXSI0S/EcwvRs= 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=YbyiXrD5; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=e5x5VSFD; 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="YbyiXrD5"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="e5x5VSFD" 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 514BfSqx025925; Tue, 4 Feb 2025 12:01: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=XPlYHT7J2YZfOffa3m+njCURYb+S1SVKkBp0tJ7n0EI=; b= YbyiXrD5oQWFZyJbtDVzaGQZK3L4jiK5zZ0gE/k7XLQwb7mDIWoJsa4QJhP9Sliz FqHZsyZR0f7j37WEzgUSj7Fhw30y4E3EcLmHHW/uLl4isQoj+HOnMh2DaKCFJjjn m6wwb3ByxekGVYIAJk09B3/bvHgoLRZzsSNN2Ec5qbSQzk+5fiUo00lGeEVZbkTE dpBpJRmvqy2Qqs7Jyn1DeZBqBBVjcjd/hxavzSvZsq/30uYy1sHKzrcx4ateCNJJ ucY8Z1pOnJwKhV8BVrrf0gA8jJmnVzPmsg6HqTZk9sfnHAnHw58e2T/Q0wwyvcEC CeoPnOuxaTRE5Mz4DCahHg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hhjtvkvx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:50 +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 514BA7w9036476; Tue, 4 Feb 2025 12:01:49 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44j8fm3ygr-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mS7b55yL/qpPgDauFYAJDGFP5MNemwrLM2kWMJRpnjdfdYC9ZCGYFu6LClWLldz0b5WcndwfMOBKPgFTV30oBCPHMqX682/AF1lHBnr/bAkV17+KN0GfDAaZjkkdfx1c3JM3CIoAlpFpZVpKgEwHo+SUkTufSuLtlys4ogFO6SeZiUtjf5ZrjVU4A6VbDQP12/vCAQpVLZy2Ae6VHxp1223wjWecczk/iHAjJ6Sk42KMNXr1PrqJjt0LZfy28uq23usd4+I2NeFdq6VRF24/+xuluTRNHqwwWV3c2guSRJEpZeIPuVVq4G8DoFiHfaT+5y0qfPxxlkaLqwPTPRejcw== 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=XPlYHT7J2YZfOffa3m+njCURYb+S1SVKkBp0tJ7n0EI=; b=uZF5B2vTXCSIYmNMcqKTqVizmlUVlkGTXY71U+kke2nRtlebLRvlWb55Q3YZIUvpm6QfpB75RiGb7IqgxVU/sIC42mJnr5aV6cKDIIlykAGHC/rPv/4LQWblIYU+mPn9BDxOda/AXkTdZia8bDsZqvLNTlArT9bDCd7ZhzJp7rSGkXi0RMdUMvEthNDuXGBS38hANkCuIzb9q9rncEVqXozydjKZ96lT3LHoxDMZwXwRpAfI8xJhzxaMdYXHz/OUCIMBFG75YGvFsz32mtrhzkdD+jnK4ed8CTCBjvwPxttJC55gTAgBtF5168J1dKcHhHDVeXmAlgWOpY5Ow12jwQ== 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=XPlYHT7J2YZfOffa3m+njCURYb+S1SVKkBp0tJ7n0EI=; b=e5x5VSFDb5w+srTMnyCl5f8rfhnNR124ai+26AP12jFZul5vBTRpaedYNvaeuq4W4z2ynHMJo4L/6OsLvphsQbOFgGQvnCVLUKHBzPxTlpSOKX8jEF3I08giM+p/77+Ee1cLdZhn4WuO28PLm13Tbu0BaIceCD08OtySw+J48VM= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:47 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:47 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 04/10] xfs: Make xfs_find_trim_cow_extent() public Date: Tue, 4 Feb 2025 12:01:21 +0000 Message-Id: <20250204120127.2396727-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR15CA0057.namprd15.prod.outlook.com (2603:10b6:208:237::26) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c862af9-fb0c-43fd-67e7-08dd4513b384 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: 8gZjqDhT7I4Fq+7Jy55fVnWnkSB2/3+GvWEXZizHWuZXZsJme9q6KjJF1Pswk0xzOmvLsFguC8MtiX3r4xqeTLqe7ItNeT+VeOMid+Qc2U9qfsFw090mcBfPyHg3c/32Peyb1HDbnJwFyJSMSpb9LdhUynnXW+tgkEmRFW5rgjTdWlgAR1Do+68BPLFkowcxSQwHHd+o3A0MVlwJX7uC7ToICxPNltDFNsW5cDm2CaIgQyJ2g3t6xIT1fWUurqyOXVIIhsBHv5WF0Xj/zY0jwU6Bq53O6JK5gKxBd8y7TWpvdzwBZRj/Yzwa3bnwckczwnwkUmGB9kuanUSpCgMTGFaw3wS/UgjptXAqKwDBVnxFInP3nfhBGoIvyVgFuPauSqi+Kk9czu+3ThyTGc98H9e9gK1Us8zv8hEW88C3ecyIRay6kiiRlmbZv4KpyzLrEqJty9eYTotRQtzjhb15VZiUe1EipsbWvVOYJ8luR/qO73B+WQujKM7h1QllZsXT65y/EGkDMF/7ZBJUksu5iSUX7+CypaX+G/cghmFWL/AZ4b/St7y+wn4XmsgpDXNeg8z4kcmhKIsEaaqbH+tsNn67l7F7s2/7UodntfcBMn0y8KsWWonV2UnPKx9D/eRxLLXQK6HJZgkv1fpZrfrucr9B3uiiErV/ZHIBNl7UqMeNvUzqYeIWSz7nHnTx5n+8vyXrOpvFwZCX9Et3aHQ2NnQp9Si0+lh+MzJ+R4kfPvsFJossPks9xoI02pjuh1KsmTFfR7gvh0gx48EGl7ROGMhuln67/PhmA949A7mNBYTlyeG+lgDRWqzAIJvNFQCtkCLnNihCgWjaPIVOZe18KJL9Q6ty5LIivPUouyFMcEQWCSIRP209Rn1dYVC5HLmk9AHA2zHzy39fA0fGLMVx+YGAfrPwv3RnAQI2t3RorPRYSLDyy0Fbvt6D9QwRH0fNjPxVloWHIRY4JZmphkeuDVnCofAEPB30FG2dYY2yLfZEPP77JU6OV6DnUDU9cDbWH2wW3GdA2kbHwwkjZgzSyAwuUL5xiguQCCuLY1KpCO6LsAIG8NbGte9wswfQDCGEm2sgWSBTZgh5wXP1dXRDCChWs6B720IhTnGI5MIJ1DSHc7ZDod9xOnvCWxrLxcS6h3QvUs1cUL8N5COJIIb6asPt9vc7oHyFPn1k2tu+X/roMNvWhRU6SHl9lhb9GASUaOKEE5CHyyCoTGt5zDrwmX9L/MYDkS9tS91h3CkRtb/jR32UFpWqhEE/EuIwvfyapAx4ykG8i5qO+oweAGllI8k6rXT2MfdmmbEt16muIroIq1W+ttzQfyESPpYk+P1/9lOgUW7nq5btTEf0kUbYRjy7tXxDe2Y0f3BMKHIMqAw5z3pXBYfRfqO2D7oatShu X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d2ZfWH01O+93uQu/p04g0zuPt9CG599B0yeCuinV8FqmPYWFA79GvzywDMHKnI0gVsnd7sthggdhNNr511ptM3mp73ANCpA9G3tJUjH3oU8yzlnaAM/DHCIQtZLHX7rRJGdN/Us79Dhgjlr8kEDYJolEAKBPHAAuBfKWmpfV+Mkib2/M6w8X6OA/vB42nwFlS6X25+xJd6eBQoL3Gwqj69reILxMjaULwtT3sQoSLFj3oxBezVGIAYpp95Qkqu7x93h7Wlwbzhxcl3LRAlNB2Rm3htSlL/O3lcbpHbyo9hB79cuv77huAFzDBukNr4JoUgCfTnz//6PyTO3jb/IpWUh7aJlzP7EVModLuWidR15r7fYZfE4cMmvi6qJZFQICr58ZBuDBmj2ECjh0499EmwtvK9rSZQgG4xiMbnOHMPIVfy+bnGvSP4+Tpy4x/8Iwcwi6G0SoOR8dUYLGXTumEBMZaRkkm8/8EKYtAMRp0tOFWoNmehJ+hMLT2AUnEMHLfyGrsBfKrg3cTHPa6YvDjjXslqeSSOyokmmdcpfY/ct/3lr/FJjf8zU4p3a5ccFtktMG17oOKhjmb++J+CapXvSdKDjfiPMH1Z03KGYTFqKq5edus3aPOBPFNyDES4DpKGWANuBxAuHz/U+niMoz0keAH/ALehOn+ethwaVWWzeM1xjN8r0j2qPRJXxIJgBFxyC34nXnc2ItLkOPxP43LDQVyLP01yI8q0vP89ba5lxo+r+kgKySM2X68UbFjU057giMk+VTRdBev5SCJMTXkjQOh0Uh0CTS/5qDeqW/hUw7E8V+emky2c/lBaSfmkQ+kooQkSs07A5GQuO8NdHsp1HYDlIAtOt3/Fa6B5t+aEEMFlWEFjgtKFKWZ4lM3sXvQY40pKJyM4hymtkQk3DYH6Ys1PtFxDfO9Us8LKk/N/pu2MHBKikLidX6t7lggiUQBuWcDkjhBNgnOiUQAK7795h/0slarDmaZ+PxNOhMhD6ZfZE/iZB++Rm76951Ruid1ovCMIE5A67mwRDq2qCH8hbjijssg1tqixfjqezZnzbZJec5c3BmJbEahBavZu7pn/ieI0D0LkQqLCz6XKnJob8jrSbq13MLx6pflA39zmqEO07oepbHxS5OukoZm/ZlvKxfYjNZItiLlbqn/Q7cn6K1/Ut1e7vhjK0Qt9Am8M/RMt22UIgSMo1EzFf/pC1xMqnmizx3kcicyWhpiPPS+WxMqA3rMpYWgmi9naMZADK0jtAclrUywFOB6FYk7U/O0KQmhIdVHSgsx4a7o1T72voOpF+xWyuFJ6EG9ah6WkN0GJGiykUhi4IeKLMZxOpokAoZNwXCy/uQFi06cbhLSBqSvRne04HCEMhPR7/pHz6WQ+vE4FA3ZFlMRMVAsoF+XlrL1HXn2KHdYfDp0z+/PKEiMvE0nxkAXYOffjiYSV/kuGJB36Et76kgkPu7pCqAYW+TWU/WwOqnDaGadp3aCfAi/mkaTxv7vBvPcGa7V7AUlvj6J6cl6vn5qMz51VXZkB10/LovomvjIso8+Z5FZ+CPfJWTOl8Y99rpuW1nGlIsmGNcM9j3ZDDhUItcWqdhBvHQrUm2fpoRGREesyBQGg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: wRDao7dz1iKkH6h0+2FjBqLYZWdiDABTSmI6MJzKrUVShq3nrnb8y1bbNm305e60nfmWaj4KhPbB3tlGp7ZE89VaspXyy8VXv0VJs8fm2JRlNp2uNnYrvk4rI7sztiEbgXlOl8Jsj7raZkdBLZdT3MxXjSuHkxpWOjJjN8U8xB8I69wS15hySSjxEMiqHVND75Ivp948TYIRjfoWKK2uNXxOrfJiP6AoFDds31Qf6be4Eg9EZM8SCuJ4wh72RHxhd2a96sAItlp3kGmrAuQacckuqs4RJszPibJ7KupQJpN9BB5V+71oowYhVQjhIzq/hhANMPBWGm2/fD2h/vyGhu8Pe8/c7lMfQU4Alghz67LqCYj3ZhD00XWahjQWAuNq9OY6ILW3M/rmQwOsXc1pLLH14QLb173WVmw/z6N7nizgt8+h5+BclGHUv0t1T1bP0PJyaI4yeW9GUiHFoROLYtlKYiF4gtnEzcU0R8mSqXo6nVD6FD4Tm019/vqFuOXjyVwuC87CyzgueCQ+PT13zTwPNj7AbrJgrkLiY0bvHngT5ozMR5X0Bj6tXQQAXwdIxEXdiecTsv+MvGTNT7ECjAUJUr6dg1Cg/qmgTf3Ikrw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7c862af9-fb0c-43fd-67e7-08dd4513b384 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:47.6478 (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: f1X2q1KmhVv92RtUZrjs+8C1vQtfgKq3wWDec1kyi+Q9nJRwAzQciuhqI29kx8N+nKND5/rOJkTHoZhNhGjcrQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: bIapKt4stQvtbz8A9RRzmIvPxIYA7tsO X-Proofpoint-ORIG-GUID: bIapKt4stQvtbz8A9RRzmIvPxIYA7tsO This will be required for the iomap code to detect whether a range is covered by a CoW extent. Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 2 +- fs/xfs/xfs_reflink.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 580469668334..b28fb632b9e6 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -357,7 +357,7 @@ xfs_reflink_convert_cow( * is not shared we might have a preallocation for it in the COW fork. If so we * use it that rather than trigger a new allocation. */ -static int +int xfs_find_trim_cow_extent( struct xfs_inode *ip, struct xfs_bmbt_irec *imap, diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index cc4e92278279..a328b25e68da 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_find_trim_cow_extent(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, + struct xfs_bmbt_irec *cmap, bool *shared, bool *found); extern int xfs_reflink_cancel_cow_blocks(struct xfs_inode *ip, struct xfs_trans **tpp, xfs_fileoff_t offset_fsb, From patchwork Tue Feb 4 12:01:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958970 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 4FB9E1DC745; Tue, 4 Feb 2025 12:03:49 +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=1738670631; cv=fail; b=ejhYfVQ/ztFJjbsV05F6Mg3Qudig4rwFYCN6DxE/jQpjgxJAjLn/8p08oxx85iHQ+hvOqiHZJAVqT6jMhRdMJbINb91krpRDm33mPc8zpM+0/zR2FE/D9PDlZLuchNiQl5X8QgCd2a84rlgjkTwKGRNTzNHfawNr/lVzh3re6to= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670631; c=relaxed/simple; bh=QQkvml8jgU7naXTmB8Te/WrkaaGfVdTAyGeY1Ne7B5Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=s4pLYCMkSfmcEt0aMGgKkltznFuCyF+DpVYxyiBMCz0zeM/Rm/B5ct1riim7Jf/9UBb931TmpyTm17XJMqHKVxp21rPyBkyHn2Zfm22Um2RtddgOEhssd1VgGP7G28fo7TgxJvk1BWZMNklCCP/HErfrgAyos4abfE1k1GfkMaI= 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=bV5aXdH4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=KoP+wCBd; 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="bV5aXdH4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="KoP+wCBd" 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 514BfTWt013644; Tue, 4 Feb 2025 12:01: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=oZbN1zRdMffhDHa79Nqa9CMBQoGdTiLjKtz+pMOo8Gg=; b= bV5aXdH4D3kFptwJXZdL3HZ6ZSgyOhSJlAPHbBw4z2M/DcyWeI23gjajgF760IzT 3VE9IRQbi0dKOthYE9254DvJJNrSNiLOkEkWoc/kUi8unVnUTMvOIsZCz+zASp65 UWNGwOghB2f0aCDkaWZtz4ZnS3nyu8+vabj3WGeGdtOsS6T8bfMo5gUfPYrLvf/J xhq7b4mkjh+tULmhCsgSkVpqm15S6BoQ2SQUTsCwGyAAXPMLIV2SqVTbH9mGYb5C ryPj51Zd65IaAvQKT75UnitO6MKEX7fZL5hIMRQL9df0E78bjOs2uwPKjUaZPMG1 apZqiIe1WbslZjZ1xQp4MQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hhsv4ps7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:52 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 514B2Hts005581; Tue, 4 Feb 2025 12:01:51 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2170.outbound.protection.outlook.com [104.47.57.170]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8fnwaqp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EHGQPBDXSTnZe78EZHohL763n5H7Fl10jY3hnLKiP6p2In+mKMEWQC6By1CEe5TF+bAtOCXIc2OGLWB4qTzZW43kq0D/JCvVi2lg0e/uT3skbQNdz5glZNFiNLcGmrF180XjgQYg1B0tPwLcyRKQb6bC/qslImUkXAxY17SRpGIDV8jmydwRzIOuZWXMCeB0lr+G3CPtwiX2ZKxtaJcqx5dv+CXmU/tiNy7lUvVs/O3ReGE/fdX5ObMjDXFwsEL4At/fNdxgzkUQ6JkC76L6i+VrnDX5Hw8t7rtMYV0SKaG7IHGLLRzLpanV5ZBtxomntYg12AMgdzK8N+BIVTYUJA== 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=oZbN1zRdMffhDHa79Nqa9CMBQoGdTiLjKtz+pMOo8Gg=; b=lG97tmtVoAPyfmJmkDe+gdNXF6tnqNHKlxcCrM6dX8v2SIJUc2vtE31hgdHhgj49zPkTnyNE+rKLZGh5tKwh6YJRuocD4DUCKOCum3V5VBaXAgikfVyyvRBDJwE+UY5avjS8+T2Zs1wcc29H6pJO3Ud9GUdcx775PNMBW4Z1R2R5hQstR8RDsyI0+sNRigiMZlgjP301FUeRL5zh6wnfTuxl9EGk9XLKtw9dhlKHloK1WGFQccWYi/TGzRh3I+HBLZLb1PiiC3NGXES/9dv+g3YRfKrfd5oaJX+JB9TMVswkZ2i7fhFOMsa4pOtbYl33dPywhSRtQTfmFEck0VuyaA== 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=oZbN1zRdMffhDHa79Nqa9CMBQoGdTiLjKtz+pMOo8Gg=; b=KoP+wCBd415xyANYz2nHK9ND4zjCDSsYsWY7AWveFg02rM0prcyvcDL85Z75qlsglofXXLToPNnWQ6OJIF28OpNuGYFi8ZUPZkzvmH3tC2LBkxos2ZSNYf7j93Jm4s/HSvVRY/LGt9J5iClU+MYlLjpPIzq0eHgdUUuxbc7r2hs= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:49 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:49 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 05/10] xfs: Reflink CoW-based atomic write support Date: Tue, 4 Feb 2025 12:01:22 +0000 Message-Id: <20250204120127.2396727-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR02CA0059.namprd02.prod.outlook.com (2603:10b6:408:e5::34) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: e9f33154-9aa4-47d4-fc32-08dd4513b464 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: 6w+TT6rZ67bsDarRcrmwsDfiNDkSzNlsXpevs2/mu9dZeqv/yMvZCNbl3Q6q/n26/j7tW550ZicV6uzuIt9ryJBgoMvw34jmUz4E3KinaRixYeec01+993tlc05cNb2d+ByvJIhVAnhxHGNOO/PppZudDO/zKAie9vXA+J+o6GF4T8m/HdsoMKWIMf3C0mf4mo2pMIQJqq+FahMdzS2oY4MeMkLamWHaRw5H+ZyjKnqjz09sEhlSpcoU6zRyKUF2/oBtGWPkLuUQAMj207GENRrpTf6wLexop9eNf1o5zuV3y+HGBd4VuUoFiSyf8Bz4nwl0d79UKHDc0xLb+cZEK67SSAaSLtrghaJU7WMF3l6fyB5cV3FrZA8Gbb3dqC3Q4ksBYVTFLA4XK3UliI/oyOYXvZOXX0OUIp4jeV8XfdsZajN4FfLXNMTPLdo6kA7SNHnfbkgiZNT8YE/UYx9puP/AEJtwim3fJaq495pYGsQFYWFiWxmfP87NtrvYhs9KeryuSA+//9s/gCp0ZUFDmn/rNyFkBubBh67AI0l42K6JytRds4rrT7aA+5ef6NuIOOqKLDNMNnbARE5+CpU0HJkOvy0xlE0XKBEx561vDWe9lM8pGYvYLjq6j4ghEDbRCgYNZycAwj+WSKyDON6jTCyBvDTxaisLdEgLflFK9Nbujiunxgrpwwc3ChpBuGfZW6qKaSka399ZHy6Un1G8QnZyFkyCFh+pgFiYQoop/36LWJLvjHTRUChTQ5z/XU2BVge4PKYea+xb5wk/HPPTHylahLMtoQuBAvKzIbCPm8czJDmMTZJBXtQHZy+D1m+f1ER6xW0i0d8Ox9SzmUg5fpZCfAXF2KtJSOX+/gT1T/EjSwA0EKWI3Y0rjyWe707pRthVXdABWOmqG1EN8868Fg+zuO6+D5b20JnciM/5uaXVXfXnY20KQUqEh/hAQ59YqJR/chWHYSgsisstBpysoAxYdCXba8jXxwJP8SEwZCmO0gHHUupJNJGtJZYamkZAN/IxbitK2yApUZCVLhaL+TQrC94wgFyU65vl3L3Pivh6+Ic5xdVp0bdvsAB5ZYFsXwepahc2t1CJeIaTfrAgGKquj0XsijJEuM7U5vFhFWRJpqLiCS78Nbt9XbRqaEOnkuG4Qqn2lLcTADrJvzBTHORzJtq0tpkjKJQUxctq/obqzXpNQxx8yvodG4BT6Pm4b+rXZMS8fKMYFBcZ+LOhYccxDtBsjDJAiuGPcJtFdcFsbW8bqQhKA0JMgnQ9+GI7QLpFurl7wFe7IC4tbiySu8sbu5/S6mv6IDlt6F5aA3ewPbwVT5IxNB8jD98PvQuw0KuamKaWUEvUb+ZZdHzwqMkuCZuspdON87E6vmHsFbOAMVQSJ68W9Lf4wKKwC9qW X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 00ORsU3DOOOaNwZIeZ5k2sNL1A96ruBifjww5jJyDDP7dP4uU7D7oEzilZenS5ZBTHQHnhITgFmdjJ8F4Bbebb3Rq70499gkdfSM84DEe6HLXtVsl5JSvDrd3s60TzD70XtNFU9sI6B2iCQt6Sqc+YDnCIUDLonyY6aXHkV9DILTS8DISho0nWuPQOcu1X0hMhiuCHiEwEXg6sKRpt2hz1Tmcj6t3TSJng64KY160919Fswu3WdM+17EEkRME/7zCpzouJfsk91qpadskhXFZ5dh/1+z1oJNlgxYEe9Yt9MWzGks4zkM4zW2uDk2UBmPMbO+hp3pkWo4Sw0uuOnhplVgbMIBW6w1ydf/+VMzS/Ahs5qS8WfscApa5wUuLJTuNlhmyqAHcU0RLyr47XvM88g9ZM9B/fr9Zp9AP6/Eev/OJFsA6PaHzHG+/+XVXckIHcCHdSEzbTgqdG5giXgsTHoIj2wJvVOXDJnCSJ3MWVBsL3WCi5bgDQdtfehVngPQ+BKIRVk6BmPHpn4+7j0b6+rTwU4iCX6Fy9AMtIW/T/OG8HCqN7L+AhmMfYJt3/Jv6fHQnRMBeDm1XLy7YvunXmNOrcLMZ5sNmLXPogvnXN05trn4WMqs/XYEtgEuzE/QK9/HAwR7dA3656JGCEqZrNbbdjMOsYosX1VYGWRpviz6nTJA3skfVnIi86eHVqIGiI0TiNtSSjFXG5t1E2QbT69dB6B5p1Z5v8GrFF1MNZ36pgS3cMw0US15f44aMvA7H6MwRnU1u7ElgCTGHNu5WHF0hst7OmoAiyrEzUntz7gpqFtmEhviXN5+VL/HSn7wsdpZfOL4xFwsQxExvNbe0U4jeoXrrwNrvndNInB8z/WhljJ3LuuUBkCaU6Nt+B+ZRphV84xDeikGlfPwzKJfzi30RQrTXuxvb71hjk2LHP21lVRfR7tPmhNJki+kphGL1OwfhLjTv8Cl4m6de2mjhC3qXRZZMoWGycF4CfJ+pfrK+M2I/OFb/r1EPnXH2JecUTre6bFucnb/BkPhelebIqZUCgcUQRNrSgCUrBZSvQ187O4yF1bv68pCOIyslyvZs806JsCnp3Xb5w5cQS/0QvurBv8o7KPkUl4NBfJiUS8legdIqKxzCvUFfcXIStOzDi0zgmR+cJ9p0KVHpb9cbEBR11F7baTfYUqhQ3AP84MnVk6BtWOveSFYXxQKwOfh+elOz8ZS+6fb2/2Gc0jQeRLt1Lof2QHRp1l8wgw8RjSP/tsFa8+wTsvHsqxIVsWAL8Szfb/88W506gvaIx41LzPviofb7xJ9DeaZGTleoH2aQjFnfvm44YtUDJQXOZz3ErnenUo+cqyJxDNLZii34fMjThU9BvfZq28Xlei/t8B/+NzLWLCVo0vS4hETmFBg0ZfXSXKrDeRZGwk9xesAijnzMRTaB4sTHiI6YB0kVzjxnEtqrtMUd2fmwSwmrzNSYjJ79GAakjB7N1q78jxSMNUepD/JHnALHXpKO9IGGyvOpLTViv+dnqa0OffzZQ89gkTAa9kVkkX2HWNFcc+XQ4zN4byH1uWm3Gv18HEmmocv/bxmw74mdoxSK7rJX/A5GAGdWFduYxTRVmK7P2kqKA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RJVBLOmOYMUhYfMcTHbCsMvQ1hk6/vFaevjf6YtXb2B88ngF/3pSr7cdQl8V3It80cTFRi1eed3Is+aEs4/REEhWm4/gY5JJZhcb3gXkehASGkrRbBqyGN7n9Ac5CxKhEqyQU/Y0pN3CMz/zSbnXlzs+FFCxvgTcEi59sYoDWfH8JFsONrZTs4u7AMxHb5KG8HXyjN9HoRpfS/Zh+29cF8r4ZTqRQzYWqKbF8rhRDXZxiypR5+0r6704JrFgH/dFsPZN5e/KAUGJ49lamXBMefq7eHjVH/Z8lc8u1qnRiPYz8/1q6OrcTSLC61QLXdts6mY8/smYDckqI7Hu0xSao0Zi+nFFRHShgQT+sjaKIOkEvlbp3Hf2jV+AWuuetJ+lX+YA7ZOElD2tZqDxBlII2iFap8LacTiCPcBOV4OQpcHBqwzDjVYUbxioBHjxV2cfM5PEwx8lIeMUtXV5zHyQfvvqBtzlkToTwYMoaiABsoKdb8z+X52IamPGPLRj4NY0s2rTZgL3JSqW/hhMC4i1BANLsMjzkRgpu6OwzlcCPN54VFYakYrGNgosgJn/1rMdDfArJ4vIhWQu9/neCGuzF59Vq/mWzezyJuN/vk8Ca7c= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e9f33154-9aa4-47d4-fc32-08dd4513b464 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:49.1014 (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: W0UgbITv6sBJ/pkejx5Uum8VubfTkpdWpbN2s14+7n9aJXOJcHLwY3I+ScT1vyOohGOO0lgR8UhZ1jskPh8vqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 malwarescore=0 phishscore=0 mlxlogscore=999 bulkscore=0 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: BXaS2gAsBG6blA8dXpe3aRoZhre7ZxAk X-Proofpoint-ORIG-GUID: BXaS2gAsBG6blA8dXpe3aRoZhre7ZxAk For CoW-based atomic write support, always allocate a cow hole in xfs_reflink_allocate_cow() to write the new data. Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 2 +- fs/xfs/xfs_reflink.c | 12 +++++++----- fs/xfs/xfs_reflink.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 50fa3ef89f6c..ae3755ed00e6 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -865,7 +865,7 @@ xfs_direct_write_iomap_begin( /* may drop and re-acquire the ilock */ error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, &lockmode, - (flags & IOMAP_DIRECT) || IS_DAX(inode)); + (flags & IOMAP_DIRECT) || IS_DAX(inode), false); if (error) goto out_unlock; if (shared) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index b28fb632b9e6..dbce333b60eb 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -435,7 +435,8 @@ xfs_reflink_fill_cow_hole( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + bool convert_now, + bool atomic) { struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; @@ -466,7 +467,7 @@ xfs_reflink_fill_cow_hole( *lockmode = XFS_ILOCK_EXCL; error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error || (!*shared && !atomic)) goto out_trans_cancel; if (found) { @@ -566,7 +567,8 @@ xfs_reflink_allocate_cow( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + bool convert_now, + bool atomic) { int error; bool found; @@ -578,7 +580,7 @@ xfs_reflink_allocate_cow( } error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error || (!*shared && !atomic)) return error; /* CoW fork has a real extent */ @@ -592,7 +594,7 @@ xfs_reflink_allocate_cow( */ if (cmap->br_startoff > imap->br_startoff) return xfs_reflink_fill_cow_hole(ip, imap, cmap, shared, - lockmode, convert_now); + lockmode, convert_now, atomic); /* * CoW fork has a delalloc reservation. Replace it with a real extent. diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index a328b25e68da..ef5c8b2398d8 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -32,7 +32,7 @@ int xfs_bmap_trim_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, int xfs_reflink_allocate_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now); + bool convert_now, bool atomic); extern int xfs_reflink_convert_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); int xfs_find_trim_cow_extent(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, From patchwork Tue Feb 4 12:01:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958963 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 1994E200BA8; Tue, 4 Feb 2025 12:02:09 +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=1738670531; cv=fail; b=I9M5eRg4Z1sTmIX7REgyILYG+WEaOYLNuC8aezeO6JIoW8/YnLBfabEVlJu3BuDXTR1EkbRNA5ye5afyilEWrLdH/5RXPIENQ/HvvEZULLmO7nE0xAVvyV691/ZJP/jeleKTilLvNwYa5a15XePh2YJMA/EpDuiJy/qh0lJhSHs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670531; c=relaxed/simple; bh=HHjpF8rSeI+thvRgMXwNdhTquxmYHAX5FNY87CKjviQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=XZ8OxbmIQqWBrALgCoJzQEBSPS8pxnzum3Zle/m9Wl49yC8t7knP9GwVrF+DfsZiS1c4wzRkqlB8NHz5voPqMbkAhcMlZhuHWEexMJK9M5VHlcmXZjQCKBBKDwdoD2vOBVFGUWRmuxYrl9lIvuucbwieqsta5KZ4DAXh/wXxiUI= 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=m8R16MeW; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=vsBi3+MY; 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="m8R16MeW"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="vsBi3+MY" 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 514BfYnM000869; Tue, 4 Feb 2025 12:01: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=AL1psR4ZpHXLz8epBAZ1gHlsPaWCSjpUJf7YQlT4/FQ=; b= m8R16MeWtHIvjW5CLh5YDm44YoQo60OAsRSN9Lip1V/UVHb+Wtmhmsrg7X4YKuJA AnL5KVWE0knmlNO2yp8a/jEmuhQb6dDeFo4oRQrzp7IG6IdNtPvbw1Ecs0T8F8hM qLVyVo5fcxgnpwidfvuip4IRZ4Czt1bjAlJWEYqSZ9wLY0Dom02lfXL+IF4wZy6d ZOMrcFYqmiMQfRZ78HEQJbEB2ESBKbXG/3RpdwRwYF1hajxWUN3w+2pTACyelUHT RFrQxPMhYrbYIj0lFMxvuXTi6odn69rwyabWVcUwKUBz+GjhJMnEkLgtNyKB2DzC Vy9w/fYFqeJQpgHIjNkfGg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hhbtcp1s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:53 +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 514Bl2DY036260; Tue, 4 Feb 2025 12:01:52 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44j8fm3ykg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sWiA7gb4kP0dL+QccSE9J6enLYHjtWXtLTvd1zQn8H+A0PxyZiYdRSljCDAvHSEBJfk49TdHLqWdH/cH7XBVn/I3G7rVyMNceiOmknrUYndDdEhuro86iAUvqMls7vWDiRUTCzN0m1RYzDsqVz4gmnkyMIAz4xaWJO+23cTtziZxX3y4rwQo+4Ahr1IzM+PqcKSBorIMKaPJTwOrl6c4kBUoXa+hLPNVvxE7TbWRrZs/sQLNFUT0ZCRDStDcm3Cm82JHFo8AuQ4DXdRdFhVolY5I5wuco2Tt7KxeIw/yqlNJGK8gxPtU38Zn5Uzs5E315kC9md61X8lQCio+qF+Img== 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=AL1psR4ZpHXLz8epBAZ1gHlsPaWCSjpUJf7YQlT4/FQ=; b=CzGjf6LBakorpeX0FmZdWn6zidiUXHg6XT1pjcKcjUwqJADeDd4IsDp37Z8cwpt9/CFbK+cdvyQV/hoTE2qJCXPFicJYdMfG7vIFgb9J3uRa79txwxgRPDgs6LuvNetk32j9/HWEa06Z3yhzvDYI+gbGx7JifjJGrqmIK1Pr2SslEvEg+y5ywn/0XiX2LfZ1q3uYCOP1egWCcBEIgffRJZcMBomxZMTB6D7gW8joUBhpxdKdWMHck6l9FurkUgp3G5+bwDKJ7klyKJL9ciSIpEOfZz+CIseWVC2chUwrZ7lNEgZhAa3Snv33TFg/Jg8LBc48vfs2F72QiXLORs9xfg== 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=AL1psR4ZpHXLz8epBAZ1gHlsPaWCSjpUJf7YQlT4/FQ=; b=vsBi3+MYLf8DIkhrWQ3O7bE8debaK7v5UV4rLjz7q0jIaULkcvAo55w6/xCYhhx7/BC9Xk7ZqNKYtBhmEoReVqAmPDRHcEM3X1YZh5d9viWqgVoOcolXLUjI4ErWh1EY4E0yP9V4cWtDtzi3yqyEphZ2+FgOmCLxVekhqDTuzjw= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:50 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:50 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 06/10] xfs: iomap CoW-based atomic write support Date: Tue, 4 Feb 2025 12:01:23 +0000 Message-Id: <20250204120127.2396727-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: IA1P220CA0007.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:461::17) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 26a44969-495f-4479-cc3a-08dd4513b52c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: +idamzjEOjOmeqDPo0ZOR0I3spVVO+VUhG/1wGdM4VnCw99dmDTaoLSr8uYY2ZodRo3mVFK+NNfO1jWyCZe5mR3sC3pJHJ0aqWoOt2SdNSN1kZhtRH+QNUJ81COprsUKtWkIT6pFCYCHjDCWe6D3mP+XhciGWXQnPywme+ig0BlbuY4k44K1YN8BRtkc6LtXVL5i2qJK54/69FhN8oFlQnyrJoxfZSMuRHBQWVwmwyS1Qyk2yj0+SwEvppKviRTa4dk6iV2GiHChY2f8RvlrN3/M5eazTF3Jau8tc39NP+eKW1E9mr6SklD4GdKicty2Pky3mEpPROGVyWjhNlfbeofoh1+CNwfaIc5/jxzExwUFut70FjszEHPaeBNBph8UQqfKvbWdH1ynPQD+2X1kRHAFy2mwrwCfIyqiVBZNUBAZkCCvJlLjNjyIYd2o0k0YjJ0bovfFRZiYmaAJRhr0BwEH6td7CgD24WYWSJiS/tfBO4jUCT+huO26JzlKIU5ThxwC4tNikrp5gOZRHrLzXsccNY3C9RwabScspapjTxqgXsE6i2hUH9gzOqPZ/vGBTW1c3USKe4d222YC21mw5L1lyI95OGtsfCPfc9A4j2RJypZeT2HDhPwoBbGoyDtg3VIaUfKTslKaCNDpvV1v1WDN9C1jWVEgI8atwYkJRXuskhJNrEJGBQ55bKNYuM3HHjL0DGsLP+qDwluynVKkYnrumRnuHvPvTj1ZgCSnmU/OQGifA+n9fMGblOsmaUCo0APBwO96S/2CIGHgPpdkirFIYw2sJ4v0g2DXYAW/SbTfLSE/G5SqOQ2W2ZZS/HqHZ3nsysn1LQECmCwTen7r9emjZwjg7kPXQnSp8CmJZLjlG6+F2K5nLMqi83SVmiOdd0foujZ8KiX3BPYoxV71LQb6U0f3DsXXBTG3NIC0rFu4t7HK/EjkqcS9jc5B5dIo9QzMhitclrXQY0G9egNH8hxlUotRvsTlbBQWDhU2x4niSfcK67zmjuRDne4ybykz7KgpKsrzYBJmhWoK03OiiKNBnUddmagZM9NmtXXsJzfqg6ZSPcSwn/KLc5LhZJcfZ4E7SO3DuEIAd4lZDnSogJZr5fuF73U/gCI9BBztUtkg/4/9W+i2oy2K/SbvduMQzxEi8z/ZQi6DKC6pAO1r9Fj/EDkHrwT3BGFvgBKZTKmfl0KtT1r8PiXi46hRpfbxJWVEUzucc3ZXBhnShz4XYbSOXfhL6fFE4KvYX8D+DaMqgEUbLNoEZ60UPDQ0E3aXxSVvCHTRe9hpY6PU37ZklhjnQCn3kgchInDvSfqbZkCrbYcXHRrvCfhQ5TBTUzR6ynDd4knxQDHzM8QZHjL473niCUR1QdeKFPPLNl0qz/O0IvHPA26dQHhHpzh6civW X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: pU1z9pCD1LOS/c19UnexnXIxNX0RdlS7Q/DEBR0NXW4T7bt8JByADADjqkxqo1G2psg8GI8dmvufcZsDZqJcyeImO26Jnsk4AoZWimkXFtCfiEpr6BGHXbWkdXgr3e4eYfDTyx1LICbzRJEuCPFHTf3NcqprxHz2CP4A3avBagT3UY6YifJFVkNuHaFvU1ZGEP2Wk1DSH8LMETvwQUBv287FFnENV5mAHMJNwE28NKAbRtY73iA6bADUck00NiwT0RKaivRlGAoDAH1V78F7NL0D7+4ty6xXEOc5dgMrb9losgZ1MbyaKDc3EHZElt0lE4H6K15p+zkKtI5NACAduX0foXn5LdFOkzCERX3j1sA7eqtJs7XefebBSMzKCTZhB2W23as+M5AwSl0wAOT8WaRtBUJXFIiYwUy+VcZUO3LARmPlExjhJcYgOpNo1Lkg0gMJPu1WkwrU5Lk5jUkPnQdU7CncJhc7gT2z9e6+x1ILdbpQKIvnmm/vN192xIDdILGdPe9x6sFM3NcnWO+f0D19yUKkBHddPMBKx18sH/6JYjU8KYvC2bq39yA1Tt73lLZ4j+Awczyc4zcrKHjgZZzhvMoLtnyb2rxYksOkPGWayuKOih05/CgZXB0YKelxyD7AVUFAGn4Och6z7qg1SH8Eor1muKjTKsoIpxHuYsfe3Ti/nzqyPohLoNX2e54vpvfdMsBWHequLxoN2rpP+bphE2Dk/B2vZ6eNngIVIu15Wynl82rxsrmQchD16voLHNLDIaBmOXcaBxb8Q6n9Fu6ZSfW1d9FFs3U4SVJYfTawZKQ9Pmr16oBPV4bTF9U2cY+4SUbQ/anLQx69hGQmoacUJ8Mlg6o8tws3SWRn28Qzg4VGg9Nq/S8a3qwY+6g9TkEgOchViFbgbK7LgCCTYPFbm9Lf0o4sELwq/bwjG2028moVPDN2e0scrvX9+4wSV54NPT52zAgHv1IgyeurnF8kmzWP5IDFGFSh4m4malLGTqN1n9EUpsl2Iel0oLWzrSyFtbs/lsbJhCd2rhcjoQUjpzJ5nCwMxddZ3RBLNJcyhiEjC4RKyZh3kNKkXrFsZ8iSuoJnfuPbLPAQ5U57wHJyJQ6bJi7NSH5RUYDzuCBI/FwrLnXxNiq8MkNEiSeU9Luk1fs95n6QEeqfMjBOHNB8SsMnf1AsY95mDN93thUeF3+9JUmH0mmscdbDA6O+42W9Y42xmis/V0CctIQVO2SKjcC/2IX7+esu7ZPYK56K6DpjCSh413vtQSBt8zCunJpYjfGYk59YWFyjYGHkXrvMJY4j/LZHlJG/7SuV/Z2Hk9AeB35pxPGRw+yKrMJlXEGzKoepCW988aFyQntqmBfZyq1lNKxoHmCkDdjL+kmxC12OZtWgnGmlMi7TvKKsGlzUPTKnfYgq/R/Udn0rGdfq+bo8L9cUejeox6fmmVoMSGGokkkE4Xb8Uwse9Bjz2aRscRO4elktxDSpMOA9mBGjzkrWJ3oqOKlDq8SqV07seCHspERxmmf0meF8Zzi+ukx8GME/7tz9wTZfzfptnUg4OUrJ1GlG7EobhSBhgrmZlLAT7SGBa4kl0YM33H4+d0AlItMgOXI+uxoOXzFxog== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: hxwBPujNgD+t89f7cZZxTNvH8pT5S/trJ9kmEhlixaNBBJs84exB7b1VMvKAjfGrq+b0ozH2t4otAkBPe04CGrflnOnDSwBGDRwMcWntg51rsSnPNutm/Np51VCFBlwwcPR/c4J/FkQygob8Hvi9ifjGfdlDU2Zq3MRQ0MrTG5k9t8mSHwmPhqDEKdy4Zkbuz9nPFrcdtPDmqViVV4F+LFjemoPP/3XFna9YN8TSI+ZbE0bqo6dB4DMnv7VZm7ntkTCOUovo3PfGJvteT5vVNEJ8+6hQNLnSXyYt5szBowZjfq5UTSpdD0GwvsqVE5itEKBeS6UuutWZoR1bRTrN8Jdw05/uE6vGm9M8iBrbyuoXZ8aN6gxEq6PiOUzkpe93p6uHSqfMehI9N0ddEPktQaExoQEFQgf6A4273hpTHU++C1BK677d+pTwCllorxXkx6mVahOfI8snSO3kVUDTK2HOkl2seslPKwYDKfgKvJ4j3oKsk3a+Gr0EPhVuOvk7jps+hAnLXb6uO0jc1OelXP2I5lVb+6f5HV5eSCFUU1/eUBC5rEBwVkUpmAC7O3Pan4UAlgS6OASSq1TfWf7XbdzZtmW03uPx61fgmni4hS8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 26a44969-495f-4479-cc3a-08dd4513b52c X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:50.4035 (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: Dfsahq/tVxfnjDHGEumqkqpLcs09a42k8Jk9A0dM7Rysp4dZVu0GScUSfmPnceRQvxfvl0QxV2K+c4xIW2wPfg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: Ck1d4m83J04V72BekJ2aIbqrKbPjOqDc X-Proofpoint-ORIG-GUID: Ck1d4m83J04V72BekJ2aIbqrKbPjOqDc In cases of an atomic write occurs for misaligned or discontiguous disk blocks, we will use a CoW-based method to issue the atomic write. So, for that case, return -EAGAIN to request that the write be issued in CoW atomic write mode. The dio write path should detect this, similar to how misaligned regalar DIO writes are handled. Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 68 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index ae3755ed00e6..2c2867d728e4 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -809,9 +809,12 @@ 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); + bool atomic = flags & IOMAP_ATOMIC; int nimaps = 1, error = 0; bool shared = false; + bool found = false; u16 iomap_flags = 0; + bool need_alloc; unsigned int lockmode; u64 seq; @@ -832,7 +835,7 @@ xfs_direct_write_iomap_begin( * COW writes may allocate delalloc space or convert unwritten COW * extents, so we need to make sure to take the lock exclusively here. */ - if (xfs_is_cow_inode(ip)) + if (xfs_is_cow_inode(ip) || atomic) lockmode = XFS_ILOCK_EXCL; else lockmode = XFS_ILOCK_SHARED; @@ -857,12 +860,73 @@ xfs_direct_write_iomap_begin( if (error) goto out_unlock; + + if (flags & IOMAP_ATOMIC_COW) { + error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, + &lockmode, + (flags & IOMAP_DIRECT) || IS_DAX(inode), true); + if (error) + goto out_unlock; + + end_fsb = imap.br_startoff + imap.br_blockcount; + length = XFS_FSB_TO_B(mp, end_fsb) - offset; + + if (imap.br_startblock != HOLESTARTBLOCK) { + seq = xfs_iomap_inode_sequence(ip, 0); + + error = xfs_bmbt_to_iomap(ip, srcmap, &imap, flags, + iomap_flags | IOMAP_F_ATOMIC_COW, seq); + if (error) + goto out_unlock; + } + seq = xfs_iomap_inode_sequence(ip, 0); + xfs_iunlock(ip, lockmode); + return xfs_bmbt_to_iomap(ip, iomap, &cmap, flags, + iomap_flags | IOMAP_F_ATOMIC_COW, seq); + } + + need_alloc = imap_needs_alloc(inode, flags, &imap, nimaps); + + if (atomic) { + /* Use CoW-based method if any of the following fail */ + error = -EAGAIN; + + /* + * Lazily use CoW-based method for initial alloc of data. + * Check br_blockcount for FSes which do not support atomic + * writes > 1x block. + */ + if (need_alloc && imap.br_blockcount > 1) + goto out_unlock; + + /* Misaligned start block wrt size */ + if (!IS_ALIGNED(imap.br_startblock, imap.br_blockcount)) + goto out_unlock; + + /* Discontiguous or mixed extents */ + if (!imap_spans_range(&imap, offset_fsb, end_fsb)) + goto out_unlock; + } + if (imap_needs_cow(ip, flags, &imap, nimaps)) { error = -EAGAIN; if (flags & IOMAP_NOWAIT) goto out_unlock; + if (atomic) { + /* Detect whether we're already covered in a cow fork */ + error = xfs_find_trim_cow_extent(ip, &imap, &cmap, &shared, &found); + if (error) + goto out_unlock; + + if (shared) { + error = -EAGAIN; + goto out_unlock; + } + } + /* may drop and re-acquire the ilock */ + shared = false; error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, &lockmode, (flags & IOMAP_DIRECT) || IS_DAX(inode), false); @@ -874,7 +938,7 @@ xfs_direct_write_iomap_begin( length = XFS_FSB_TO_B(mp, end_fsb) - offset; } - if (imap_needs_alloc(inode, flags, &imap, nimaps)) + if (need_alloc) goto allocate_blocks; /* From patchwork Tue Feb 4 12:01:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958971 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 810DB1DC745; Tue, 4 Feb 2025 12:04:14 +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=1738670656; cv=fail; b=HsuKXUZrsoaNlPYk2QpACe3l8rfu3wxAmtWszW4adBkBabI4BvYaXRwIMDoDQ9GBsLKLH20SqWtodlpToJKvtQcimsRyYDlwQqnq6w/8C6SwqQZFFXOFcVK2PHN7MnAhx35gReEz1WJAX5HDWBH9SfEii/DNKWkJXTmGHuN/tms= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670656; c=relaxed/simple; bh=7dUTAeEtWDPaq19wjAbzmEn0QH/LvAN+DvULJaSA2o0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=M5hD+g4i37prZoAdiVq7QkvNRa3z2qkjThdw/XGStmzkoBVd30swDnHGPqWB2+H/V+TEQKnnqYZvAUunVU6TQHBj7jGRinmwsxZKYZJtoQjhNaKcRrviD1BBepbxeq382rfNXbZ9xFxzYjJFcKwCQayeqojFyliN3Ik/w/uCeA4= 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=Zp+rJrSN; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=wObCihP1; 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="Zp+rJrSN"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="wObCihP1" 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 514BfZIe010983; Tue, 4 Feb 2025 12:01: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=FtaNzOx5hB2a43pTrcPVMW7XGddsgb2q4iQIuJjK/bg=; b= Zp+rJrSNw7ua6edNrPwOgjCWVsMgWJSwEqba0zS2j/rE/OsICGV1fHsHtcVwR0iF JWbSoYEHDN7Hd2EhqrpP/EGhua2BicAE5IsVQh3CVOa0b6nsb5jQ+exlqKEuIPZe 1nRFI1Yero0obN+pfGjyZcEINW1V2ospWNtyAxetENycJ0B8mAbk5VMyXwpF8VWQ iFHEid0PrpaN/p9mwFPFJ5rZzVUMshy6r5JWz9XuNw8tNQPmpKDAq7x22sF0mc48 l2Gq1N30YYciWqOiOGPlol7yGyUXfgxZ1phx+7jxU+EWv0Xejpy0psOiPhpCU5tG iUR6hBLAOEY3SO/NNplvQg== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hfcgvruj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:54 +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 514Bl2DZ036260; Tue, 4 Feb 2025 12:01:53 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44j8fm3ykg-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rYIiiFC1y6u5fv+Hi5ueJq0uoAn4TN/8WfxtEV/Tp8NwGKOctnAB6oCOi9QAmgbI+1uiVautmv8I4nSNpiupHdkGmnhoQ602r0soSLOjTGoSDU7ILDti5fD1kqYfgLEGQjo3CfL/XwwJRYEETonmMYvlO6Q49aK3WucS2uZsnwd8yoyOg2cqqqxKL/SnkOlUhKEJ3aC32ye5mT6QbsoqACcM5LNOQQeSRy7H84aNUqrMAKvAGp4Mopeb9C6fa8rEN134ODrGI9Q67JfqAcGh831/lNzMdnhw9G4spJ3XX8muip0B0/wrgxDTiyzX/5e6eW1QUhNSOiMqUnwtpLG10A== 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=FtaNzOx5hB2a43pTrcPVMW7XGddsgb2q4iQIuJjK/bg=; b=YK68bkTgWjquC89gx177h2KAuejMm/DE2cVifrxCLakOy3HvrXadi7j5HNuu97XNCGSrYlSROnNraFiB7PXL+QaNkfXCOHumBVD8a//WswL5Y7IEBDqceqlFr0A8re6l3acq8nai4XHbL3FK05AXLF0lI8NzpgxP41+jGPmoLLBXGzCnt5TpRmk9jdPrw67saOULCGwISQ+d70A2FYlJk+GXLGV6vGhTbZewWe3T0yFtkmASnPFLQTpMpW5x9CzUnGNV44pEQAW8zwoXhMW6KqQibJhVeV+veTR+mv64hn1BaBrthtB75MO5efNVu+V7II/0t74JaipYb8jpz3oLxg== 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=FtaNzOx5hB2a43pTrcPVMW7XGddsgb2q4iQIuJjK/bg=; b=wObCihP1J7zK4d65Y9Wdv0CnrsgQnz2yvD8kD2WRIvhdAw2ZmFpWqffiILquhFcs05osJ0TDRlHjCdZN1aX7zniuJW7dTs4Znin9nXYcVTirizCxNg4fSW6GSq31ztWTF/vxTw1ytDm5nwmKoAwpc0Hm6r43pO9tznjo8dWKjAI= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:51 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:51 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 07/10] xfs: Add xfs_file_dio_write_atomic() Date: Tue, 4 Feb 2025 12:01:24 +0000 Message-Id: <20250204120127.2396727-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN8PR03CA0018.namprd03.prod.outlook.com (2603:10b6:408:94::31) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d484300-a2da-460b-4663-08dd4513b5fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: slZobAw70O10TZVbzcTVyvHGUlRe/0VpLgisjeV5VtnYhrxxDFGbx0hiGbK/Rq7hFfvereIkt1fpqWm2OWysE3WsnSnbXMa/ijCiBYyTtIio/NAPAxiP14FlsjkVOO8331E9lWhUjCosfxGF5zAmKkIz5gBF1uOkXdrlm8bJwJ74W6CWRUKOvuPufjZPLx0+otGXQ4pJUnT4bqWGIPPE6o0Xg+d0cKTovdXNwBCO/tohsk9qc+NpQ639yD8VzwXf2lwsM0pBHH2yKgTD39FHWGQOXTzmBlSpiwydYP5gzrYWHE0kaSSBTbfFxRhF1Re6A37SDD9cydcd7BFDlqkT51ABvzbWI3JK5sFXkLzd0PzEmsOIRu783EkQO8OKlrF2+pwtUWYWOySL8/lqGJM+xJCVXPVbKOJKpyrfhlWxh1RfxcWPHKn/oEyZnWvhZpusnLf0Ti4SsBxyQcEwkBMFAa6mI5CO1YGcEinETFj8cmeUQhGjcLb5YCG0sPccD8S3bid2WckiNPG4bv2EjqOXvi4Utg3KSqhZ4sIZtXqM02CtdKkGGUTu6Mky4nvPVnQwyP/394rcgom6ajo7y+h0V/7RQNx76sp8ESVZkvk5C9XQNEubaY1/TBpg9/9M6sgi5nR8IIi4uM8bLALuEROv9NQv1YL7AOnOiqOmBppMOWFoP+DVFIRQi/RhoB3ZRv8lWlzIvi1nn7Bxjofbfx5v8aw0XEL314pI5gQnIrUpVvZRuH+3Ktlonc1x5nwEXbYfy/bbFt3NPsHtSFVTWKezOcTOcFzGemFtHwiPgItedsAh8eEediZn7MCqJDhHanfKb2iaJAs0gVUY+xGZSKG6oauHVVqrzX+QYCYzI8DqhXpnbcv5wfjNukb6G5CikT2+8yGUODCLAMs7+S0+1/s8YPorA5MiIC8VXfh3SPLaktEKsZQwQrIDrOH1CCCtnbLvs1aYcDnMyQo2hJWcLGtep5QzfKtC+yVUr8svpnl3P3eSHwSUnXzGVQc74AkFH6CT2jlwdxd/VtCJrN35NY1N5Xptrn2/a36zmf1mbxiqz6NGd1zIwGjVa1HjPNyMa+tDq0hsgU5qWXr2kvfiq7MpFUn4ARsWAVEaHQveO4R5zSXt3byupaP4ld8oRNRmG5PGktANHovbT7ag9nUK6AGx2VzSiGvwug1n44h8GSJf1/6rrShhPv+dwGYkiOkhtL+2hI3Y3CSusnXF/VJ0DAKVBP/f27gSdTK88/DaQfsmGwksgop6ZoaDT1daxykcz9dC9Cf6C/g1qHzcnhpI0solbG6UJoIJgNE3rmKgJxiaPV29Fny7HmC8oemee/Sj+LjaGD0kUKHhyqcczz/WAmSJSuMPJkJzUSYNX2u75iRMe8SBlLt0EC5/N6QzB0yFhn/d X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: njQGcaNrqoL677Shv5ZyJmQmX1MXygmQlCh7Y2u3+nlH/SKtjigTQmX3+86Z70FqpXD6uTk09P6XPs6G0aaBUD8rvOFsGoyZ+y4J1xPlEIUsiXFPrPLoe1qn73oFJKCnfc/s5juoKDwEANu6KAOxGA/6vmP0AU9r2LiJ9sLxOsYBiJCOeF9mLy4+Ut6mqlRTBNKXjUDbdPHTVGLDT7NvQZ6tY6Rl+ip71WNcKXxVdwViZOI4F6SqAsZknihyxh7KYVbAPIA4qWXp3g++WjW3HwBwK32WDeQXSr35nORkUz6gQZtnL+UZGSxftS77H/sCLyR1D1ETX1vkpr9XroiFL6j90EPclHXTgVT/5QSbJGmb/uSuOQb5kB40xiGIDlmuBaTvuZyJIyn4UoakDnTVJyJF3L9ojnSSy5owRQm/kvPnnYrOtit5Etj6q399KBBf7qsurI76ukRcQ4f9lghyNx3+9jZTmcJKJt5Dlx60vRx+EbyekDTLyy/crY75KEyrfO3pbYjJabCeO3R0ZZeDOI2JX+d6zn8L/jykyr2gBwDeX1oDM+/vrjpnK5JN9H6Zo/Hfk6M2HyBz5AaWcBwADK+PdeBN5SNFyZY58RnpZpwqCva4ym3wdERMFAvu9Y/oPOg2CJaHgLll0SFEw2HZcdDs88mxDnRthkMapYqCS/eJPllyuLm9pE/+nO4b1vtN84hNUYk1xV8bhSBH6Szyj8XqoIPFzDV5T/tUU/r7ZfmVb4ioEDUYRqWuimAAVdf817ICPGE1gfpEimKbMvSXR3wULL+mmxexxxQy+pmCqTuFA9t6O6P5zuGoAA1YocGZEr2/Rmw1Y4mJlaWafABRhX52m9zS8/Q2k2ES+T+Wyl8NkRZl7AwjUCfFBEAWGsuO/pCwEchgswPeBCOJUB0ZWjjnMtbD+FOCcdtPiRn/eNrjd3RALvniPrp2SfS2kiqpbaHb7VMwtjuNazRACzV7an3YxS+MZYilfyi/XRC6D+Rl8Acm/LzUTqgKkzIRwnEqbqXVWRk4NnFBjTHyNP4oZldOSb3MZ7G2BgvnTQfawOXs3pYN1uy25JCjZn1JoFKz8MZq/KcEAizacalOnpV3SxBN+u/cLxTlmmt5yTNH8nlmlwZcLIj9Gw2Yo0hijLQVHicGKy8u5PQ1KKEftM3gIkci0bU9MPpyLEhgPk3rUzaRlRTYpaj8Te6LnrQcTpHGndr/eicf/c0OAvJEyg4GtC8L52P4fFkKI7mYkURBw1zAQxajdgUG80mDcIKcStHWbI4qq4gbm58QOecDxSDIrpLR2hPXRveb9QPMEDvWNewcrI1PvcrMCBypW5dwYQWg+HWFpDVm1FoqvlV7xrvh/lgtptuN770nDLWEaVkYuxg4UwWY6hm4AgjD74QZ99KuMDq8XXpuP1nbQ2HAS0yUKUXnXhm5jlzeBS0dBi6JOwiyfrE/BjCAteCl3IpM/ygHn8eSbIKleUJgikfcyUnu7czfRZjdEZ3/tt2PhszyOP3ns359pJ2W7n8Q7tdMMp/fxg3hMFw2zeiuBDR9pIbYuFyyoQr4+dPgDOexdaDwaSONdeSLpqwhwNXMb2uaa38QxB0cLfH6a9qEGMx50rAh0w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /tSPrg/13HMy3BTgcVzUqM3iqAHo04GVgat0ZTtbfNA4cU9OSzYRK4MonYLqbLKzrMJhU7Aq0QtoWpTBHR6FasT8wBCRi8g6NufaeQGqVGjVYUkVbw2cRhelLWL2hpLQPaUcWqgGQgZ/+ENVqBEUG7SgSGbb+tEKM+96Jsb3zJb3aZZ5zI0tfjXCWOHarqu0aPDI82auRGBjbOZfeoG7BpYhMAgvedmP/BKQXcfHYvQijK1KK3NYh0B0e+xe5SNMKahyATcnH5YZ9BOHvAysTNLkYWeWJQJbGY2I4qDrmKLnj/LQ7CTdxgk2hEJ2U6j8EFEAmgRkMvjk/WJcoXNeukMIll2gWTtqwgHTIFc8Bk+S1aXZwpf5dXMc5rM6jC6vs73TTNCC8shDN0+pc9QHfI+CWvBzRt0Z9M4GtA4uBMnFHOx2AFx1gB5vpQK99wAlB9HTDemyCN6KqUNIBbfwT0nr8X83LwxSZJLDXIPHEeJRzIcxcAFQw1/fmK4Yl1ABZ4C72BJT1sLiKpewyznx335NRgumrNoXUZqtGKfuClv9q8H8JixU+xZ5x2ULrjJH3B03j7ZWBVqSk76/l+j2wasUxtoVs0QVhvEgeyl7P78= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d484300-a2da-460b-4663-08dd4513b5fd X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:51.7663 (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: OgwDLeas0N8syyEmRgzHII3aUlY9YfEZqW3ndXnZZrNVd1I0kUFcXtE2+00ZPEZTFdTUKAhXBOIwF3APtBA8DA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: qLOOAsXqnByv2yYATef9Di_hmmR6clgN X-Proofpoint-ORIG-GUID: qLOOAsXqnByv2yYATef9Di_hmmR6clgN Add xfs_file_dio_write_atomic() for dedicated handling of atomic writes. In case of -EAGAIN being returned from iomap_dio_rw(), reissue the write in CoW-based atomic write mode. In the CoW-based atomic write mode, first unshare blocks so that we don't have a cow fork for the data in the range which we are writing. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index fd05b66aea3f..12af5cdc3094 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -619,6 +619,55 @@ xfs_file_dio_write_aligned( return ret; } +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; + bool use_cow = false; + unsigned int dio_flags; + ssize_t ret; + +retry: + ret = xfs_ilock_iocb_for_write(iocb, &iolock); + if (ret) + return ret; + + ret = xfs_file_write_checks(iocb, from, &iolock); + if (ret) + goto out_unlock; + + if (use_cow) { + ret = xfs_reflink_unshare(ip, iocb->ki_pos, + iov_iter_count(from)); + if (ret) + goto out_unlock; + } + + trace_xfs_file_direct_write(iocb, from); + if (use_cow) + dio_flags = IOMAP_DIO_ATOMIC_COW; + else + dio_flags = 0; + + ret = iomap_dio_rw(iocb, from, &xfs_direct_write_iomap_ops, + &xfs_dio_write_ops, dio_flags, NULL, 0); + + if (ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT) && !use_cow) { + xfs_iunlock(ip, iolock); + iolock = XFS_IOLOCK_EXCL; + use_cow = true; + goto retry; + } + +out_unlock: + if (iolock) + xfs_iunlock(ip, iolock); + return ret; +} + /* * Handle block unaligned direct I/O writes * @@ -723,6 +772,8 @@ xfs_file_dio_write( return -EINVAL; if ((iocb->ki_pos | count) & ip->i_mount->m_blockmask) return xfs_file_dio_write_unaligned(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); } From patchwork Tue Feb 4 12:01:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958969 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 F0A26211A38; Tue, 4 Feb 2025 12:02:20 +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=1738670542; cv=fail; b=uURvCMcT3736oTEyoTk3fY+RvC5DfknIRxp+gxO7+9IfCX4mOHParl2MG/7AOyHfkMlzdzM36rKrqh4ZCPSQ8QtEyh8vtbso1ltnw9LfnrPlF+9LuS1LPxCdg8PAuton8rm7RFsl1GM623A8FJ3yMedilifnH6HwpsmTO1iZkDc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670542; c=relaxed/simple; bh=0GRzJsSANWNKunZDZZWuDfg22sxH4GbO+tm/ow9KDg8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=tdZayowiTdpfmJcc8EY1r1Dxvbttw/ldOP8YpNSnbXaf+5PSJhj5Lci9j6j+kUDjtC0U3xQmPd5L3peVARYehpynI8C1rqt9Rtkf974rSYRkXhTZzrdtsPwjNRkLWkIVDyaczWpR9mr4iPujthG4NIpiE4XgqVszwzLvb3Q1juk= 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=n9en7u2U; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=aneSgrbQ; 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="n9en7u2U"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="aneSgrbQ" 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 514BexCi006306; Tue, 4 Feb 2025 12:01:56 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=RRBEZgjOeDaG4fnGrj8fTp1TPFhBGnJIfie9VEcdpbs=; b= n9en7u2UFLa4t0Kc5LOOJnswsR2GIEfP9o/ViPs2Ds0/pIpD60UhYyOAw4BwRetH mAmoHnVTA9y14WS5PeN1jP8dzPwUVM9zhFMrEAG5nq/TzeHPyqCP/8HKSBuqnok4 vGU2v/+0Hm2/fK749wBndHdnlH06hyW4Y2wOXMpkRvrzy/pBHmXnTQKvfz8XQSXp 5gCDTIVX72E4Pv70ZfOMqUb2nv3NYMN4xXd8BTX0u7Cg4YHZhziH2IP5cMCUVFIo 4HvnK7BsCByYfpf3RgRIhwBtXD/FCGW/lymOcov+I/q/RKg0jzafBchRQmF7UeBW FtZi+yqeQJsF3QvP7ETqNA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hfy84k9k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:56 +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 514AcOQv029134; Tue, 4 Feb 2025 12:01:56 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2173.outbound.protection.outlook.com [104.47.57.173]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8p2w4kd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FShoh/GT8H2gqAQhfpCI56vSrpaEVwyVc+s3onObGWKZvk8LkdN3ozN2NkCJVgVphwhZw5MFC9BCycws+QiJX7/yCJ0FCEi7Ufw7RwbK2Ka6QbkUdwm7T+Fhn52SMSyNRQ7xBR6E64X+38etp+t3jvTT3zUNYFJXW/0JblOuikaemhpxPp57tw6miN7hoIJUw9GVMsFFhZIoRIPPPbwKR0DHawwXZP6aajfwBPPcVXsZc8b9YbSokc+Xum2VB2WeEJGo2/lYeD7k/kujSAb3J4NpX3jgng3MDIgnOnjv8nFRJ3TmNrza/4qsZ0/oBreaF7lQC7UgLiKn/QJB1Tb+xg== 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=RRBEZgjOeDaG4fnGrj8fTp1TPFhBGnJIfie9VEcdpbs=; b=CJMwdSVQJYaI1KlbDQ6YVvgTZq9IXOw162m9PRjfUnoQkN567TI0BtUpExiyJgphAsCeY0QuG2aZxhOqsw7vLOFSf+Oq3PeNb7ae33STEZHsrlSmnA1jYdzAHcsjcTCbMc2JaMX8Vgsz669QQeA0rkbwYL8CXiiPTHbRCEE9Hd58UHvXxxGgJEDQ0Tj2zGWj2uj0poQb6UYneSneM/LBUMHRtvWnIKM8JlilVmHiYIqxkXRCcX+uQud4ByUKtNwQhymjWbopMpbumk/KW4l8k/ccZxKT/kWNsHXGjtliaodYL5HBrtUQf86h+DUisRDSi4xvUrpdY/ZPdiyDc6UU+A== 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=RRBEZgjOeDaG4fnGrj8fTp1TPFhBGnJIfie9VEcdpbs=; b=aneSgrbQUBfLFWugdkGnNQvVwe5jZOkxp8nwjjq0oQgostq4BKTBbR/Ghd5NLvQmWi4sS/CEHyQh1P6x9bBe3H22Jm71GcxFlX6ePfHURVZVGaYI878cDyx2g8BDpX+pYK4zt61zJbnJ1qDfF6HSi0jH8KB7nUbLEvdRTtKZaGE= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:53 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:53 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 08/10] xfs: Commit CoW-based atomic writes atomically Date: Tue, 4 Feb 2025 12:01:25 +0000 Message-Id: <20250204120127.2396727-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: IA1P220CA0001.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:461::15) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: c3b88e4d-4c66-4b40-5687-08dd4513b6bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: HWVYafoC6kDdP9IzCIy65qr9imFTp6VCkMN+Vh4AvOnSJRW4iLeikWWMz1FyVn3Qae3xZBHwMMw2Hb/1rHbO/uUIvmyMUAovG0n+EEG34DBasIaRYtUK+UMllcUyvnOMkbx379Dt5EN2vUMEBvMLuDr4i/wOW6+K7IZXHi/U0Tg3w6X4wB7QgBbveWyVdt7is8aBJIwtSjGTLtsx5mmeF0XSDs5W+fHe0rKqzsWPwuih615WLoRhtYzFw3TUe4aHOqa/f7QdaIU0MZVxzkUnNQB904lIB31hOVXHgjy1oEzAYvA0/aT8iC+IYYyCvW1YlxPuMYIeGuhf9GBx9dDS9hKVk7/ghlOaOJwL9CHRX0D2jAJ6B5mOvvjPJN75sEJtQoy+b9Du2JL+6CObf9SgAdmA5a23J0WX+8oTdTA8KA8w7f0FhAOm/tO9pYqkTt9KOw7hZFbSqNHXyqB0Fnu8Yx1IqGj9zRfmdxNQ5v0u36Se5dVx5h+RrEuIr02C/xQG5P70Rv4U53YoVals1PHIaJvDym52YUXi5vSSlxNjkX6ID9WI84UeB5eloFonHJKFxhojKqFlxyjnBGGH4YxafNRdHrAhv8UTM5FfgUVfaWeUAOle5iFMOdDaNIBXFd977SZ3hAeUS4AV+6sz3gq+P7kjVPSzIjD/UfP6f+lbQ/8GMiAi5ctdOn2UC780k4W++TUK55BjSAMkAAxy2Sa9mUa1Aixw5cDAGwC0UCt6Tk9fxyMAJ2xByBpPg3eWZoyiABE4Sc6IYIRszQUCqzAhVwCVSKIv/tszM87DRyRsOr+C010qxnkJAm/lLsNA/6GFZZ9c7NSHJVub5wLcez+Y+ciU5U4elqPzX13TDHGIPVh96AyFQ9VUt78e4EAh4ZOBik/QePiD3tZsC78HurxE8q0ftQtkUTjOiaxzuGxg04W05fKIlPP1D20EB0uyqxJIwAxZhq7YBOhNtYN8xYtNp7Z//uw+lTytaopKLSzJqhuAkKLaSOFo8B+KLuQ0cG3xluG9qP22wyIzhhepc/3pHfn3f7O/0FpkvN2NY3nvm6yQ3EtuwHiiQAsDm1iJJ4KvpBYg9Hr4gTHWFfYhBVKOk4zc+yTRBk2KiNbX6bqSLTt6CPNwWzTKSkjmywjqMxNjhRUyiKiRPVdf1hcmlj4DE5Uat/tS2rj6kCZes1H+JUUTe5Kuih8RqY93xIMgUGN5opZ8mFHH0gydd+m5mLZD4BM9aTz1wE+UBxuukU0oblmeM3rAb/W6tjm3p7iALtKQqVnBrrv72MkTrS7RhmRbvE7nia/228UYtS4auN6KpSDq0y/LXXND6jVQ9DJ9tFgzi9vEKkzhJI65Wi7h7/Bs+8TMTTB/eskh1b9J5S6i6V9uZX2HIkSyff1PQ+HHqai0 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JqLjC8/D62kBRQXIChPZpZoRSIeqa+lllPW7XoPfei2dbvP1VTf+gJKeq3sgsdtF8rPb5Eom7lv55Dj+0MaBhZS6MzkgVtNTfX8IO0QqeiO/y4baWyQTEAX1LOFQzujd4E5DUKtLPBrxI+0OxLzNGpSJ+N4CvRPq7QTD3FeEnr+hCtQ04MmQcQXEQ0MwDSWyJMCMxwpb/g1rNDcAc1xRDmKK1QcAyszFIWkb2y5P8F9GF9x0KryBDVqtRzN+QsLSKFoQKu3XTvGq1nLBEtDJgidAMqeMf377/jS3y+2W615EzK12X1MQbBGJ/wxoWDlYJD0bnMK9j1dzkV+QUWly5toSVIOicqfE+t2GKpSxq4P2bI4VSey/e7sMV+rmu364sTQNWWsh1VVwQqEiDvcNbhzGId/0ydjYRF9lPGWdxxq6Z9iIwpOPY2s+DE22Y38QpqewzXTnq2MD58XJRYNDsLKMiUWJzZsQHX3mfLxbjmitLpB9yinHV4g2XJJE1rbOtBwvXX7G7DNycIP98QNOP/Q6ugh8nhusrpFCegS5XeVDo9tb+Rr/zssCbcf73sRouDP8nwWviid0UFb+QDDGlOnc/416ZGPlUVaq91KkV/rsLaZItFYUK2qAGBEoEAE5d0TBOwqdcgLaFcYU5Q8QvLunSmYMV3JcVNtvU/L335NVyysC0ZjrpFjmCxJ807wlaKF33IHeHYiY+r8TE1yCdCYLFgLJFSjBYDX400Em2vA0v8DBhELbcJEMZCqZ7a1HJs/GdKp42/3JMc0nWS0VjkUtHKXcmLl9S5f24xYJQojjoV8dzJeqLrnbwhtnFOYhei0crEFSJ3v8eZachYz35yxBcBEkQLTYowcSbGbPQfp4hy8+expBSwDbxnt8SCPKGD++feDaia9ChK9q4l+dHG5W+SKGTRVfwBarNlWaYsIp4uTpCZggmKbNbrjhBw5Z3dMCi01Lalcz9ZUe9+gZJuZ8RB5L8XK9eazuOcdEDH0LBeuqQJl0CHt5sjEPLPrARDWHjYQQbhjrjdGL91EKKVn7Dj/RhmZrc7IOXg7lqqXFKo8hKE/xpPuCEdyrCrXfWMFh81Cg9jrpCYr1WcaeAZpYXTGJzmZtX5CsfMC6QVNZn4hEgYYygEztk8Gua+eDFQY3mPfEvERnR+a7iYB1cqhsXxgI+vWwORBiF48guBRrC2J+RSLh9OC20hHMzyHtxT9YJuuln4xm1iVC9UaOteJfLVBW873BRqwT5MNEm1mrVtsbs4KZmzy7cpUGET8BxHJ77dFmJRuIvtGSJyvYN+eEtku31/VcQSQAzaqYpHvGSn0rGTmYLpRJoGlQ7LdduxLUpjYg1b8v34ZRvyqwvzehmcs3dPn602wrEXb/dQrOalayJgPO7IthdRYV/HIfNkozp5BsrGZXDRvHbSMuS9WQIHHJ9dr0dSy+w6Z/aNg7SdTHWgcjX8NXIVUEhR8jNAdejQIZAOY+KFF4FHhn/UO5gFrzv8wJpItL3eCgmGNdnrr9WzoDXk1TU2b41Dw423sB9K1vitldh5C/StDD/0ogi8Q+VFJfYW8YjAICQBaOoJb7e+15ITiRJ4MrRbqs0NDGzkXH/vS9rx4j1Qte1w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 9hGSuxETYFByWWV8U9q3aE6xiUQ7N1cFLdWQgi1vNml/V+J+XGhpyNXd+f+Z4hO0J7rpoOo8oIzO9P4Shi+W+exTzU5CP21ym09sSoFuWJATCaJ7k+vMhKrwNGCcnPNhXjziZPriVxSr5oYpDYpwf/P+Ml7S27Q2BomTo67dvjBF4CSuKZXxaLFaBW1zM8WheeYAd1Uv8C8173iCuNWZaM5tgQ+yvtvS5Muai0ClKpA5WOBQFz1ulpWSbIgOQrU1pau1PlPPE9JLXJbnlTz4qStmIuoIDcJ/9pbByqsU9JXa0yAlHCsCQGjVci3vMTnl0mbibGNp0GhW9qWWlkNRV5weLNTXt+xQfvJ/YWTugrOISBAjnANZyAlJVZanjwubug0bJtkgabupgtnmXEqgYas1TkCO5SGR7D0Y29sx7YsUAnfdICd4mahXH11NT1l1p2N31tEG/RWvXdkD3wHlnP5lveRWg8BbMA2UCFTKJdLjfZcO+VobUv8IeoR+CtO2hc8ULHVbHSyZdOMeANB2bU5cABdwEWob9b+DMV9WoHiMp7xo1fs+qgmv3GcofC5BwTfAWwtQ3v97w7Kk9tGWP6R2clJpBu92UBy4n3GdwAk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3b88e4d-4c66-4b40-5687-08dd4513b6bc X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:53.1102 (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: lzhD9oDfk0U9icB34Ba72wwnBkzS5O8l5Ms5KBjLTI9YMhZFJC619drIVV6oMDlOQzoHw91d9mDvBbbfE5Gh5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: rHjMy-pvDVScubyChWvqocEaSNn-1bFD X-Proofpoint-ORIG-GUID: rHjMy-pvDVScubyChWvqocEaSNn-1bFD 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. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 5 ++++- fs/xfs/xfs_reflink.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 3 +++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 12af5cdc3094..170d7891f90d 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -527,7 +527,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 dbce333b60eb..60c986300faa 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -990,6 +990,54 @@ xfs_reflink_end_cow( trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); return error; } +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; + bool commit = false; + + trace_xfs_reflink_end_cow(ip, offset, count); + + offset_fsb = XFS_B_TO_FSBT(ip->i_mount, offset); + end_fsb = XFS_B_TO_FSB(ip->i_mount, offset + count); + + resblks = XFS_NEXTENTADD_SPACE_RES(ip->i_mount, + (unsigned int)(end_fsb - offset_fsb), + 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(ip, &offset_fsb, + end_fsb, tp, &commit); + + if (error || !commit) + goto out_cancel; + + if (error) + trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); + 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 diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index ef5c8b2398d8..2c3b096c1386 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -45,6 +45,9 @@ 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 Feb 4 12:01:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958964 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 E5D8A18DF81; Tue, 4 Feb 2025 12:02:07 +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=1738670532; cv=fail; b=JeD2eUkfOyU1YPwF9554M44NE8+ScrmpNcTMszbfVcpM+GTC+xA5FoOjWT9Q5FhHy78OeZYoIeU4YNPCg79a4AIHG7OVJyMP6WpSf86SZMaehldvVhUNVsr/0SeFY0jbOkqGnro22ZqkiAaI7QpfSlAjVap03IfEE0Ex2L0JHQI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670532; c=relaxed/simple; bh=ErG50P8og5AFdYZsqOphx/4qGsKk8E3HjT7vAJt33iE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Rq/52rPzi1L0HQGRt5SYFNJpnPTAIw5TeVZiUKno2u9vQb8KbgfXG1Fd2m6D/YD3O+zg6B2r4x48C0Lqo47zsAlWhL1snrISGMeJNcAxvWyAfylMSIZNXqLZK4Go8yIWSRWpwFe4Q1tA2pq4FFa2QGWfjgQ3/gMSdwRwGYFs5a0= 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=Mefn4Vt1; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=FSRPqZQm; 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="Mefn4Vt1"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="FSRPqZQm" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 514BewRm028088; Tue, 4 Feb 2025 12:01: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=0lYuuEqLJ5DP4oFNh8ww3WHp/pQs+A3GJ6geVwhx95A=; b= Mefn4Vt1SOxapu6xVfu2HA6xTnnodfu7I+hv2ltN8iZKnhfZlZC2oRKI5ZgwLN6T 1H0L8LXsYRNQJnVqQN2vyT2zKLA8TbQWNyjebDsAqkatTtN4P5fh0IqE+Ke3ViDv F9YMSQIHzG97GdYf1rpU0O9wL4tHHWaZIfS5nGrzx92C1NMg008SmjMOhnKzxR/T uTFo3Z06GKjShJhWCsMmzxwEsfh4Y31+UfBmnBLDQ3g8IZ//3NnEeY4PkMalATRQ EGZ2MD/WYAvxrF5cezAMJzrmqprYCmDbBMzm6oFc3fvNkeWTEph6CXPWFXSzCaAu TAy3psrmrgU8c0HPIOpddA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44kckxgjab-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:57 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 514AcOQw029134; Tue, 4 Feb 2025 12:01:56 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2173.outbound.protection.outlook.com [104.47.57.173]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8p2w4kd-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HsRbwjhD11iLkfQi7OG4lATbNTDyjzz8QnBPLyIYyc62a90eFRYizCKbSwIsGoaums4Wh2GAj6AnJbNsPJ3rggPQV2wqzxdnzTuevA1Ry5qfr80Kfedi6jIVA+NPLJmmZGBB/szCWBMdEoaveQkVvTexbegotUDR4Rq2JdFQYAiUPGw5GC0OvqhxIRca7SfEgTH2SGhLpDWqY8GxO4802sPQtr0B+tthEYQeBllRAtuKdFOEFMayvce8FCqYQOuk3tq6e++yGDfPVCyjjd6IdEq2SVogRsF/UPEZCV19Nyu40E35KpnblOs6Yle/8yvoQXJN7lvwsSWxJHTMoGtdKQ== 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=0lYuuEqLJ5DP4oFNh8ww3WHp/pQs+A3GJ6geVwhx95A=; b=WxeVdkdhqTFDSIJpuDK+sie2nnJ6t8PepOLghheBD9FxgESqjogx5ANCa5qTZsstxj0CVlLW8qoHcUtP7EGwU5HOG2WtkT9S0PfxrbWf1B/QnojffNw6tPYjWeWgMdoHtCskGan3pV1BLqVCYRtI0hRWCq1m0kAVySZLOlRtn8DiOm2DZwPUQ0RMmKNmKGyyA+60gXrFju6hvXhegRIIdt2LqeVahIvG9cviwY4k05OzNwx4r4fRyrAGnsj06Tbbfh69i54lnwuwSMA59sycETUH02K7H/FScUXhov4MuTpbyJAINE1kMhRSKicdlt1HTBRggxXiJDc04e9TSl49dw== 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=0lYuuEqLJ5DP4oFNh8ww3WHp/pQs+A3GJ6geVwhx95A=; b=FSRPqZQm2PA0RYTGKlqpdlmSVYCRkWH4XbTh6/0lmRLXM+XZd+Vp/fcq9vdjPJY0dkXYV0lEN82g9O5P2XkF/cMp2/H0CTIOrLdIMghtzX5VU218B8/G8FSBj+BRUBk/5jvHJjKAzB5KqKXyitufIGv5UfUiy7vmI5MpIRIZVXk= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:54 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:54 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 09/10] xfs: Update atomic write max size Date: Tue, 4 Feb 2025 12:01:26 +0000 Message-Id: <20250204120127.2396727-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN2PR18CA0020.namprd18.prod.outlook.com (2603:10b6:208:23c::25) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: 945ed9ab-6eed-4907-6f7c-08dd4513b779 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: 1Kqm9Cz8xapO3vP5MZ45I7lZiFLle4a21cJfUc1Ba4r5Qoeq0/7SLVrkMqvbiFAX8Hrz7UH+Lv96XFuJiUaq99B3zSOrizE9GNPjyYOAOPjOEJVb0fj+l1msbZLFKZ8g9oU0MiUKi8dnNkULoK9H9bgHGwJmw/rS7rDJmB4oBa/z70gNRLmOUctY7EvecdNWwXOYACe/Kk9pyZQapypnJ+hpyubZaGhq92RL97XPbgY515BeWNchoVuTQmbUOR6hwPNEJJbS/LGK1y9yB8oeGvxAHPcg0RDfHuOX7o/DMCo9a1/O/vSHR41VDNxAW1I5Ua8tW8YLJky82iB313ok7fY4DFKYDYs9fq3djn+Bsrv3xGuJWkBbwYLKrmwwDxNdrJ4KnsvTL5NiNR6bD5BHgl/GNT22YSrd/pJb23r5wI6bO905BSCSZmGNMPfVJLj0OUW/hwNJ1yv3A7V18b6YG0GZhnPstmahejxNEpa/i71MpfNke6VrLq1sk9dKHKEMU8SOrUvfT9vgxGIjXmqxBakBWHDMB77ECkN2z7h5MObz+pw/ySHKWIaIqKtew9r6nKoGXFWacXeBHTDhb9KsQFZCBfKkT6FSVWtoa64K3X+Id4nU7/jtODhqFC28vY/CCSOCRW5jI8VdPjjmSjV7hssdt1amXDJvOGobG7tqPGIzZtmgdbldEER79i3qFZNnMx6Xc5Y6revaJwYCXbDiOH4LkWPZMvQ3bYE/Bky4BcutF4kTBNlYcHmgYgdaa65vMWliStga30vEr/BVdt4nl6yQ0MUTcJKSHry62p5DDW0jt8Z9calHwrHdV2Z+tFVD6j9wQx72H9aYG71KyBKIt6SlMYki7Tz12Ozp5Kr8dKd9ytkweZro27zUG3XOEUrsxFBfUUqEwJhtKsliGCMR3XaqjkcLhVcKim7Obb0kmWXV6sxqRxMtndjz3Anw5Dm+J8paMlqAKQfkZ2Tl7AqQPrdxp/RzijK6vZRiOUloAd7zHY3n+pV5dhwjmPdAjdQk4fmIxUAsB0b6wAOiqIFSh4oFNBLttMXrxcvTHDJiDHtwGgUkkh08ipSOisTYnCXyJGcP68X+Ve7Vr8t1XlQboIeflVDqjb2IPVPjvSh/+Cxs6cQhYDvZDDQvRRqGTGWYnkiBjY3WQ95Z4W/H2h2CPZ+dxRxMHvDuRJN1JdJy/GrTMZRLdX6f0gF80OL8NtNF3YMrMUt5FgnegJy+E1Iv14tvKhhfvBf/R63YgpVJTyrSbcNl8R5rvX25wtVTN0GHloCSMf9fO/SF8s+btHmvjgTgzn14PHmBMvmgnqfEgEeBljm+gcSV830SMaKXmtkbNenLGuHuDvxmvuw5P3Rqw6GuV9ZerRFZTZnBokeh3ZcjtLntb+EKRIFmU2bsfr00 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vGIFHC+7Ruz2lOpClVUAFc11qjJacbgOY0Z4BCTAD+SfPKR2gyyqvqS+smwVEVRCpgSiHeEJBkv3KulZikiHZsh2fSjgOrVg5xda5Hv1krVGXHOFjtSRUSehnCaPJtnzTe/dzkZLbjZe7JJN53jLhNICF0y42P1o2u1uWh0bUR6qVW7d/G6Z6UlhUsUUZHUgWvBbjbTXNkqU4Gv73zP4RAt+m/rqACwv6PfHV/CfWxJCatqULPkJbrw9oPqTTDCNY7FTuYJ+nY1nkwA8qSlxkU+tQKIODVfgayOexKNkIIn9w230AZlQYlhb1Mum64v2eGSCEk0LwOlceLj16DMPsoPcEBs/djmqOSTczaIhrwAQO9v2/5HFH5c3PJ0Q2d4wlvvc8x8HxarXFZ+Wg1CteqHEddcA8apLf8GvNXCYWtnzG+8pI+PumSf5DtVKMByNqnRNVc3gozXyvyvVzdSibYZbn+iMu/ga5blnX3EKU9wyF0WOLo5/vHyexkrWJhWLElUAolbzOCmRHcpLe40ssSVnOdW5UnZwkczGBed5MYkRXVxEmxLFpTxRM0L6Pe+sTdSC5lnciS8Uss9OGOdxiDHmVqa7UC+Y31Ol1OfGD8bYHoorRdZ5N3qarGP/PwOOUf5wmevuBfFO9DjjwIRwJKd5SCYSPDxVPIk1v8K1YXj6eAxg+j+FAfdWDBzT/pz55aLhpuBgRi/hJ/9QinozxNpHQDAvcWudf1t9tMmt2NyjoBWy5dkrNY4x5AZ6zzRQvkoJJxY/Z89QRKpMx3L1O3woJBFWPiEr0vUO1p8JKSIGF6vWO+KSik389/B+cNdv7Gl5iDi2ZKzmFGi8uiVNHeI9e1A64zwRzMRBJ71bKxLmitZWq56us+q5JPc+NkggAQR8aJ75rYcegJsYawU0/KJy/cGb8/jCB275f0kvwf76SXwERbFGPsjofvIlvHyxLxIwOkU0Ai4zFxf6WFoyJcL5b/5pnN/7B5drb2IamXJXOZomE6MMm6Usjs+NOV9NGSCH1+49/9KoUxAlcRAYgm9c+Wn13nMHh3zzAvJ5WgattHfknxlvjJwcX7kv2UpTZRbAILQdvAa2M4fjX6gddnyYR87dqM44yf404tt+kj75ShckDcFAl8VmjjNX1zYnREqklv4RUVByA2jcczM7jcT3yELxxX/O5a9RVOjvbyQg5z2YkhMqr6VFHxca98W7St9t91hzduLYmsj1CQq+rLl+zEtczSF2wsQkNPLbp3GSkLpOWfbxZwo8mwGLAYy33V1Iuth4UCHgu35CtslHhu7k1HV9oKdV8qGb7CI3bhHenuJARw05PoQ5cTdvD4mGQY6+rxjztv+l7H8KaNQPup0ue/mQ+63/KIIBvJstnigz+Cm5jtKG5lelH1uXlwCZm+hw1+ezm/oeLRhsIcPcCp8A3dOTYKy2dYLzu+hjdgOOXOp8vlP5chB17j2VbnWia6idbmUZkZ2yOMPdI5Ous7ePjjhVguX4dGMABsyFh7MjL+KTGy+zn8VlW0FQmdMWiKMmQmztZ3cKn2pvHAhHXfMOGJrTKdJVpN+5NOUVDs2AVWUj7FtmoyRuDzrHlOdoE3jafZwcmLYdUNZFfFAlTQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Fag2znFnTv0cUZRDX3bSZ1QJe43/AI/gvypqcYMCtLeRVAQ/gjzx6eG2RHPUU7UCLeVt4rCxPT927PohG5yHDQRIkavhGsp1m+BmLwXB3z16JCw/z5IS9oiRkMm8Hq1sYIP65lnIgpeHL7pNRy/4xF1Fcnw6mAN47Xvi7MJTaWHYx906uZUJKJK5pkWAapTj9Sv45/iU1OjyA32h2nH0REHUM+46+sLCngRHU6QIXrcbGQexQxcpv1obtfkSwO0JcSqbfC6Q/52Eb5mjPH3ewYlODPp1n7PAMac11M2x50Dnt7Hs6u0lohSjvQkqbJVpsKaNbY4Vuqt2ZYVFeODaheAmBT5d/VdHv+0DgirvBkyn+LcMxQOvt0ap4Hhj6Bt4l8ZfLYi9eBuSZrjK9J5IA4sPFqAiGBDy2X9ZCX+XJAtbG47Jvvlc0qvFZbS4GH/At0LpMfCp6fAzbTgEyiAmi5v9rqRfQFZA0ybmRwDVsrF1mQenbxT0lodVy1JYd/1I0S+6kS9MH39rJhVwmL3+OrudLfWA0b+q11saicjDkLrNJqylS6ohZeLAJIbIGtyofS+4a8m8yr0iNIRomHluzmhbfwV4J71qG/bgSQEaEyg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 945ed9ab-6eed-4907-6f7c-08dd4513b779 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:54.2756 (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: bxjc8vkPBwwBw8QYQqwOqDP0OLI4Rtyn9pPxebo2CsluBPGhJgCc3WNPGJcjt5GTYI5TpUPwrijk1Qloqhgo+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: m5wOJ231D3eaQUl0IKl3qCcGLo3_mQL3 X-Proofpoint-ORIG-GUID: m5wOJ231D3eaQUl0IKl3qCcGLo3_mQL3 Now that CoW-based atomic writes are supported, update the max size of an atomic write. For simplicity, limit at the max of what the mounted bdev can support in terms of atomic write limits. Maybe in future we will have a better way to advertise this optimised limit. In addition, the max atomic write size needs to be aligned to the agsize. Currently when attempting to use HW offload, we just check that the mapping startblock is aligned. However, that is just the startblock within the AG, and the AG may not be properly aligned to the underlying block device atomic write limits. As such, limit atomic writes to the greatest power-of-2 which fits in an AG, so that aligning to the startblock will be mean that we are also aligned to the disk block. Signed-off-by: John Garry --- fs/xfs/xfs_iops.c | 7 ++++++- fs/xfs/xfs_mount.c | 28 ++++++++++++++++++++++++++++ fs/xfs/xfs_mount.h | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ea79fb246e33..95681d6c2bcd 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -606,12 +606,17 @@ xfs_get_atomic_write_attr( unsigned int *unit_min, unsigned int *unit_max) { + struct xfs_buftarg *target = xfs_inode_buftarg(ip); + struct xfs_mount *mp = ip->i_mount; + if (!xfs_inode_can_atomicwrite(ip)) { *unit_min = *unit_max = 0; return; } - *unit_min = *unit_max = ip->i_mount->m_sb.sb_blocksize; + *unit_min = ip->i_mount->m_sb.sb_blocksize; + *unit_max = min_t(unsigned int, XFS_FSB_TO_B(mp, mp->awu_max), + target->bt_bdev_awu_max); } static void diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 477c5262cf91..4e60347f6b7e 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -651,6 +651,32 @@ xfs_agbtree_compute_maxlevels( levels = max(levels, mp->m_rmap_maxlevels); mp->m_agbtree_maxlevels = max(levels, mp->m_refc_maxlevels); } +static inline void +xfs_mp_compute_awu_max( + struct xfs_mount *mp) +{ + xfs_agblock_t agsize = mp->m_sb.sb_agblocks; + xfs_agblock_t awu_max; + + if (!xfs_has_reflink(mp)) { + mp->awu_max = 1; + return; + } + + /* + * Find highest power-of-2 evenly divisible into agsize and which + * also fits into an unsigned int field. + */ + awu_max = 1; + while (1) { + if (agsize % (awu_max * 2)) + break; + if (XFS_FSB_TO_B(mp, awu_max * 2) > UINT_MAX) + break; + awu_max *= 2; + } + mp->awu_max = awu_max; +} /* Compute maximum possible height for realtime btree types for this fs. */ static inline void @@ -736,6 +762,8 @@ xfs_mountfs( xfs_agbtree_compute_maxlevels(mp); xfs_rtbtree_compute_maxlevels(mp); + xfs_mp_compute_awu_max(mp); + /* * Check if sb_agblocks is aligned at stripe boundary. If sb_agblocks * is NOT aligned turn off m_dalign since allocator alignment is within diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index fbed172d6770..34286c87ac4a 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -198,6 +198,7 @@ typedef struct xfs_mount { bool m_fail_unmount; bool m_finobt_nores; /* no per-AG finobt resv. */ bool m_update_sb; /* sb needs update in mount */ + xfs_extlen_t awu_max; /* max atomic write */ /* * Bitsets of per-fs metadata that have been checked and/or are sick. From patchwork Tue Feb 4 12:01:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13958966 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 8C77E20DD60; Tue, 4 Feb 2025 12:02:13 +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=1738670535; cv=fail; b=ZRZxhEmspFlPAw+AHiXjE3/e2Jk8+4pJevwlgdlaT/sv9dkyR8khXGnsYzkzKeJj2wqHWoDpO5cg9bR9xPF+sMd/ZzWLRc84dqjyvSvuVxQHQopjq/UdllDUCisC+TrD19L2V3FxhQ9IRjEt8mgiSRo/ZudDrG57M9T/3+C3Hfc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738670535; c=relaxed/simple; bh=u5mxsLX5hla22/rJACVa2GSJbhhPTPwcbChL834OUhc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=VFyWMYDadzKl5d0Y0F3UjzNEKNiVJOJR/A0te6gCFoU9rEYnguHv6Ho0fmCIZ4igrOSa7RYz+5G4iCayoq/VNVgDm+K29ldb93QMP9PcMj2AZoVdbJVU9NCtlRKQdVO6It6Z/FUSjtM5AL/yXYhBCjqFktJECJ9NS8IuUzNYcPA= 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=oxxM/Lkc; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=DtuIdSJG; 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="oxxM/Lkc"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="DtuIdSJG" 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 514BfZIf010983; Tue, 4 Feb 2025 12:01:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=TugdJ2Bg+DyAyFUFXMhdpYGkMYSabiuNO4bgVzO6LTQ=; b= oxxM/LkcC5PbbB4TPA98/LfUBbEVfBSZ7Pc5iAaLBNIiQyWI9uKOmFNJiltGIoj5 /NRQ0bGi1KCgTxziI3Okt9MozF71FNI5/Wny3WSZi3P81RaGp39HXC1SMOvmrnjw SuXazyIt9SljB3GGc4QLQnInSXBb5HMkpIiz9I3jbs4gfLw1ANyo1ch1wykzV4ZO vzlYQhf3e//xQk0cgVoMUyMHoZMaP60OLxcj4izWLWuIozvdd6VsgS6073zmrlPc MUcLwb78PyQhjXBJnbmhGDz+r9qpchp6Db+96bUB9k1ONGOmxtDJ5jjkRGGWKzyV gVDenqeQQoSNxDKuP9kVMg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44hfcgvrun-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:58 +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 514AcOQx029134; Tue, 4 Feb 2025 12:01:57 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2173.outbound.protection.outlook.com [104.47.57.173]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44j8p2w4kd-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 04 Feb 2025 12:01:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NR/SMGmRvIt2BCavsG7fBD14oZZo2aOGNXRM0jEqL83kjd4dPv7aRj8LgxyEpgoUFItS34bwdcBcsd52RLZB/ehb1+audBNDwguN+m2kLrVOZuRctKjSr+qrNfdT0XApPe7IPiObbsqng5RQ5tHLcXlKt7noiIsSER7foR7KKD8dzG6ovB78mJnGCkl8wqOzP/knWnSmWUFG7ZxLhfh32ReF7+/R1+9GqriUW30A8GF6OFBRbK1WQ8ey0v7JvGrAKt34N0TiCq3liKORwAbWIL7+9tbzMbyBMXWk5bmMzmH0Cq8FBBp2Zin42kyGnKvuM5tqEq3qoO05cRNGPH4WaQ== 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=TugdJ2Bg+DyAyFUFXMhdpYGkMYSabiuNO4bgVzO6LTQ=; b=Z0azEK1FK3ftE5l/mnTf7gkrisjVT96Yh0+AINnMzNshzVHrD31xX+2QXB7O00UK8OxJp46ITI5Aeriwl2Or84D/wia+0v5IjHpnJDmKXqvpz52Td6J3HWVEuo/E/D/QLOs+8y9GGui2gS/SmNYRbc2YcAC0jSxXWNLHRpp861pWlngMvNqWLJt7+RzJYh+n7vyfMGttYKlOVhV5vm5aX93BmTkkLnTxTj3YgoG4sntSdxBthLO9kjZs4L+dahgE56SFYpQLe41AzuHolrgubyvBkhi7dkJ2jyP7u2mBXZJlueGs7e309ejFccspKE7EZBMgxXmtM/o49i0Rb24U2w== 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=TugdJ2Bg+DyAyFUFXMhdpYGkMYSabiuNO4bgVzO6LTQ=; b=DtuIdSJG/SQOsgnXKdtRb+iIH+4aCQdvpaEwNYGa1yL+RsvwcjUGaItLkz2eRcV1347Hpq6ybULCUEHRORFiiopI7LKgkVgbPG30kXW88iXPtVrm2zCdgB6hBeK9/VS2LR9wrZBJGTZipsqtSPfe8Cug06/dbnKTAtKYzAWIwZ0= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB7648.namprd10.prod.outlook.com (2603:10b6:610:179::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.24; Tue, 4 Feb 2025 12:01:55 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8398.021; Tue, 4 Feb 2025 12:01:55 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, John Garry Subject: [PATCH RFC 10/10] xfs: Allow block allocator to take an alignment hint Date: Tue, 4 Feb 2025 12:01:27 +0000 Message-Id: <20250204120127.2396727-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250204120127.2396727-1-john.g.garry@oracle.com> References: <20250204120127.2396727-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN8PR03CA0015.namprd03.prod.outlook.com (2603:10b6:408:94::28) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) 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: DM6PR10MB4313:EE_|CH3PR10MB7648:EE_ X-MS-Office365-Filtering-Correlation-Id: e21187ea-4455-4c47-2322-08dd4513b836 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: sNPBBF9a6+1Qqz/35XUYLFkAlsEtmI1Ci5XnGjV8HzHkGYOAFk1LIMBtIAVO9J0OH7EtXF2hR7MkYhyJUliAmK0VKBPvIxmxSNnHus/Wv3MD7Ookk80CNUgHjjmVZojgvgWqa42FWSbLkrYI5NuPPPSzKW2rie9kb+QxFkkLgFqvjx5axg/dGUo5ROtQ+4QMhlStr2/rCWcb+1uOOXdazsfV2FM4jNMRLidYhQefZCQfxmt8hgI79zAepj4aoKMcbhhen9ZHZbK80QtVK3nHDzHSfUpZ77/v4vQl2Dbrjb5MbudvxUiU72cHNZvU+U0F9sYbenuylMXz8Gqxxke+aCF4ARECSLKvQBCWjILep6Wk4aXsj9rVo3Kr+lslkirK3YC4eNdQbPicxqZLUkjAvaG59YTBq18/UkgikWS42HX2g+ipOTevtZuIDK82SqPjSJzK7qlk5SbZCwTrqckkF9UvJPn1iGcPndBoTie0W0OMVRgsZD+RcQ0LHs1Q58mdl/roIyxiRuhgXnDQkzwRcvZYURiNc+wrV8WN0yINtgnpg2TVflDexjSndpKsC6MnbEUtrnNfqgdIP3cOu6zwnZjQFZ9m/yxKIFCDCQH3T4sbL+CBm+us6iWEqzGdV+2Q25rnszGhnf6zaCK5tw80KqH5H3yL7itWT4zKZ4SfVeFgzDaLMnYKTiOzl+0aOc9BiQFOVTmf3hlm0vPRhtjo/8RVKUQXhHd1h7AgVtB/BFTNyNucBL0FzCxmqJfFdB8q88X78LcXktiWNYYndwlqBebz5G8F4cwSLyd+70ZmZHHPGeioIBXeOx9mr10ee5YWbl3VcBfpsLXd9+1/aejgxUL2JSGxz0qQx/bfvXhO1Mh5VEK04e6BktOuBXTTc+tzYP9qasWlnlLdi4KAxRkk/9QBhJXrIXEXT8zArdY8ssSULaY5Nblccg55IylY8TeNm2iB3QpdHR3ueZCwmgxwoT5efNo2P86PPE4D+8tLR2214VTJpg6KpQwFrynFjk5uY0cz5zHNpwwEgDajEbmehzE1EeCQsptffnWH8eDjGe7ETFjZlcWo77BLuA9T/1oWDUJAKv2lhgzQSdv8vLOBNjBPKxqIHlF29g1OdV8cdo22qS0a8f5Zj841YW0D5tLq93w5CAo8u9jkApntyLJIA3bJ/bitaWgjQ0yfICMLmkBBReqKRNlxNijOQumuptvANJU/9sUUq/Unr9tfvn6dKD0yXEFlmR83Qq+DbfsGv2W2ELEZmd0jYVDGK2W573F/R24lmmJKYS+JwvQDdrHE4jjXc2bqsHJTRqOqgd2eWm3HtH5Uksd5V9p3oHgbQTSnGb41yKTfYT4wkYOMhCWL7R9njKWBuAurcwGJnH3D77HBecVZ8PzxxeJAXaZ3+Txd X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: viTC76PNyUH3xogp4wiRQhRMtK8pXFR9+ILAABcdvLPukUckj4Y90F34+x/ypLnU/5mi5JIqFbFxj7ioj6JY1xAVk5XJuncFDFemxyf3b6EknSPWx+/qDcOzattiqDeyFnEtU1LzxMIVW74WjHHCJ/YcqzTg3IG1BFXJvgOgs6GX/arPJ2UbIYozHtNsI4Iy6qXFPD7iFPFWCPTcsai+M+TadxF2DuSPf1+aQD7e8zACO4X/VcJhHfNJQb2Zcv8xELjOSetya983reMBPfUTOoYFSs8RiLYlAWleLE1OpNT57CpevsbdEj4yIC0Kl8tt2agwo9i7GE8SGYhL/Cy38/Z4if/k2VsEWrG257fuHpaUdthlmSso5+/qVIf+xcJpuyS+4NAMVRJl7gf6dAZZtZMWy04BPg1PnbA/uz95+N/s9tAdJlLM0hu9mbR+OFVUc0vPqHEM99+RW4CcO1tA2PpXxaXcivw3XCketiTGpjDyp5N++IcfDH8vWBbMwXF7CfrBGRqa1ZYI6lWrBjMqKUdbpTeBXD5G3crrNPDt0ehTd35mwyuWId6Hmyf5Fm1AjVDGbaC4p7I8UFcoxGTnXNHyMtk2ZEPQ0ux8k26Ap00yq7yWRFmc3wpJFnhrBFrvGf0dYUG64ozGjN94knMyb8fgI7SirMFayLcbDojZ6dddU3S6wTPGpAqcFpegqi74jFkaegdEiwTN7n3e+UH4rN9xL4g+8fBk95qm21+U6R2H8v5pwi4i8jUx4TLNrM5YRHyazNFpcuF0znEHOiVkZQ7R7BI8SaVqP4EijS8uQygGgHUX9glwH4H8/9CAECFA8ZXf+0BgRMvLWsW3cPV+uDXx5NDB8t65+RGuOaQ2pA3V0vJhGLbJ2JnzzGs6yWhxgXtS+e23IcmFvF9NXsDtI4dpa0J6tyXiOkdwnbSRz1ONCxGgg7axOXiGB3RFC8raB4U5yBf43Rq1jY77DcpEfeN3qTv54Zmkhh9C866tNMmIylQ2G3FV8uw+gQKwRpABCslBRHNa6M8RTzhp1XD2lBCvxXfQdfbMGzS+ni9S2C49qeyL6j5IW9S1w0GuDHsAqeZhV3yng0sT7Kg15r2G2b/cOVmw1yFzGwEQDrGFqwldR9FZrHmdbRDyscGgWEzel0VJ+gwKjPDtWIgoVl5hJxsp7vCwhmF7VdmQsOmGBaxD+AraYE6QUYF1+EoAFoYCQwQCinMFVav5q0qBReQo337xDMCOfmGULeDJy3/TA8Sa1BXSuCHRv3B5JSAiYye38V/g8B6r3262BHaul2gSa5b6096/7j0NOKj1tsyKmSfl95qM258b7zQ9s1SpfMnVUTfUMykEcWRGdg3GFojnkGXOI85Iy2YIPjjjZm4Mglwy21/U6+J8bdJc3dUK1VIQZZ3TID1oqK6KxxfEeg5/dkBV33HfrLfTuPWsdxb7+EGE4IYYyD38nmrrUFkgyXl4EmBp17fMxAwOslGC5ZLhIFNlrsFtevgZEOP9hr27TovYJE1ACNjzrfRm+Voo0Mo8rwLQ8c39AonGDG7hCh/FaueoHSF0dsA55Db42ytYWcX1kM5mlUNyswJrJMDxVKaVaL2LNcb2AnvIYY46hsBKlQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QoNkKfQ+TnT9+88y1ZeaZQbGBy1GvaPPHQauwPaX59jlMbpdy8TADO0RW0F/VLpx7vbHAwDWuAQ/0RG+bF0M/ZhhtYdQ0zMWvvDrohhl6cCEWeFYDqLHcs2FMnBJitTfgDZRU9+l59iKlNzeOAEG8AzM+/cW9DCvAWBHlkfSki4ojtDoY2WKCSRdHdpUacL5od9b+5h5qDJIO/F+yl9QQRVKMaBMKJ90KpKUWmkxbsnydhwDXPRA/ex6boYyMzvsjynZAK+YgNXS5ofaqldTuelLUtOd3KhQufkqx4dk3Cuzq3yHrh8+83oIBNurseWmBXTGqPYMvqgxMUVBV6HhQv06FKfV4/3NprQ51PSQRLbCCSDiw0hC4U1XlZhlYA9eC5gjY5584BppP6nWM15cWD4gygZpgD8tkNfN6p/gF639F3uy7zBZUoAFcFBBoCAqKq1VbMPkuNRLBHGWdviOVaRKbRQ2KAmsBliLVDhu3/XJsSuWxBOGqTUzTa+SN7CbzW2vUzhWYn/jz+ZqO2Z28tPrpp+3W8aRqrlELnfaICkAMNMkk2FUjhh/wXIecY6UmcKx6C9YRY5Wv7w+XHXnHxDYGNPddjgUsUeVRbLu5IE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e21187ea-4455-4c47-2322-08dd4513b836 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2025 12:01:55.5270 (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: AsxHu/OC4xbz6QmaXbYeIDUaKGICjf6Vi1LNEBBaOVWOhcougwVxozZLUB5S89DUF/4c3j07ds6jZzSulglU2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7648 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-04_05,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 suspectscore=0 adultscore=0 mlxscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502040096 X-Proofpoint-GUID: Jvp-b1_HDeNxIdtcEZbaKQI4VapYJV7D X-Proofpoint-ORIG-GUID: Jvp-b1_HDeNxIdtcEZbaKQI4VapYJV7D When issuing an atomic write by the CoW method, give the block allocator a hint to naturally align the data blocks. This means that we have a better chance to issuing the atomic write via HW offload next time. Signed-off-by: John Garry --- fs/xfs/libxfs/xfs_bmap.c | 7 ++++++- fs/xfs/libxfs/xfs_bmap.h | 6 +++++- fs/xfs/xfs_reflink.c | 8 ++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 40ad22fb808b..7a3910018dee 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3454,6 +3454,12 @@ 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); + + if (align > 1 && ap->flags & XFS_BMAPI_NALIGN) + args->alignment = align; + else + args->alignment = 1; + if (align) { if (xfs_bmap_extsize_align(mp, &ap->got, &ap->prev, align, 0, ap->eof, 0, ap->conv, &ap->offset, @@ -3781,7 +3787,6 @@ xfs_bmap_btalloc( .wasdel = ap->wasdel, .resv = XFS_AG_RESV_NONE, .datatype = ap->datatype, - .alignment = 1, .minalignslop = 0, }; xfs_fileoff_t orig_offset; diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index 4b721d935994..d68b594c3fa2 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 naturally align allocations */ +#define XFS_BMAPI_NALIGN (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_NALIGN, "NALIGN" } static inline int xfs_bmapi_aflag(int w) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 60c986300faa..198fb5372f10 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -445,6 +445,11 @@ xfs_reflink_fill_cow_hole( int nimaps; int error; bool found; + uint32_t bmapi_flags = XFS_BMAPI_COWFORK | + XFS_BMAPI_PREALLOC; + + if (atomic) + bmapi_flags |= XFS_BMAPI_NALIGN; resaligned = xfs_aligned_fsb_count(imap->br_startoff, imap->br_blockcount, xfs_get_cowextsz_hint(ip)); @@ -478,8 +483,7 @@ xfs_reflink_fill_cow_hole( /* Allocate the entire reservation as unwritten blocks. */ nimaps = 1; error = xfs_bmapi_write(tp, ip, imap->br_startoff, imap->br_blockcount, - XFS_BMAPI_COWFORK | XFS_BMAPI_PREALLOC, 0, cmap, - &nimaps); + bmapi_flags, 0, cmap, &nimaps); if (error) goto out_trans_cancel;