From patchwork Mon Mar 3 17:11:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999259 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 E4E4A251796; Mon, 3 Mar 2025 17:11:41 +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=1741021904; cv=fail; b=evZ9PyH3jKCsML3qZf+ciMq/+37nP1bjD1asJN3z5CHm+zFB1aAyvXfiGcKYFdmj/8qHn/2wA8GbxD6aykpPEJK/HaiIr3ISUCTURcxT5emJVhzQYxMv2nxqYEiXIxNGCKRm2x+g5heAxMFBcPSmrndc0u4pn1EaR2dUyfio/cw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021904; c=relaxed/simple; bh=5rc7y+9Q4Uv0CzoCMnMFpX9taqnBGuFdf4ccQMqZsD0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=YofmynxZkzOWk02dP14dO1c/GoJwmcUsKyXkXR1POFE5Fp3ICD+M8YAkNgzgjHv1aYugaAjHi51AlzlA7dWTHxxOmt11eSiONCii7G5EV8AiIgDATyNlnyV5C5iow2ZEKhTldQNxpEopvyUVDP0pkgCwcRfi9TURs3IFbRxIydQ= 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=iyycfIjs; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=xUU87H9D; 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="iyycfIjs"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="xUU87H9D" 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 523GP9ON006971; Mon, 3 Mar 2025 17:11:34 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=wW+iH6Y6zcSlX+jygh8CPOrH3MA3jK2pXCc0UAtbv7w=; b= iyycfIjsSsNYQp/YFtuc53tkx8TYN2rr8iTAM96FjLfJoKuREmcS4Sd4Rx5/F2Zw WANMc0+Uw+gEY4zTHV3/W8qgNx9yD5f5FUVaAmcK/k9G6d90lreWi6yWorqvnNr4 nzqtH7/0ihykYg83147wqPW10Ulyk+4dhpTQnjocr0F55lgwG3Y64xbt0gZpIXSi xQmOad1Winy87wVBUiXDf2sqFKB1MvkCn7iD9bCpFHnC7hAgPlaLI7/RNMWKPcyo k1d+wEkwS0YeTXW/RFp0tHbLlg4z/U4FsoGCO1NrrAyPxKtPtJC5pQUt3JHceBF0 MsIkU/22MTSuQoHOTPOG3A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453ub735w9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:34 +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 523GgURq003162; Mon, 3 Mar 2025 17:11:32 GMT Received: from nam02-bn1-obe.outbound.protection.outlook.com (mail-bn1nam02lp2041.outbound.protection.outlook.com [104.47.51.41]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rp7shjd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cEQS47NzVJY95iuPVn2199wolKWuGFgSj87Yp2qsixdJXPC6zPEo0cKaIReKTZzCJM2XmP7tdUTLT66HczF/5poZxtMyiMSNypcv4HgG+ocOwtum768Xs8SAl+/KNEVqCOrtGiQJzUWpT5gD6Rxhslk9er0FKcXxZjvHcAMOVcHr3y1eXaXnBBp/dCfvyEnNx9fpKtUPGh9NP//ay8A4EnccVNlBzT14ozo5fXhpzHEKOGAkMrNZjdX8PnvCsWfLc5bHKuZofnaN2z9/3BmaJVAC6yWi2n7PPlbG8dKEU+xX/5ljcHYSKqusVqaONWNDlhyzcbGH+qD9CONjzVuusw== 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=wW+iH6Y6zcSlX+jygh8CPOrH3MA3jK2pXCc0UAtbv7w=; b=cB9Epalu0v1ClkrMYeRmyfKaFa0dho1QJaqBgA7KR3+xqfjbbRr4uQ9h2nfxA6CD6CnJBZu8AUhSTMlph6yigUCHc86b3CIyrZ87/6wg8ZyAvJAav2zG9tVh885ZMfXAD4TwzR2hHCocdV05zaJ9h/XtJjZ/dAQjmAAQmsQKHw52J/qvfMtJ0z017xSAYRSvZkWOuYG4Bfjva2IBSAUK+ulGjMZA2Y/63ymJVEEwQRg0TQoIWY0nIMgFD4k2OUM1tKGi2APvXxvVa0iQ4rE4rk45tmo10NQj0T2u2zvsgS2ODMmxxkIae9qHkYXLlh1y/0HBb43UMDjOvICp7zxjlA== 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=wW+iH6Y6zcSlX+jygh8CPOrH3MA3jK2pXCc0UAtbv7w=; b=xUU87H9DVy1J6+YqcnwY+X6aMFBHU2jLzvSzLCl0e42GkBEnXYigWbQ9rhPjBqhIu6sGvpIPNNrnbeQUOb3M0F9PiskX4qjCdSofH22AmhK6aHWRVwqUN9a0SwG5reBbUVyROOAroPz0XhCV43S3UCjPDUYbkyJh1PzWKQmHCNM= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH7PR10MB6251.namprd10.prod.outlook.com (2603:10b6:510:211::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.29; Mon, 3 Mar 2025 17:11:30 +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.8489.028; Mon, 3 Mar 2025 17:11:30 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 01/12] xfs: Pass flags to xfs_reflink_allocate_cow() Date: Mon, 3 Mar 2025 17:11:09 +0000 Message-Id: <20250303171120.2837067-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN1PR10CA0002.namprd10.prod.outlook.com (2603:10b6:408:e0::7) 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_|PH7PR10MB6251:EE_ X-MS-Office365-Filtering-Correlation-Id: 2cc68af7-9286-4e98-35f1-08dd5a76711a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: Ln3NMJ0Z4Sm4OCQn1vRQK+wvNx3vjdU8WUguFckChb+StLecagFMBj3X0b+qbrg3YTQa1P+Bad5ccnLGXzq0PWcusFlEcxAm8RMbwRkDDCDYRAQJLLrKimBC82/6OLGQgB341liEdWGqTOoIWHijqIKKqfj6sml0CG3Y+WX2y0uHMtFU/6x7sqPXscCaA8JZzePwf0vC2+Exz+m1OicpTzD2iWkNtSLKMOgiXWfI3D73hbVCdz1hUF9JBrEPO9Q4y76LyqnJx0jwCHXMNaZmO0i6oSk3Bmkr+6ymd8otY2O33NffyYy8BIT1XoorxzpAnw7YNk2sGuPjPIHrnqaubbUiRsIWSvGw8LrfQVQAea1SepjVqPpCA9FKGoGrW/Z5qycrxVfT3+Gpw2bPjOzw0yy02IRJuTPt/DvcnNNGQPJIykKDzThpzaVnVIGXPTOrCmhtVo/ERmYQGsSeozH72LAn8sT70Li7c8Yj6WoCND1ZQY/E+j88fSX92LkrXc0RZ0xBP8lTtdX1BYgk9f6lB1+tzqBIevupDa4miqAWoRryhWO2rxtzD3Eere1KZ/RRI+Vr9fUYZXZLTXMFx8Se8OZyu1fm7Uvxw7K8cbYAj9EnVVy6cV2woYZxef8VYysG9vHWI0BpHtrvStphN+VmWhEJVr3D802YoB84lOy/U+b86tX7xsRnUGhi0oz8yaSNLF0GkYlfrE0MKSd5deavGYjdXH/XEmJq6UHyQ+6ircWyhU4cjtrDhXqaIi7VVAqKM/TphkU2rAIkCo6owICpmXQ5jWxqyU8FOq5vtb2Dr/p3rHX5RPyBoNSp7vZV5Gz+ZDr/DpmIDEgXEHVmaObBfog9/eRP66+xL2qKDs3UezSJkOnfFmNQ3osn4Dhx0cQa5Op500223N7ESrfTu4uz6P/Mra1EOsQopLtZqThcPVkeGMhZhMOPK+EnJk67fnPxp0T/zNjfrYWzy7s/bgd2IukryZ77X56RRzeF2Tjw1YmaGsax6dXa8OkiwuQpMpSMnF0KWvV1ucwmrWBc3G6yb62hYwEe3yb7/ZswFqdwmUPbUCiGWFYVJPsbzDbPFl09A+mErM2aERMuLp5S99MfrChwyH6PcyyBnBCxyMhYWfsPPqmIWKmg1RSAa3ml3qMk6Ra+AGRxGHyy89V5BQBKArPSd55DhV22uoWh9UYPwrlqxcm0MpEjDM/KAgERwkKtoDWoqI6MYKtf8KIhSUymdpQraUmugFmJuN0k8cZWciFllkvvSkBMGboTYpdECaIeUEi3vxu5/FvgTemxJzelXB09NNEMNFaYoT7YytG+XUWFED0K6AlsYXkkzLExPpIegNatm4SbsWsR+owhCkxx1N96SPrTh4rBtZhYdieg6nyGEDX3LdNedzjGlYrnKo13 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: IlpHIdk+dNdxZILk3EGFcd42C8MnWY0Ng+FJxSE9ok0R7svpb0i7d+odA+lvGk4VkWdcdLXNQNo6yBzc1wleoAL9EwZxzB7Dd1eR/ScWXtcWEIXuD3x7R5v+vtpaumrcJIqKzYnGJ1NKUtEQoLbUpjGgI2K2Eod69+7DprU25o+WqVH8/xFpL+OEAb0J/UZ5ac6/F8CZ0V+NGHfDLLQvLcltleTIaG03OSaUehTTyWSpuetaM25wgpvGrSXAUyLR8HdAn21X1ekjpwmfo+SpvnQz0L1TpqyjI+6pj+GHRXMvnB/HV/JBgyeCZLu0W/7GqqASIFIgS+sV46uvfFBT98Ss8Q7M392kMWFBGe0YNnVHa7QztBVTdbjqPGDWQuSSIyGL1qP91shro2NdFw90Q7eYkXjdTrgWMNrmgMLFGO288S9LWKl2DMdVHinAdkthNgzHEuxEGV74Ox9cDME5LFfeujY1pwpE/DvvaKF+Yp3HIypxp2us1OIYT82KFOaYMwaHEvHFZyMrSLvPwitsnaDcW405tMh/BahQoG5tNfke2wl7rbFCKQQ7CitFJrZUvx4AiKY/uWqQRJ5lsZnx3NJMZybajpLNL3GTu5mot5/P8M7pBaMxkbmFmvH38QeavNKdWx0yVbe1VFGevzJ+rdY3jIyT53ncyV7V/IlzfcMenFLXlDnmG3uVDZwSUZJY/E9RZrEj0yu9D+YrZrfaZUSUi3+ZzfqxLEfZ+s7zmnr/hhd+14dd4PMN0OgOCOgwoYErc0gOHrxtFWWoaz+Bu+COJdW98tpJOyB5w9NaerZi5BP0uVSxrLdmlTxAZcJcFVS9FZrgUV4yeQuitCSECg24ACGXqAuAf5ehugqYVAFL/oa7gdpWYAXwV0f9popIjZVpDF3h4WwqNlkTItxrEJp2uV03M24vnM0EiFCRNUnyMftwDjEJa+heIjbzAQMB4DP0TXvb5Tn3lyTQhm3V9oJcJfnp3cfQHTVZtzBudqABbQC/O8i2ktonIU9Wtx6kM9BiPpaLTMSayOVCGETuHZk/Xeigl20ac2vS5X28Wra7rfJTAQCcjVoV4J811/Xv0a0uP7wtwnzxArLp93wDsv42etbOy1vYQq71nwxQ4Atxdx04Ht67clU1qvOPMd+Q5Qr2mKx2xR3jEcXezWfV16SkWL1Ep4GamWyx21z+qdUDjTInYBX3ENDsM0x2RU4yT87kxpNsrE+/xp+5XWyQi9Rz8yTlKZZqat1NqMGwyBxTG1uscID0928tjSvcRq8ztV+p6wu/rg7tgryufEL5ZzC/GLmPAB90MkROUGAZMWnXEjTUvxp6cuLut2XJvdoSK/CONQ+pho6J3YfSmg5OcH1zmBiDclOcDOGIY5k3NXBRAgUX+VhXTLSgkQKlbpCzI0gLksHJKozLa4qLTnLXVrXow42p+r96QTZkz85f6vUduiY8WKGb1TdwIOq9jo9uIpB4bQpG8cxc3W5w5ZNEX6etxfNC84hwOe9dcXDdT+/BJHcurpjCBIVbclSixxFkt5tVcFezVLYEX62sAKd70h4AH2RKXfSqeD5BsyJTan7kmjeSzEcx6yUhjs/kOotgvr2UnRyKPCEHNSLg+iWQXg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 5ZJDpTTjnBHuHJyAtNceJZyXhfkLGNN01hk4+xRKPSJgg61H1NZek0vWWGA42DKPCidRzfEkKMbrjE+ejXDWOxGFERzihxXOu6FWIUMzy9SYLY61+FcTVyBvGCFC0L/OxjvnihLUpqBb7oLWAAk+iVRV8ZhTH+UXGo0LNYMnKpXAPvaNeBnh7WtSaQl3mEsvBXDDR1H1mffjDy6dER0r9gOWNeQF6oMNWWdyC81c+S9It15RV1lxjZB7SBrsHU+CjiumVa5Do6C8ZPsLNqbm+ALlalLfwW4ZeDA9WHaL5dOrQz9rVCjL3UmzcJZcWNkkn2zi/yUM0jz3q5ggEb1CYfvoRKcnnF8KTdNa9p0IB5qyxHtuLBfK98bYlBA2viRTVcyN4Y1KMqP+BH9TCIygsg5s6iysxUcGgniYoSYi83mIq31KeaqnYSbeD1qVwh7pvQU+XoteFF97YBKPSq+VerKXhxaqV3Og+Ema8tWKrCfI9LBelIELlLK2CMwbo5eyqGEIQP9dIYjKhJlgxOpGdZ40JkhpiAqecueaFNjrkCT0W9YJQO/gHODpspqDFFgIZI0+eubq7VFhVQ6ZbGJWIXGGGOUnQOFzpfsGNkmjg9g= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2cc68af7-9286-4e98-35f1-08dd5a76711a X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:30.8172 (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: OKdeCG3uM2tj2FIxVvQDl/G4/6OJ6pTNUN0qLthlQ5DnsIiddC4j5uPFk6ThureSXWo1IlhTZqAYO7reGEbiww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6251 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: bpxet-R7jSf0XUyqh_kdBZbm2FKwHNbi X-Proofpoint-ORIG-GUID: bpxet-R7jSf0XUyqh_kdBZbm2FKwHNbi In future we will want more boolean options for xfs_reflink_allocate_cow(), so just prepare for this by passing a flags arg for @convert_now. Suggested-by: "Darrick J. Wong" Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 7 +++++-- fs/xfs/xfs_reflink.c | 10 ++++++---- fs/xfs/xfs_reflink.h | 7 ++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 46acf727cbe7..2e9230fa1140 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -810,6 +810,7 @@ xfs_direct_write_iomap_begin( xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); int nimaps = 1, error = 0; + unsigned int reflink_flags = 0; bool shared = false; u16 iomap_flags = 0; unsigned int lockmode; @@ -820,6 +821,9 @@ xfs_direct_write_iomap_begin( if (xfs_is_shutdown(mp)) return -EIO; + if (flags & IOMAP_DIRECT || IS_DAX(inode)) + reflink_flags |= XFS_REFLINK_CONVERT; + /* * Writes that span EOF might trigger an IO size update on completion, * so consider them to be dirty for the purposes of O_DSYNC even if @@ -864,8 +868,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)); + &lockmode, reflink_flags); if (error) goto out_unlock; if (shared) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 59f7fc16eb80..0eb2670fc6fb 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -435,7 +435,7 @@ xfs_reflink_fill_cow_hole( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + unsigned int flags) { struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; @@ -488,7 +488,8 @@ xfs_reflink_fill_cow_hole( return error; convert: - return xfs_reflink_convert_unwritten(ip, imap, cmap, convert_now); + return xfs_reflink_convert_unwritten(ip, imap, cmap, + flags & XFS_REFLINK_CONVERT); out_trans_cancel: xfs_trans_cancel(tp); @@ -566,10 +567,11 @@ xfs_reflink_allocate_cow( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + unsigned int flags) { int error; bool found; + bool convert_now = flags & XFS_REFLINK_CONVERT; xfs_assert_ilocked(ip, XFS_ILOCK_EXCL); if (!ip->i_cowfp) { @@ -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, flags); /* * 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 cc4e92278279..cdbd73d58822 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -6,6 +6,11 @@ #ifndef __XFS_REFLINK_H #define __XFS_REFLINK_H 1 +/* + * Flags for xfs_reflink_allocate_cow() + */ +#define XFS_REFLINK_CONVERT (1u << 0) /* convert unwritten extents now */ + /* * Check whether it is safe to free COW fork blocks from an inode. It is unsafe * to do so when an inode has dirty cache or I/O in-flight, even if no shared @@ -32,7 +37,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); + unsigned int flags); extern int xfs_reflink_convert_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); From patchwork Mon Mar 3 17:11:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999307 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 6C37484A3E; Mon, 3 Mar 2025 17:29:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741022948; cv=fail; b=oPVHSHlO/AbjykOHsbQnri5hViV64Xo6G1s1g3NB1u7YJnx+BGB57Z3VdZI8PA58nYqDkc7COWF/YunZCXvtj4VQuoafF5+iWX8Q6h9ZlNQc0rEKK22Qb1cxFWp5vs9J1clurQrbjbwPBOAaOsecr3C6Qy8Dj20C5++Xcft0mrg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741022948; c=relaxed/simple; bh=XUCvi7W/wKRGllTerUhiWkgUoNDOdDFuOqAEQnvVbXs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ch+c4lAkUjMqtBdlkM/LNPMa5uuYjweuFWraDc439P41Y0lQxTsjS7XdehM4xwoNMvO+A+rKpL/CtypbGA3TrYvSg16FQG3fl82MCzAr/YfTrHqbUVHIG1B+Pk9+iBjzpXHP9QknKP4wPRkIcKlgMQ9ldxO1bTW3iSE4dWYPdZ4= 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=U4FccVx6; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=EySHJTR6; 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="U4FccVx6"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="EySHJTR6" 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 523GA0FL030059; Mon, 3 Mar 2025 17:11:38 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=MkvMvt99JAoTjPuUnJ0B2tU7ZIeBkXdjnWNGvQTsAf0=; b= U4FccVx6FUNmPgnPTGouiK6N1heOgh1sJtc5Ad0C6s/UfDLoEbhNE6Q7xRYK0q3n R0IMVHNoWt2V7dkzrsB6kSoHuaZS3CFhbKc6n5bDn+E74oYfDV7X3o92cqrzFYNl O304XPIWHd0fLFrgU4dcddE350dqMx0+++QSfuJ0LGZ0P/a78zWhjA4oQjgtz7rH G4MMDxnlrkHEK+PeTk9csMiU6VspW06uqlJAYXcBYxiNp4nhfsCtzzVW9AYbIojW 0HoUP7pZKGVV1ELYtka+KpZb5A9XEAXeeVFZkRvGlMIYVB2Z6aME4XOBFyJme2IV wuSDkIQXnGi47M0rIB7Cvw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u86k60h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:37 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 523GVSAQ039103; Mon, 3 Mar 2025 17:11:37 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2044.outbound.protection.outlook.com [104.47.56.44]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rp8g8yx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OZu1iwpVqwPeJoCWSlWCila30Z3oKx/16Kx5XpgAMRZ5CKF1RRdyQugBUlt4GMuuvVIvlY2xVfv+AfPPP5AD8lgOaWEKrpEXIeyAnmQImpdbrBRcf1ZbS4UbNSkDptK7UjjUsTFvssir+oj9fir+p/RBvFmcFf0UC750jvcOgcSIdPrWv1xBZxM+3n0cxbTZfRRoY3/NKCwlGXZc2w+sHilFt5MsGt+FSIhnxFSqfzI3a3bljiMASRZZIT/zFZetv7zKeIS1bNJPwlUHCeJ5MjPKIYjoc4wzqoOwEb37c9z3cLfcQPlSaBuPPfic7yHSpqwO1sva2VBpqn+wzKlMwQ== 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=MkvMvt99JAoTjPuUnJ0B2tU7ZIeBkXdjnWNGvQTsAf0=; b=nlS4K2LrWoWnjTrBSxxMj/P3Y9YRpXlThotghKnwIZPgb/lS9Rf76qubTSJyngLwBTcEeusMIjKi4iiPFzXvT70ZKdcz31aqfQAlPc6f6vWWRnZH+/CpfirzQEjubvS3puK7hSH40PI+q9s+QTVOEa24lqHCE8hUGxn/0auCgjlPPkdHci/1dZm8zZjnAD1AAQXDOGu6UgLW4yWaW+0sRodnTgXzyST0VNwMKKOA1tKKBLbXwV9D2Ze9eugJITSD0BPlQwvqrq7KeVCEo1jV3nc3t9bVeg/ncbmig3atLnhdTnsTjlg8BRS6DpGCawkjkcvr6Fqc0SjdL68QRAM5tg== 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=MkvMvt99JAoTjPuUnJ0B2tU7ZIeBkXdjnWNGvQTsAf0=; b=EySHJTR64lxJGcjOxZjzxNo/tpYAL3g4hxPmXiWEeKj9sZdnapcFJaonM4OXhp0xKfZXOFfzb3lgnvI7AOWze41soyCOFK2IxAZ0kvrF/TFUaPA8osZqhdZR48JEe2FcKs72gGeO5c1i4rQQgQcifvjFGIMYSfqNFUlObyouKp8= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH7PR10MB6251.namprd10.prod.outlook.com (2603:10b6:510:211::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.29; Mon, 3 Mar 2025 17:11:34 +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.8489.028; Mon, 3 Mar 2025 17:11:34 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 02/12] iomap: Rename IOMAP_ATOMIC -> IOMAP_ATOMIC_HW Date: Mon, 3 Mar 2025 17:11:10 +0000 Message-Id: <20250303171120.2837067-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P265CA0171.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:312::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_|PH7PR10MB6251:EE_ X-MS-Office365-Filtering-Correlation-Id: 7491a9ba-1146-4b2e-998f-08dd5a767344 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: iEPosnaqheRRzSPDb+so/x5UD64lwtux9g57McVODG1tu/oGUE81oOr5x852XBeq5mLX4bZAwNjteNv712F8Arj0ewq9eLmsAthjwcyPEMOOhd2XQf3y1x0c7M9r0Mo+K4kadLoYsbC5PDtyW2gCwHFezyT0iVvs6kUI1LAdJfWce7zZZXLlvrF0rV93/MQ2q0wGgnIac9R0hrHU8H9sKxlBDqXWIUesikrQ+UYSnkRyDtvYjCX5kEEwHTnG086AoizCUZYk/26MO7zjtqUNdYoznh4FfR4YWvG3K4W4NyW/Ece2h8RjkcrFi4Eb6DZiMHF1LOp1CCZFiM5dcA/+66pWv9QsmToJD5qwANHcsUvfPmc0broDEDL1Dq/C50mEbzHLeyHDRPRsiT0o8LFuSvbPb+cjxN8E9D1kXds6Nn8YkbiIZl/Z7QC2LSqAAEbbcBFNVpba9Yc5QyA/HnbKp7BQ5SS5fRDS9ZpfxoTYWWkta/fu2BHB6SJ7nJCsqiPGL+/lQqFbpsYKvvazKjiMGMoP1/V5i1ffNtwV5Hps5bBXjDjLtiVcjDtsVUHw8H8ghSbhEymEX2YYfRN8gHwCz/v+CQejSyCM+pPOa1T7eNUn182e26Tgaen3aYMyoU2MIyvW014iVGgHLig7n2/P2PO3HqE/y8oWMCUYB2Jkf4xuC+Jpus9dXo5Po8ohBiDwt1ZxMsZEVj4Mp5I6/fRPOSM7UYYHGK1SXf9g35HjuRqn/M1N7issUqxA/E1nQUzV/44QdRwGHyGrKFf/seEkaRNeEsRGcAEicMY2RGYBlhBja8Kz6nhPjROYdpYzz04wQ/0LCkLoTwdld/twqGPS8VfVDJkZq4ckUDRzaIb5ImDwTl2xCSDHi85VrnBaGeKBAJiZiq3RC2n4EtzLODuMownjz5B4QlDry/LIhXuN2NmqCXO+lyWf5gA3MR39Es4L2+fe9okwCD55QliZdaONQ8U1N+jX1lGsOcNkvNbt4771onurnKP51Yz0oh4wosdaSgTCrlcxV/hBt4YwkBSeBZgG7ENydHIKgsDFrgRAjN3M04+4/6oXelfttWQFRjqH2RMtiLInURrNPPRspb5xn9NScX7AXIvan1+YSBHu6P5uO/sMy1eXESh2ch5dHTumS4dr1SjeCzfGBmuUf7QO+0a2D1Bg8q5CDNCGSN4HjeLk9RcVBvnls+PP5r6FPgilDdZC+OC87Jg0ih6155Hw97zS2g1cudVdv/yc3cdI+8y8mlODUWgp9J1HICfwGSE8C5SveUt+3dp1SHz6LyzCm+EWiD+1pTYxIDQBcRbxYtVUnpm/KNEYRoteNfRqvk+xQpqoFCO9kaLREVZcULE0FfhUtwNs3p1jbUCam1xhr0dIg3nvccrj/jtB/xwkquCE 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YKmLozqPL1cj0dAXZw51XrA22BSV7WrU2jOb+D9DDr8WxCUCu/8MtiXNxnXq3YbTuVRXJ5Dij5oG31mm7KJFQ/KRWjIOiHGtUJYgul5zK8PJb79gFDSsw/zG4vgFaXvZ2JOwmMK46gxcDlQifwdNXeiYjybHzQBXATa+6iFud5G0cEpTwBnPHytFzTD7FTaH7bsqyJ8CVLMWIX1khDoo1cP8+Mm3qjueWCUO+USJZfvE5rjID3k1OeqVlAiObGm4MyJ77ykgDTLmKzrS6i/N5tsr26pQwyV9Ac9jgZTdirJRAXVd3TMSWO5oFZs3+bLDBibUuR2/w0c4yR2QOn4C2PFqVprNtJ0HCejTgDITJWIjV7EGNEVa71sgUA3JMEWfT6M/Js7crmLybXxvkV6/Dvvkq01pSX1nWibN789jPNlhgqvpgOVtFDnbaEXWhUb6TJOr00mqHs2j9S5l52gxoyFrzp/OQeSM5J7IYd8Jj1Twwkcj6qeoriTVEcfmdZHHlB8054ReaIj4TlCd8q/H/pkmvfRHOcvBcxcAPHl+5UYaZwE8WA6RGmZHCOtJG/oFQbOzt11mHByP8Ahbw7L0DA4DnAi13mhXfUQ0YU7vM9KB/0zh1neOtu/T2pQFZSIldGozSNq/bWczA8VsSetr9nqp4jb1tzuQeAXOSb8bRydckXVFw7hEPRcc9+BN6agSYE9/cxvL0hNbBOHEMsuybe9/VO7vdLaCHICKNOU4AP+WPiYzklBAz2a7ukwvk1nYHtI3ZmCPzqhDOHJd4OTGBTrqe4h6+/i/w1c8IrjXrTUyBfhWT7zSTlmeqJTNv+8K1Kdv9yeHR0sSN9djsNJ8glgdQv9/1iUhN6vKyd5CbL5JEvJCAIhQoTvf8aynNeYmRz6EjMTOd5bQzBHnc1RNWRpCcCcgrckJJPOB8fRe64Vo4EA5c+aJUB/EPZuTf/ZvbPqMM28ykCgXHDTH6zH1nHk2zIJXcr7t0c/9cd5p9eB8AWAnY6U3qNsCFknqO3geEcdl03Xva+yWs3KDwNU2Pk0NpBR4o7oRf2ockR5v+8/d3IKBFN5goiG4bsLqKjcAZjQ1KNHpYFKnc/gVuSAoi0yyMHdQrB5e5PlZIQBWMJhaI67yM9XXiVq3tSI1c++9nLIkvyl8e1NWSWYIUiTZ11qOymIN31ychORIqZaCEWBlrlvQO1SrT7NtorpilIsDwTa2VdzvEw65hhzP/7ozb1TJbi7H9wm43Pt0rqJdhOrwWlJWCIBeV9OXC9xojHE98jlD3NpxyxieObK7Jzhu6vrN50j3ytHQVmXiynzvD6LuUhep3eapg9+yKKsOwYsY9UqbdB0n8zSAaHHPbIMiay9mIBAqqqexGPw8A+BsxIu+TOC9uWVrfuw5SUK8Nx6fkHBKd6MMoXspVytfNWT65B/6mKNb8XPvhKUkCqtZO0nJjiE5vyYIc6PWXq67yKEBmh8lmUsmozj5gLg6VHCDMpEqbKWp8wVFf1n2XRLSbP0UMDxh8iATN+YyaRmtKEUSp0Qc6OM70DnvO8RacGAoNafev+O66REZIH3YhB1io9lfKZp+kB3JaWtONQisrlp3pZziRCvqO6t0Z3Ao+KjuSA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: yWg7BwMrTEmwLqoQ6MoJgqwOWdEnF9PRzmJVF8LC97i9sQ7NaMkcRiSG5XsUYevfkHH7kSDljblNxvY7NmYF4IsVUDA+Kit8AhjmVCX0UJFbDLVmcgjSwdg5cxjB3Y/2FU8gQMxozcvJyVxPbQPuZaR1qinLJSBHY1o2q7VTNUUOOQCbnsEIjfiDTM7X9M29xJMSPCO40pDzxmoPJGqafXbSv5rklJelFgxhoMTXnZSD7jDtuZ9Ac4zVHensl25Iry/CzzTDAS/u7QmpWY1/R0dNBRl1ES4GuG0FYIMEv798TFYrhUog8LjFKq2FMqDanTQc+kx11MjYod6td86JFxvcgfkh6gLY/1YtJRitOQiVPU1WZRdXBXjy1EMdBtK6igTb2RwBX+5tVH7ljbFI/6cXY7DGtZ27SDeoVHYm7LY7ORPrq8hY4aap2mFmqxD0MoxBenM+sWvVwDlxmPIaww/yXQS4OchKYB8pMIXpIpCwFJGKd5ZYv2xq7O1q90pgpb65KfryrMCh+xFyxwST+hiretey9ygKhMgWrHcwz6gO+qDpMLtTLW+klEnUGjf77arY0ksfROup3moUuqV/VWYMk9vaNuWl/F+g0TovtSg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7491a9ba-1146-4b2e-998f-08dd5a767344 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:34.5082 (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: cMrYYbRd4NIaJtF1P2QX7l3Dp7sRBWatFnk8EOwRXiZZv53nJmLRTRS+szoowZbRkex+FlvtEYtVsymxhCto7w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR10MB6251 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-ORIG-GUID: bv7SfAyJ0v3V2dLOTI9o0nvNVnYi4MWY X-Proofpoint-GUID: bv7SfAyJ0v3V2dLOTI9o0nvNVnYi4MWY In future xfs will support a SW-based atomic write, so rename IOMAP_ATOMIC -> IOMAP_ATOMIC_HW to be clear which mode is being used. Also relocate setting of IOMAP_ATOMIC_HW to the write path in __iomap_dio_rw(), to be clear that this flag is only relevant to writes. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- Documentation/filesystems/iomap/operations.rst | 4 ++-- fs/ext4/inode.c | 2 +- fs/iomap/direct-io.c | 18 +++++++++--------- fs/iomap/trace.h | 2 +- include/linux/iomap.h | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Documentation/filesystems/iomap/operations.rst b/Documentation/filesystems/iomap/operations.rst index d1535109587a..0b9d7be23bce 100644 --- a/Documentation/filesystems/iomap/operations.rst +++ b/Documentation/filesystems/iomap/operations.rst @@ -514,8 +514,8 @@ IOMAP_WRITE`` with any combination of the following enhancements: if the mapping is unwritten and the filesystem cannot handle zeroing the unaligned regions without exposing stale contents. - * ``IOMAP_ATOMIC``: This write is being issued with torn-write - protection. + * ``IOMAP_ATOMIC_HW``: This write is being issued with torn-write + protection based on HW-offload support. Only a single bio can be created for the write, and the write must not be split into multiple I/O requests, i.e. flag REQ_ATOMIC must be set. diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 7c54ae5fcbd4..ba2f1e3db7c7 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3467,7 +3467,7 @@ static inline bool ext4_want_directio_fallback(unsigned flags, ssize_t written) return false; /* atomic writes are all-or-nothing */ - if (flags & IOMAP_ATOMIC) + if (flags & IOMAP_ATOMIC_HW) return false; /* can only try again if we wrote nothing */ diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index e1e32e2bb0bf..c696ce980796 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -317,7 +317,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_hw) { blk_opf_t opflags = REQ_SYNC | REQ_IDLE; @@ -329,7 +329,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_hw) opflags |= REQ_ATOMIC; return opflags; @@ -340,8 +340,8 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) const struct iomap *iomap = &iter->iomap; struct inode *inode = iter->inode; unsigned int fs_block_size = i_blocksize(inode), pad; + bool atomic_hw = iter->flags & IOMAP_ATOMIC_HW; const loff_t length = iomap_length(iter); - bool atomic = iter->flags & IOMAP_ATOMIC; loff_t pos = iter->pos; blk_opf_t bio_opf; struct bio *bio; @@ -351,7 +351,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) u64 copied = 0; size_t orig_count; - if (atomic && length != fs_block_size) + if (atomic_hw && length != fs_block_size) return -EINVAL; if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) || @@ -428,7 +428,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) goto out; } - bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic); + bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic_hw); nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { @@ -461,7 +461,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) } n = bio->bi_iter.bi_size; - if (WARN_ON_ONCE(atomic && n != length)) { + if (WARN_ON_ONCE(atomic_hw && n != length)) { /* * This bio should have covered the complete length, * which it doesn't, so error. We may need to zero out @@ -652,9 +652,6 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, if (iocb->ki_flags & IOCB_NOWAIT) iomi.flags |= IOMAP_NOWAIT; - if (iocb->ki_flags & IOCB_ATOMIC) - iomi.flags |= IOMAP_ATOMIC; - if (iov_iter_rw(iter) == READ) { /* reads can always complete inline */ dio->flags |= IOMAP_DIO_INLINE_COMP; @@ -689,6 +686,9 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, iomi.flags |= IOMAP_OVERWRITE_ONLY; } + if (iocb->ki_flags & IOCB_ATOMIC) + iomi.flags |= IOMAP_ATOMIC_HW; + /* for data sync or sync, we need sync completion processing */ if (iocb_is_dsync(iocb)) { dio->flags |= IOMAP_DIO_NEED_SYNC; diff --git a/fs/iomap/trace.h b/fs/iomap/trace.h index 9eab2c8ac3c5..69af89044ebd 100644 --- a/fs/iomap/trace.h +++ b/fs/iomap/trace.h @@ -99,7 +99,7 @@ DEFINE_RANGE_EVENT(iomap_dio_rw_queued); { IOMAP_FAULT, "FAULT" }, \ { IOMAP_DIRECT, "DIRECT" }, \ { IOMAP_NOWAIT, "NOWAIT" }, \ - { IOMAP_ATOMIC, "ATOMIC" } + { IOMAP_ATOMIC_HW, "ATOMIC_HW" } #define IOMAP_F_FLAGS_STRINGS \ { IOMAP_F_NEW, "NEW" }, \ diff --git a/include/linux/iomap.h b/include/linux/iomap.h index ea29388b2fba..87cd7079aaf3 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -189,7 +189,7 @@ struct iomap_folio_ops { #else #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ -#define IOMAP_ATOMIC (1 << 9) +#define IOMAP_ATOMIC_HW (1 << 9) #define IOMAP_DONTCACHE (1 << 10) struct iomap_ops { From patchwork Mon Mar 3 17:11:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999260 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 44889251796; Mon, 3 Mar 2025 17:11:50 +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=1741021912; cv=fail; b=gYni8Y+1m3FJ4hGe3Kjc5U80SsLVJFy4D2t0diAszmzOk8/8rv9spx6h7vJZCOv/8hQhXPTtEMDE4otajGanyBkRM7ybB/zgCYp5ZtSMzOd9UXdQkW/SGz4NBjqUxwjy2YKHceAUBJwZdUlNZaIgc4HB773IGnXr4Rad0aJx6oY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021912; c=relaxed/simple; bh=VlUY4CDN4xufGk7vOQwqnk7dvkz9kIj8viZEtYNryBw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=i27GxMLZw1zKtyMWA8ACuAkt7t7Ec8EPdrhWMQ/6NktYDeGzwpdZSpalImnMV8vg+B+wdkHBhy0MTVsI02SVfAzBRpwB6ZF/naKQ98gnwgKzI/qcdvDX0bULGPlo0r83C6lK8SWllLQd9azk8sXE3A9byHOlATW1l7bNh1cjiEY= 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=aJXM19R4; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=YXTrzSpt; 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="aJXM19R4"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="YXTrzSpt" 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 523GJAv8032523; Mon, 3 Mar 2025 17:11:42 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=lfavFTHv6R7P1PF29aGilDIay1BfPpy3fsI5jMc6m2A=; b= aJXM19R4TvT+TD2+/Gm/i20sIRW1EIAkulDNf5YmLwzlKI1vQzE0e3aPoTha4Orn QAOyiVxRTfI+yx5VgrhqVFLKMQa/bJmXj/NyAc2ulca9KAehedABdenP8YAT/CFX AhE12T1cvYdFEG9Aj8l/EUnmfympNNPxLvLSRPPIQdW9hNkrWRprBIi451LNvqUr /d6IhAPgnZzF7F5W/18D2JTdt4S5fP6TnB3k2PG9cEQyv0RAHpAGTsfxkxSZGsIv g89s/3dxPIP/HJPu3OH0ObTUoxPICuqBoD3jidEKmnLBF9ZRr2OTTHWyjL8DU8bg PwS/Qksq097evND7IoeN0A== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u81u5ky-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:41 +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 523FqXuj021934; Mon, 3 Mar 2025 17:11:41 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2048.outbound.protection.outlook.com [104.47.70.48]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rwtrc29-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TwfE3z9rnvqwDZEvrLCD4v6V8waXMCP3USwWu4AzYr1sXujmf7rkJMMbMhrclrBvk8GXsWQHdF54Jc2wfVZCd6+JvxcCCuc3n6vGMATP1dT9SqaIdwjStVLMdpuVgi5ySDk1YBeymvpaSJzsXukLYL5u1bQZVUjTNPUdHi4CCBk+3W0qsugv9AM71thzU/z2mg+Jl2LzwmpvbFy0qOy9qZCMBT+6NgfLx6zMxCDmThPOomcOn/75NaoGf3jQw7jQntq9oTGT8uPQsYViqkAUgA6Y+i9cyDVX561pYMHAZqhQHer9m+tmFNo6jT7qLGXR9Q+6uMEtpRa3mRQ2mUJKOA== 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=lfavFTHv6R7P1PF29aGilDIay1BfPpy3fsI5jMc6m2A=; b=RhQMoM5U5m39xzlEa3zskb7q43Yk7qNt9ZssatGMnd0iKe4MuSmFl2tEaRXJiirCrfi+Dm1Mf11JkRM8OuL8KxaJCmilFCZOF7PZToVwSYK2r2+F2d0VUotgpwibaiDXjkFkAlp06mG1/7llaLwWzGYEFi7Ioy9NTQuE9G2/ojgZNQ+gefj7ThrIntep97qSAAz/thu2sT/hQX10tv3uVfCM/8WEyteHmPHgPGa+iy/EPJdXSeJFjUJQzNahs5LAvtFiBNBF+T+TgAtVmMKRxDjpTEjgDKtF85VXH37c50sLC/oCB1VSRJDi3LPsdiBPbjrWK0xvjfX1lESCwikaiA== 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=lfavFTHv6R7P1PF29aGilDIay1BfPpy3fsI5jMc6m2A=; b=YXTrzSptlLs2xVucxyAWDmMe28oTyecSkreFU29CwQ5wt0ZdujfF4t3vnc0AEQKZWLKyFRbZLGVy8xNNL1hR/PhMf5FmYaMZD3cqG6KOk5iX4ihvz01VGhU3uuzzynfW83e3H6IQpLpsYziRPKUOXThnHClKUQSFmXYbkdlVnQQ= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11:38 +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.8489.028; Mon, 3 Mar 2025 17:11:38 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 03/12] xfs: Switch atomic write size check in xfs_file_write_iter() Date: Mon, 3 Mar 2025 17:11:11 +0000 Message-Id: <20250303171120.2837067-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO2P265CA0310.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 37e166db-03fa-49af-8ffa-08dd5a7675b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: Prd87NasFw7Uvo08zvRxQlkLKJOKkIF+qtSiqL5uif/xME5UOvtHL+L9wwQKegO9+c2dJVMf15QCJisQGfewz9NXTAg+8GX8POZta4CQlsG+ZGpDW4O+BeL29P5QXaNU95fJQo8GN1QQN3qEKp4E8dbYf4bEEKQfapcmBF93gS+HGTrOjN35hhEL/53aoai5hE5khVUkE5d9js0Wb9tgSDSljDXIxcCdEPtTFD8d44+cYwZr4cm/t/IDiyYZYPAXR+YP29gxB8tm5eFJAO1e8NSdeOV3HG0kxPS4ZgMNprXaSKX9NqA2ayuNlN2oHv6EGUsPhDNBSfcagHKP2hrqfPZaN36vc2FefXNTK2uywKbrtC+GftYUHs2qY5VEyzEimdZov5SOgKqtESKOggg6vyVAGgLK/iQv0oNdxiOyzEWCxv/5UvbjLyErKXuPZ2eZoWIQiIC2q19PNJ6loGgwWUT0SRtOUD33v6CCiakcsmVnLp7DLmQ1dgnKMz+YsVENYFog8sTA+TUll/i7KMGgvqc31cbGt452Xk+yEGzFzhiHMt7+b1KtmLyY7WLm/K9oSEacU56hzWnqX6RxS6RZk4z6b4flqmvOvY9o0R+XYCriZEP5yv43F8iQbkmhHUm9qZM2a+h6pUh9f0XFligQKFKUzGyteGkuPSfNa8YgkYjNVLrQnvHTi3T0rRfSR1Y//YkJHjQt00DXphqQf+ElfOGngjuF9VfTF+jUdVOJVRrRilteRRQlr6fr8VtGNKCNWeAyWNjrWSJT0qcyhS3zNhAddApSstnXqiFr5ebomrXchovCIWElX41wWXP0nM+zst4Nvn67F4aHf5VKc20AylPrsFDyEvOHTAM827aekBJkv0fZWit5/D78KSFAk1HIVXl3n8BLsHWnPcfOza/q+s+tMheLf9uqyr2IyH1zCGs/OB1BdwLcQ535Aiu7+oI772eoaPDlKozsI6nSzus7psZBouesMOf6L0TNOSl92BfzoRbOGtqSo7cn72FHIJ3qEspT0ajHa7EnQcus2avbxPLjLBk1neDmkDCgGffdAk+XUKn7ivQ0oUdHWYHHdE7JwkjRFSwDtBTK1DDNL5vGSO7R94GwAvuMGnI5urJYMXhmmq0k3WuoeE3MG0aB4LWshwA+VfEoIcqB0po/e8jWbnzrurdYYMSzBsckHfdkeHLVj7GBwlaAtAIknyh6DMTzSaYyMsLC8eL7s1e+L76I4szIRuzo4kM18TILdV9PanJ8KgMwAG65aIVHKcaoi6a/WPyPyr2OtULreLpvdvCiDkd3I13e6RGQPsrOeyga9K1q4RMej+SHFa2FfERD/FwkcSbeM5Uot0zrR278P6yv+1JhlTw6HWA22EtQ7VZcuI9jI4r+Pmf6S+Il2/34f8cJ 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HvX8wCwJ4uuBiOaLZrrsiA+ZLVlzwNqPUkQFCbMlQR8NQ7e10oBEnnY12e2GIhFy8DM8AAxZVR3miGjfNtwZb20pCuSUTgvUyTbeDUcLpn3KQG/VWBdHA1qesMuERbFQj4fu92QIfUgL2URyeSTaaFZj74QmMnn9iW+nLov7ZW3yTtxrhZBaY4rF1/hQEEvUqAhpBiNT/ap9sz4xBGdVl8qQjNUARdL5qu+b0LhrwHu0wD3xxzgG+yXoxV6BorHbev2rQxq1IhQ2X6BYW/+o1qtIdLxV+rk7eVQ0x0I6PQrKolHjH6kN9eeuHJfcpQk5iG3lBR81iKHMeIxnZ+lICkrYDCKi3IvscmihpMtJDwfMzn++hj6NyVKuLhVsGXP1MeXYd/2vUPq/wfI2x5UhigJ7KY2Xv32ZHiOn/hzhhcXW5S4eRI7DJNhYRj99YBfqRoP27pPqCmUJRaCFcDwybMdQf+6ytFI5sXvE4fv/8Gg3h5nBI6Dhkp67Zk1cVfFCeYz37+PIWbtz9tKjSP4VcgXIg+a/ugynjW1xV73p91DYAjhfZKbPKcqqDfQ7mYvJQIqv5ZKQ5wwfktO0b4w38byN31PJ5kWc+QUSubjxlXNH89mf3rxML0NlkqjHQReXLr3mlmffEQwwAL4paBpRRyVxk/0HM0rfcSUw6FqPxfpSmza2czTLbT2uz7tdMcO15NaXnkCil839R5U0YbmNYYEg0pR1PQpc9RBGawFl8L4FqrbtNZEbtr1pjAArSVX43PFsm27N7dNEMdc56lxDwPr0MzcBUji/l5alerSEa4i9Gi3Tkn6qg81gDewcpJc3mQiFzoHLZ8cFdi2MMibc9Dp4lAeiXcf0fnpaqbYt4zqbb+d76iNDDWmUZICke1qbrDOhY87TAqhl9bXJ3OVdU2ZcNiLiU9U/dxsJRgWoiQfdUFmYXuCMdnRdVYkvb0Ytb3b4plpUceQb2gbf6TuKmLiP5KOrFVA8rNuEwsP+LIRgBPW+nPcLTTPC1/YUVcwWxVYgw8tbmuvif9LzN48SJ/zHXtfx+4tu2uFbqcNm6jxGUl41J9I65BpKErKxDfRdeDfjojKwFAK7trpOQe4J+mhUSFlF6IBWA0SdLbgFzyavmti43MlkN24qq1DXFxYgUDqdLRm3kCJ2ACAHIEy9u8GLxCJ6AbZImlHUKa1DnYAms2mLq1XexNLnr3i6/IC9ANprTUyleW86A3igADhH8nMuPwp8tcCdBvWUKENCwBC7DBTEZ7fKL/733P4X8D3zcLrTxQSD0nNHlH253j45FWrEF5ojr/Q7eP5+hxsDQoARGArCMaXYcd0QZTMGi5wImFcZwiPsJpvI3UuJ26ADpjZYkD5IHCNxapqhOIX6rXuWJtaRb8bgiuwwF2dpnde4HukFgHq845cvb12fo6qAXyykRPQzmOcf8tuXZapOrRQjtHVACloIM1VY2eNB7K80pJu+AkNz+KARTO4PC0oB+G8VaM7vSzBs8u7jPyMuQ5EGcfjFi1xv4JYfKP3FZee2qHgCZzLoNH2WcZsgLZykE1s9LAUdHGBUCOd9UDYyMxg43PmX6tG0SvYpzN+1BCKPyxOe2/bEQE6nFqry1HKl/w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: V8aluTMw4BIem4ATHzP1wzg6xT5teFEBgHHR650OITxAihUYm/G6qzgq5i3Ig7WIf5G2kz0+NOTX4JMqdvRBb7quRDVW6Lg00d4bEuCL65CkZOx+0ODaTqMDZAK/GUCQSSuFpHNWNgW0SQE+zclOkKlHnf/1oauJzn8lgZNuQseNs/MAuOLgYkp/4IQG+b+8Q794NR8lMPOt/QnDL1TgDzjct8BHD7FsaYWeae1xXQhoRrHf3dkVC/zNFRsitCIF8mpMsColecEb7v3xtGMbw7/+Dst0CIB87jJqqfrXUdk0hq5Bj+Pmeiq2rTARHsL+OP6N8GYfDgwCNBO1XdzeUEw3ywBTM0ygymhKE6WZE5/iphSvhQGL1ndc9rMiyPRMz4OsSktSX1c7bzzJHqNtQ0CgVmwAL7GWCP1KHcvBTy2hrhntCI0ztb67onXYM5A2qCZitVFBeBLOPsY9JlWOsIzDeLICkC0KBmSucBHM8v9kzS4drTWL1GnCWkMkRAbEQO8XIB/asUE7nWSLR867sx2z9nasqzCfJFsVpxvu3mf+TEMGJ03hxfc8Q5tHgD1dJN0B8aRxktnjdFJszkvvM9uYKZZl3f8G+kJltWea2RQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 37e166db-03fa-49af-8ffa-08dd5a7675b8 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:38.6102 (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: kSA5tsPWlOq6RX3wVfg8YLt8ykNWfqwBvRfc0EZvHuFRGFeKIGoz9aMb2zotnhGWYt+3PoDFcy5EDazT+A49Pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 bulkscore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: k5Y9e3COGPFt3TG_zYckCUWUVNOc_cCw X-Proofpoint-ORIG-GUID: k5Y9e3COGPFt3TG_zYckCUWUVNOc_cCw 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. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 12 +++++------- fs/xfs/xfs_iops.c | 20 +++++++++++++++++--- fs/xfs/xfs_iops.h | 2 ++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index a81c3e943f20..51b4a43d15f3 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..d95a543f3ab0 100644 --- a/fs/xfs/xfs_iops.h +++ b/fs/xfs/xfs_iops.h @@ -19,5 +19,7 @@ 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 Mon Mar 3 17:11:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999261 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 BF729253325; Mon, 3 Mar 2025 17:11:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021915; cv=fail; b=CytMjjnmWLa/PDbVICZ+d/WLiVkVEXRmSCL2wtgUM7FiqLjEHS/eq+N+r5lWjU80vVbf8wPjCL9V/Z7ZMhJWABMozRGDDYFl67iO9TwUZde+hj8rhNjXZBbjVBWjZxSeGzNvxJUSYLyNPTVecJ6Ciolyo0RRz9dokmH45hpri8I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021915; c=relaxed/simple; bh=BLbwDKiELBy2e+k1mUIiQb8HZkntx+nDiWZLSXEh5kQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=VlKdIoP5Apf34ZcNwd6gv2STRda4R7bnQ9QcwX9v7yUe0sJIXwO9a4sUbL6xgcmlWna1W2yPYfV06sGgT1gLRIz19u7afftW2XTwRsFXlpici4rVbiDMJcNIoCcmAnuNOtauq4nYJN7Td6GTX4Jk39LxeyyB5ok7fgnp6nDqDuQ= 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=I1T7sxTq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=OzBkdlgV; 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="I1T7sxTq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="OzBkdlgV" 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 523GXSWj015522; Mon, 3 Mar 2025 17:11:47 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=gCSMxwYRZK1J/IKIf6CXsfHMMPxCr9kdpGpGCDzZVrQ=; b= I1T7sxTqDVe1byH5iDHzQBGJAf4EN8EY0jZJ3daW5abKp2LxH/Rye+8ycmJNznpP 7oBApVi1MGSXA/t0C5ue6mhjLDs8Lglj5zzIReYPqvR/U6kYss9F5sXA8K4fsSmT uT5F+r5hh22TWphiG2X/0tWqhcYcgv5biRJC/8qc9BycT2JpD3tPwRgiNnCk3C24 cBs2spfziCIKCdHRdcRW2R/mnaphe1lTml4KnK09FR4WepwFuIpax9SJ3Hq27bEU gbrALpWO8+wBHX3fl8Hip0kMmS0XHrLrjdEr8revJr5Q0/gCx5XDcIUfOBbh9WJ1 rF4GwLSAV9yNysFUZKV44g== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453uavu4x1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:46 +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 523GKA28038307; Mon, 3 Mar 2025 17:11:45 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2045.outbound.protection.outlook.com [104.47.55.45]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rpe1f2h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lTY8/DBZMO+IR3aNqjdf3M63J8EU9Rr6hq6RwLobMGeVkseINpeansxua0lpZaSJJFDw0Idv09V9MnTSK0IHaxiFNn4Rc3W7ki+z+WdCaqgavSzA0JLeUX8wGFhOh2F8+geoqB2t3/QhuSpxIi9GDw+PjhWJxUrngj/hDb5D2u/s0C/3mz1FehW3rL9MrQyLxUCQzCusvmP7AH+risUz6zq5wlkc/+Lqv4wAEi68kcvBsoiKFjfAUg3jbYF8fa4YYZL5aQP5UrnE8v3KGINQn73zT/QI51NS/EsI3XAs3nZ5a7Ro8HkhsqJpboG00ZttdxKzhkajeFszlEd2ofUHhQ== 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=gCSMxwYRZK1J/IKIf6CXsfHMMPxCr9kdpGpGCDzZVrQ=; b=Ndb3K3YrSLQBHfe5cKeOaEJucJsaR/zqboXAy3Pyy3bShuXG754/ZXhYOUKAyuujZ2shoLD1rTvUmzp68WyfhQpUHruA31hVuylUbI4Rdxxsl+SWt8oDpbiCswZcQjsayCgcmI0bAnwcLZU6lGGz/3HiCXRErxBXMUQdkJ7EzdvJe0A2n0eR2BOjXsGfdS6S0engJAVbgVFVf7TIOrlAGbZXlToEutXHTd7eBA8ZMm1RkpWaoHHaq0K949dYY4etSf+ZQAa0k4PnVYVwWd5GROXtxyvI+rOVjsK8Ga+I7Wr9OVXHn/nybKXsIXXX3qfH/R5T2OJH7DepptBb9qjdRg== 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=gCSMxwYRZK1J/IKIf6CXsfHMMPxCr9kdpGpGCDzZVrQ=; b=OzBkdlgVwCAWFJh9h2pnvNBiQGfDfmVxxod3IOTHVxY4RuRdW487u0by0CzDfymzQD6MGuqkvnFGNUVqd3JrAApHyFEB3YpPVZhhyzqir326DLV2l1oFmc7aS915h4R7eSklSqmQwmZd6y6GRu7AzXUpxGkQJzHTlCduCzT4GPA= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11: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.8489.028; Mon, 3 Mar 2025 17:11:42 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 04/12] xfs: Refactor xfs_reflink_end_cow_extent() Date: Mon, 3 Mar 2025 17:11:12 +0000 Message-Id: <20250303171120.2837067-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0566.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:33b::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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 72df70fe-33cc-44c6-dbce-08dd5a76783c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: Vx8cWGU9x0+I44pitMU2KtscR3PEYdq585y6YPBtHOlNDLvCzFk8Uc2Ts5ymylcVw2YYJvYsPSfle8ms2tv1hsdT5fcBmvQ+o9ArkmLf4Hvb2p1xpP2j2RuzNmQJ89TBgv71brFsvDyMYk7xsp27bBcVKlGJOKo8xvUdO8lYIllRz/s+SqM37umNp+8lJ5Q3CBkqPJsnlhq8aMxV4PkGpyXqFxPWO6WTA44u66mDxs8d/m8THXykVTsp+NmrcF8kJUKhwqxDzeD5LXH5RQ1W6xM+Ybc2aaFjbJXppfM62LqeWsh/gBSR/wUjfo0Dy10wT3YhK5dzgWrzFvZzvTnbi5ohvvpJ9dluvfNecuuaAMKcXRhPNYcE+g3ItlOp4MVXxKJpGXUAw2TOraRNxXG+qf6QwV43U+8A8o8dQxOfvWCVVxYXoP4lPulVDsLFF7oCUj7D9Qige8OpQDBbbB610mqi9l4TwRnZxUyUj3dYHbCVP/lPcakk+gfhMXysZadzc0E8cjX1ztILMRW8xca0XS4R27cH3ZSXEdnA9ZSo8cBsiY+W3r8N81wgb/aupq+lYy41MFXzRJ2WVRjMOi24ybOADevPdKLkjFiLg+vdAlksBV2IbAAAvU7g+c8vmBaYVg4puWtk41yigoUUW0PpTRsnOtl/XoIZZMw6XEdU4N73JEdw5kQBLffshKDebmlQbTAiQ5Xs827ra78uOqHd1kqzxP9Q+Lz7H2kxhbYjd1uyY2ANa9XwU60Ij5SUhLcxP07TJ/azPJToqZAEuwibym/ylyEZZaCgjKMAKrkfrHTD/4uF1H86vtL6p58D9TiWo9E7Azias9gkf8HxG+TA0f7bvNiDOdXrPSr1h18RTDsTNuytAnFvnSrMkplX/XmRvxSyQFyKv4ResCsRJ77dxOvKpD5UvnHWisa5Sdz5kAnAFi49b1vgdRUX/ImShLRloCpkbB2xrgG/XASZRg9q5sshDKp7W71x7+ppgNLURe1u633/sW0yeZejpt23ycBh3Hx/rU8EFZTGtBJb7uUkaQXdJA9aA3hQ+64o9res6jh9h3C8smCGzjdmsvwZ05Ce3urBnp9wmBzJ5M+MJEQOi0PqxWDHQLxtbDLhnKGjcDKE3lCPijeiE+ZAXn/pgtDhE8/fugUrwrpwIiNqKgpanGKXVd2Oew2mcu4kRIE/OPRswx2YrCH0M52gmALLc4hg01+EpDKuAQC45Lfb0aZFh9NQfKvRdNnGvnJc6UZGXJz+HVU4Q6Ky70i15A+NQI1C1iLeztFyzpNCyxsEo/5lQtL011H6y8H0jBRf9WqEcKsPxNg68I+lDtFANBWO3EXkmZF8fh6dINurTEQdIR0Osnjx9eE7h4M/cL5ji42OGxWh42dLJ4wCPBgGuF4j+9KB 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HcfjuQrQDBsKa8gud7e1hV3RhL/Dr4z+VJOyLmJU9ujNyeaHvyZEMzweCSP0zpivZjI8QyYi9FfSJFxbXxp6ie/lACEowKX7EDhIK1UzwPdllVUao0cYyKfGFt5ExLqVd9Nsdqy2f+ij2liW9D4NiuHPQ7+OeCnAhURYTXE819tSOu+RY6DNu2ukfz67iCmelIz+8yfJwq6qYoP9mYu48IXQ5T0Qa71EE62nDNnb01OnhLhIfeo1D9SU6JVA6ioz6uzVh/gu5Wfoqafq+lBJZHM/RA7ud7rkLFlKgZF882FLCLq5v4eNIyXi9MTVd5pnK4jjgLhzJ3GWWp29fXDM2fuBUiNG4czPNLDDMgUUSpW62KOGkJsqMa57wqzweeMJgpBN4T9umXZEWkjuqbXSPQwLlRn0KI1D843oBK6MZ0A4jf6gui8ktVfaSocbKpmC5Tlux6MX4O8UXtZK71L2MjbfWgvGfOP5D3cfcl2OKfzFNzThHawY7DGKUg6sp0MszVP74+M/HxmnAoa5OOW60+Yz8HyqZdaYBNccR+7qMKgTn1yO6OZKrzwz7+myRa9G3IR1FXud711Y95T9+Q5pKz2tbImHmH10OzxIDcloir9+c7KSnA0OfAi76uBbRrQlyprw54YEIAMyHTRvs8qSHtw+UkMYXqGuLl7wxbVI9LG3JbFFBdyNU+g5TEC9TVfbWtRCkJhL2cbK6HLNhoa3bMVY8OFNOmJYHKmcDTit864wGoU/DT0ituEpzihWToLVh5xcDjzSz9eyzMdB9fbWj3R2EaiCU2D+vFYAC12k4/txXjw1+HTX1XieSRtP2mbZ5rEVCmqnJN9iz8Y0tQLtR6ST53I5/wq9rSsq0FxcY6errwoUSyWLefEa+MbCLR1gm0SAETieW9djNccSnf0iWXC6XJhLrtPlcBhaDY9KTVt11vSl3IKk2AgwshzoGM2PwwWXIY0XmkfwynhqaoIcoaohNegzhABMQvsTXieA8Jp5+dHyBrwzW0P5Pkh/bJSKL5mAiw8ZwCdp0xW3YL4GxtasT73Ytv8u0TLCSi2Wk7n3mX16+C+G/OpUeVf0MELZl3viUvfPrKaDIJ8YvN0aZH9XucKbJu/6JOQkGjMYOCN4kCDUpETJvAVYkPlgeKHErXPRp++iK/W3pnoyKwkAeIwp1XVQv27hN22CduEKbs1UI9wU7LDs8FSFVB03utZ1iebyDx9Suk3Qee8/0ZLDFSNABYXtDxhqW7waau1iQy3TiQJFMaWiiQhuz5esMUsYKJReEa3MbHq1TUB79eZgU75xmOcvJKVNpXjHbLoZFi05/EBpvVVnLyuguXzBN/pRcaz6gUK0PONy5LsW9rIjVIVNCmHNMWgsKzt/Mvm6sphf0vLwRpqQfj3rPfsVbF0a2TrQwSv3gEkL1oNjZDWGXaLIKqqmyR/bwJo+nzXl0+1Q1PQrQZqJuA/eDle26/F4Hqa3nILPWek4LkI+ebHwxTsp+/O3RbQBX/3K1nJC5yi26VVMu/ERgY/myF3/bwdUb/wNxsJEB6QBBKeLpjRAift4zkRLd/+UKOqeYObndsF0PGjTJ9gaJINPaaZDnoZs/mScvlV/FlZpgkiNBEgKAQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: fRwqhHvvrUJAnB+3ej9u1hpOGcbt/4Lz22ca0bkeLMgxEHjQUBSAZJ6wCtTeXCa7GKhHEZFYcrlqd1PB03H/v5cjcJ4XfJQ2/y9vaSkR+q0fS37CRGZPQgjyIX8+R8LGwWVtdGqABCHxFuXYC5BLONzzq8/bQCbCMKcjwMs6V0ZAlKMmBt6432lzhAu6F5IWP9d+jGghDh29N98hl+Wr8xfuE7hCbTKnGyMp3wLoliUbSNVqx5KatkLnsVx5jzY7CyolcCjRvDNuz7dhUFxbIu2cMHfHXBvfqUv8mH/n+gms/l79iFhgyb5Wh8/2Bx/8E87O06IAU0enmLOzcOFHPpwtIi0E5GVjR7qFA9zzn3mbvuTtGABfrv61pV0ll68GeCrr9Wdy5dfwvjobSDSXWMMa0tjkh3EvMqhK4aie307RuZRxtLEZdHw15TE7sicXPkhh7+a8Z12uv4B5tkkUn7brMyP4me7DIKJfLTu0D0DIG0h/B2HJQ0onocZUz/z8c1LIgQg/letHEpmTz/QOWBqn6+TpGPENoA/eeFquNrD/3i+oIj2i6ECE0+BNmFot+9jgRa1f7PwhMAFLaZNqOR/dojJ04K1eYNh3/DkngXU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72df70fe-33cc-44c6-dbce-08dd5a76783c X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:42.8375 (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: qvHxJc6UgbzBDr+86bGj+OpBr9tlQlo9SiXPwgBLunxJAEdN8Gh3M7X9bT8SeF8rC0Xn911DudtXgxl91H0I2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: A9EVtTglATzCT7_VkyE0Fx2V__pjUD6D X-Proofpoint-ORIG-GUID: A9EVtTglATzCT7_VkyE0Fx2V__pjUD6D Refactor xfs_reflink_end_cow_extent() into separate parts which process the CoW range and commit the transaction. This refactoring will be used in future for when it is required to commit a range of extents as a single transaction, similar to how it was done pre-commit d6f215f359637. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 73 ++++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 0eb2670fc6fb..3b1b7a56af34 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -788,35 +788,19 @@ xfs_reflink_update_quota( * requirements as low as possible. */ STATIC int -xfs_reflink_end_cow_extent( +xfs_reflink_end_cow_extent_locked( + struct xfs_trans *tp, struct xfs_inode *ip, xfs_fileoff_t *offset_fsb, xfs_fileoff_t end_fsb) { struct xfs_iext_cursor icur; struct xfs_bmbt_irec got, del, data; - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_COW_FORK); - unsigned int resblks; int nmaps; bool isrt = XFS_IS_REALTIME_INODE(ip); int error; - resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); - error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, - XFS_TRANS_RESERVE, &tp); - if (error) - return error; - - /* - * Lock the inode. We have to ijoin without automatic unlock because - * the lead transaction is the refcountbt record deletion; the data - * fork update follows as a deferred log item. - */ - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, 0); - /* * In case of racing, overlapping AIO writes no COW extents might be * left by the time I/O completes for the loser of the race. In that @@ -825,7 +809,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; } /* @@ -839,7 +823,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; @@ -848,14 +832,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); @@ -884,7 +868,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); } @@ -901,17 +885,46 @@ xfs_reflink_end_cow_extent( /* Remove the mapping from the CoW fork. */ xfs_bmap_del_extent_cow(ip, &icur, &got, &del); - error = xfs_trans_commit(tp); - xfs_iunlock(ip, XFS_ILOCK_EXCL); - if (error) - return error; - /* Update the caller about how much progress we made. */ *offset_fsb = del.br_startoff + del.br_blockcount; return 0; +} -out_cancel: - xfs_trans_cancel(tp); + +/* + * Remap part of the CoW fork into the data fork. + * + * We aim to remap the range starting at @offset_fsb and ending at @end_fsb + * into the data fork; this function will remap what it can (at the end of the + * range) and update @end_fsb appropriately. Each remap gets its own + * transaction because we can end up merging and splitting bmbt blocks for + * every remap operation and we'd like to keep the block reservation + * requirements as low as possible. + */ +STATIC int +xfs_reflink_end_cow_extent( + struct xfs_inode *ip, + xfs_fileoff_t *offset_fsb, + xfs_fileoff_t end_fsb) +{ + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + unsigned int resblks; + int error; + + resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, + XFS_TRANS_RESERVE, &tp); + if (error) + return error; + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, 0); + + error = xfs_reflink_end_cow_extent_locked(tp, ip, offset_fsb, end_fsb); + if (error) + xfs_trans_cancel(tp); + else + error = xfs_trans_commit(tp); xfs_iunlock(ip, XFS_ILOCK_EXCL); return error; } From patchwork Mon Mar 3 17:11:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999265 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 21DF22561B0; Mon, 3 Mar 2025 17:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021932; cv=fail; b=qqwMZoF2UeG6jtzGT+15e5phc+tS44hKDLRaeBAJ0Kod7m9hgZLcF/wfeF/60F1pr+lQDyv7AhLtkXRKzA+wKqfaQ5FiwjdqAviEm/QdLL3PURYROr0W6G0VR0YELlvoTmfxHns8JWJONE+TNN6FXKZJiFtqXQnBoCN80yOEUfY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021932; c=relaxed/simple; bh=gYUHnBkeV53+rKEZ/sqaPW/9n93YtFfR2EHULEvw3Rc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Otd0IzIZDndonGcsrhD6cJvMT5fd3ww7v/+NuNhUhOpo60JuaRKo91aLZGruJTJGsIYksertqZWCuV2K99f04rRtY9HSbrDaApNYwYbBh8uAcGJo8mR08dCwHKFJV13VaD39xNfJjCYIzdVNDoOrCtTWFpx6W0p9iMwb1ZNlQJ0= 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=l5nrt/uJ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=gaMbheac; 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="l5nrt/uJ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="gaMbheac" 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 523G9Kgf008103; Mon, 3 Mar 2025 17:11: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=enjljjCb8VgeDtzrx5/uC1rTrO3LUeLxvXR/ZbNca5Y=; b= l5nrt/uJlL4WaiZv9WJefQXepPnXEAsvVsdPljagz3BaE9D4Hx81C4t57REuk16h sBhmuLx0SNNHLrCTxI/bJuhbgcMB2Ll6EFMd5JWbuimk5ErUIOSlOXJK5A5aR19X uNbuHXhYLVbmDn8xpLo6ddnAgHrPPBQzpKrRrbspIX5DAjjf3r3V8OkCJeWs2u4l u2hNEj+16mlydnpS9OaDCCEaZiw1yH4LsoqTX6rdBtAYLOcJhaGtPyb5vwwNnl6n iI+gOmaW0xjapFhyxEsABFehLrvWc6X2n9cO4IcgouxoEpIuAhdQ70uVI9l4FIXs V7CSSYaHhTrtaJjwRWMoSA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453ub735x7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:51 +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 523GlvU2040462; Mon, 3 Mar 2025 17:11:50 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2047.outbound.protection.outlook.com [104.47.70.47]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rpe1f5x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SONMexHIL/JzpEib0/YthmGAAU+mn1ti4UaIN1WPMKxke7uU2DAhdRWBj/aIw/COdZ8Frf5Cppc4hgxCeMOG95D024sPE4kVa69d+uhbUDh9x6vVUDGntrFqpA8JtgVSYPeoB+Kx8qWVsl1fry6Wl3fEDxd5g+xw2bI1iA2Blm8bY1bwBG9S2cO3ceid9LYlT5EcOepseHlJ6X3WEUlsMsR/bJeAwJoK+n87y473W6W5fCljEhXIcYAYdgi8nRih8aGg9SmlTK/gZ+uz19rYEXC5mtHGaNG0EZ7229aqTzEZsM46IuEbjzvIOCadbh1d6b7UmkTy1bKDbJI0bNizEQ== 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=enjljjCb8VgeDtzrx5/uC1rTrO3LUeLxvXR/ZbNca5Y=; b=cz2ZgijO8mUc/0WQ6+c2d04nkuvEYxRJe0VsuBSlbIJYKGCVVCDT4Tcm7cYh7dA58IpBbAG6O5+kkW+xHZIxNWQXAOUjiq3CCYJ1R6tmw6u0WgiQjqKZx0eeXKPBIcHnHUrkLXoJRQL7Q1wtKDjxYYYzktXie1hL6OvkNm2iG6iGjr2zmBJHOMH1bT+ipxi8arm/FVbhlS1CQeI8DEQtJKet4J8Bax5vrTmICpguN12jfnjKpgjB50dBFENv44f5mGk8VqSUV45nsfQR8gZbASKfOm9zZywCPr/dq0PSA2ruUWF3l0qI2RsnwtFgMK/OICxNWX9wkjLoq6clSKzZ/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=enjljjCb8VgeDtzrx5/uC1rTrO3LUeLxvXR/ZbNca5Y=; b=gaMbheacb1hPS6JzFVzJyWwYxxFlkToAjPEnVjoyiqirBNhLk9qGsUJxL8H2E5aMk6+aM6gUzw7HAwSF/zon0pwYl8Xgc5yYUCn7l2ZFYTlJZ8C2JQiGgIGQEq8I+s9dJ6rZB21BavsWuiLryUQDn3o3qxoJeMWYagq/Tv/kw1M= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11: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.8489.028; Mon, 3 Mar 2025 17:11:47 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 05/12] iomap: Support SW-based atomic writes Date: Mon, 3 Mar 2025 17:11:13 +0000 Message-Id: <20250303171120.2837067-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO2P265CA0209.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:9e::29) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 28ea9204-ef0c-476f-8aa8-08dd5a767adc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 3Dg2yeCY9CP7xxWwl7JgFFNRS9CwbTtiIiZHexF3htGvqQaqw1u/S3H3whkez7N1cBGw5xIPHtJdlNrlCJ7tz2HEWqyPkrZulMZnHepEx361qh32lMaELNjBDSJSINfrMf5oJ/R8yIVQtg4TWLvmBhnoU384IqCdz0j+0HVA16ZTj9/dVjJ/Nx1bwwj7Ssatc0CDCk2Ot0A+hlBQKZ+4bf/giR+ikoH+KpZx8Yqp1LT48KHuphM399OzIEU3udilhq8p9IjUKbjifk5Z61WSEubR0XvPaHj6iBTtV0YCnUfBEUYVHlrpKLxLvYOrXOlZxxERAFr+7xyBi9YZZkURnRRdCBgJ3RACxKcLUOGtrQhgsf03AG0OZheMM13XWpShKu6Q8FI3uYRiQdFCaJc4y/QoIkUur315rUHGVXLVoofVZj7oefvYlXcNu0JvusvIaKl0vyszMfivr34tVrBVGDo1h8yhk6Y1Iv3SdJATv/qUXYbDmg4keJTUjeNnM8rX8sF80bkARReYoQfAuSFFWpWfGyszgRY6v8qVkbQWPQ8l2YC9QiD6Lo35YeFsTmsSKWsSl9cv/3Ao5YOLgRofAIN1rjE21OUQFVGtxNy5YdEoamUKv1qRQM+IY4vywGEDtj/ZQPEIxgqX8FK/z2iKhGYgtqE7Su3PwwBoQdhLzcYnnC4dguFKS8mRP+s8zI3vw9tVNKw+bI1oqEG/Yb9Wu4O8Ix+MFXS4gMlC+XUHljptsH9DGP/FNbKnf7qQ/xVDCuKfYoKH2SZ9djhyilWVTiFQS37WP/lmWpHu7J6cj7EWtlJAhLAJ7lqF2xZHo5JHHu4PhWb2X2Mrq+7YQq/wu/2wMs7mtBJJq40A+/VvA+4BnHVMYjIakYtgetcyWwNqrCu7OhNEvaE2pI62vpotCYHJR2gGh13zz9tnaX39qGKGeHNsKZWa7wzOMs7c2RTX5bRJjQwtgGn9KnrXSRtZoqbhqrF86Ox+QKewWXUDPcKKvxaa5nMCGrhqKQpx0ST7aqG7U+CudVJoLTwx215jaEAtc4Phv6O1N0/NkNblw3+WciOAM4/tzd4JdlQ81ScQkfdrfWNwgO09MhhkTAYOFDAfCldIkgTFxGpji3csZM2WvB2DHHKojOrgIZC4TPBBPb4j12sHARKpVlSZ2NjRVQVoELR+eSFc4CUDCjxyyQI6bL/zR/YA6IO1gkRcpa0ooACm5xG8kWSgNjYf3YAv2ybg9VP7ZsSBoVUL/p0QTgTBWyFse/JqwwlxUumWubZQB95sZLOZT5tejgTUpW2Lt3tnscNQ8WwB2NI72QLAh1p2KTXOk6mRwFPbCSb8iasSaO3q4qx8Zu01vcsHpBdMdpeQdMtnX9oofunVVTATaO81enqpTZsrgjwRLuMoIAFJ 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /inGSi+l8miKdtBfCV2tO0lu7tNkc09pnYsOXASHwcZKYBZez78BRTX9Vs+Du1RAyW+kZyadVraY9E1kmplsGgXKi2wZSMjid6ZGC3fIaRG8qq5Uj2lPl19rI0wrwvBr2G7sL7K0pqS9ltwBsIAGsSPgyxw7skmcn81k9BoBOqpoGmQY7Yf2Pn55RfSIyZYMywUk7QSmSe16JzzPRsdVikdIv9NXluXBiCWnGfVD3LmIxDBJG/gBTSVxQmR7NS5w7XJCuukVLSKwkaN8gzvHHqOfPArqcodvqqwtjlhL7z6DA+uK6dOPzOMlifShsxALiMcf8rGJUZ+Kw73oSc9ZpSTitwUlRyBaNsKiyLiKBqfEq3qf2FYHkpr4I9RsY6CF9BoGM9Mpx7d7w4IPH4JYZZiTRMNOvtd4OsrG4RczipHHYhml5wNllgpsUZTuAoSEkoSM1e8QMvXI3R4+xIh+FdOHboffiPLav8QbylF3fEz2VhfLCBirrRvJBYqgCFvTCsfbHF7yg8M9ZfTeeos+Ohye8c42YWGkCe7P5KOHXg2QEvYqdcRtG0S6ISS1sfmO58WFY1OqlzSvjL81VqLLZk1tiCHbgDBisNyGpNP7AY6gGW99oEtVBZprNwT8yYi5cFBopSStdZZJZB4ppA+d8ATONyfbOKRU4//3nXEx4UERF8ml0ZnEmUp1zhPAc6cvIdTsGZeKms0NQ8SfBG6YvTn2lPGZ/xqOa8lzPfMuZ67WBjRWgWHnOZDqKrgviWiGJ2HsqP0Ww0GP6cXZ3mGqlkE8VN8VD8ItVE8RSgZ5D99zRky8kSdLvwcFi+Ky+9V0xgKDL6RLsXjX1q2UhY2/X2pOQ28NxqZW2/slFpJST2BGjOpVDRjdhj8CAE92p6HuqZwHT5Ol5Y4tNDJGK3mcM7FS6qAhfaOxQ7ZeSrk905QOvzHhLHU/xrt+NNKGNgR+pzhRtNbtI49xUa4B0yxaqS40Wdrhy/x40n4rj9iUO6WxgYaLItJAuLUqx/d+48FXoIl27w1u9iQhN68++BfpIntze+f+KQheG1+kej5kETI8aZpyLC5c/UTqE4QyPPXQ65RjsQ3iELU8OGijNie5xnUZCiWP5LHLWGzqHAdnoNBwapBlcNxSDo70seFQ8UEkY8+LE8eKOF6zjLyiqq682DivPDoZvs7mOxLl4HDblEu5RT0X0gwChdcd4v5c9RLusQ1afN3uQJnNqwvN49jxhZNxQSNcFtH+bw42nkJBY1opBKnX6ii8D+JoujevKIlkNAy6ONLi1jmziFj7tKjXSG4B/vSjEH9MevSk/viArCj49pQ0SjY7w73bth487tKtYVJ20fJzsVF1JVNdRNUwpxWQ8hJRVysb9Z4i6tl8xY0oio3icy38IX8BW7PTPuQ56QcOlf6OGWpReUwyLmfafhOIv8qN63ppqQ7b92EhhAbNHLlQBqYHT/qkPc3hQM/AizyT+IUvH8C43HaibAKMpVPjoWVzP7ZA6fFVFwD2yBliNRqEKFL7CSq4Yeb90ts3Rwh8BUzS/ZpxsRYyRYMgIERPHFtYe2IxdNHFEh2rPFVloTnvXEr5ZAJcrQHErcgPRaeDrkbMRDomwUvzODn4gQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ahTDf1hkGlUW75ct8kFOy0wC9L7gaLXC7xNCt+QztykspmIk6hcPsBWWTv+RNaf3V/PzvM5PHV2b7nb6lGokE/57w37RdjA4UnQ5vodPm2PHJgc791FEiA7IyTYsP+muN+vGenHSlW1iHMNkzAZ48LNgY4/kVxV9oymoaDUn2sltG6m5tYQ+19FWHB3iffR1W+/3CZJZ4ZDWX6Dy46xmsc2gpyJIt3CVw6AcOhVC1BnAS41HoCmmH/RFEAjJToh8ga5HQWfdm/YRjD2GvQv+zayW7ElDMFxKsw4fqnwoOAUWHPSBeeJcBoTXKR5c0RfdF8BxgI1GsQGjVlP5YXdDCRJJi9Y21uKi1bzze5Ia13q/sAaS5P9iNvofaKxWhgQfvw3Uy4Q55hW7K5uacXY8uKZ3SyvcAzsYY48SZxVQct4ndJ1+N9v2oZZCmBzBNPG8IJN9SLWUUxyZrQzkh4oFsXZo+FiGTl4xmGvCqngdct9ytOLIeImHLxJLRcP/6lPJ6zJqgcUMj0i3nxi1WSQcFDSxP03HxMTUqtzKudgx96RE7nsm4dh4hbBSWxaQKb/RxlI+CgQqg6xy1YtJKwi/6vK902zzbk2YMGNdGGdTvM4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28ea9204-ef0c-476f-8aa8-08dd5a767adc X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:47.2706 (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: pNS16IkHSg6mu6io97HE82l6ki1X9ufIlI5VJw+wuw57n4V/jbvANBRqCY4jIh9+4LYcrv+r60tI2PFJnpexSA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: K-32TPjcyQpikGMhENcZeQ-EHhWaK8Nd X-Proofpoint-ORIG-GUID: K-32TPjcyQpikGMhENcZeQ-EHhWaK8Nd 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 for regular, non-RT files. As such, atomic writes are currently limited to 1x FS block there. To deal with the scenario that we are issuing an atomic write over misaligned or discontiguous data blocks - and raise the atomic write size limit - support a SW-based software emulated atomic write mode. For XFS, this SW-based atomic writes would use CoW support to issue emulated untorn writes. It is the responsibility of the FS to detect discontiguous atomic writes and switch to IOMAP_DIO_ATOMIC_SW mode and retry the write. Indeed, SW-based atomic writes could be used always when the mounted bdev does not support HW offload, but this strategy is not initially expected to be used. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- Documentation/filesystems/iomap/operations.rst | 16 ++++++++++++++-- fs/iomap/direct-io.c | 4 +++- include/linux/iomap.h | 8 +++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Documentation/filesystems/iomap/operations.rst b/Documentation/filesystems/iomap/operations.rst index 0b9d7be23bce..b08a79d11d9f 100644 --- a/Documentation/filesystems/iomap/operations.rst +++ b/Documentation/filesystems/iomap/operations.rst @@ -526,8 +526,20 @@ IOMAP_WRITE`` with any combination of the following enhancements: conversion or copy on write), all updates for the entire file range must be committed atomically as well. Only one space mapping is allowed per untorn write. - Untorn writes must be aligned to, and must not be longer than, a - single file block. + Untorn writes may be longer than a single file block. In all cases, + the mapping start disk block must have at least the same alignment as + the write offset. + + * ``IOMAP_ATOMIC_SW``: This write is being issued with torn-write + protection via a software mechanism provided by the filesystem. + All the disk block alignment and single bio restrictions which apply + to IOMAP_ATOMIC_HW do not apply here. + SW-based untorn writes would typically be used as a fallback when + HW-based untorn writes may not be issued, e.g. the range of the write + covers multiple extents, meaning that it is not possible to issue + a single bio. + All filesystem metadata updates for the entire file range must be + committed atomically as well. Callers commonly hold ``i_rwsem`` in shared or exclusive mode before calling this function. diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index c696ce980796..c594f2cf3ab4 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -686,7 +686,9 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, iomi.flags |= IOMAP_OVERWRITE_ONLY; } - if (iocb->ki_flags & IOCB_ATOMIC) + if (dio_flags & IOMAP_DIO_ATOMIC_SW) + iomi.flags |= IOMAP_ATOMIC_SW; + else if (iocb->ki_flags & IOCB_ATOMIC) iomi.flags |= IOMAP_ATOMIC_HW; /* for data sync or sync, we need sync completion processing */ diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 87cd7079aaf3..9cd93530013c 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -189,8 +189,9 @@ struct iomap_folio_ops { #else #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ -#define IOMAP_ATOMIC_HW (1 << 9) +#define IOMAP_ATOMIC_HW (1 << 9) /* HW-based torn-write protection */ #define IOMAP_DONTCACHE (1 << 10) +#define IOMAP_ATOMIC_SW (1 << 11)/* SW-based torn-write protection */ struct iomap_ops { /* @@ -502,6 +503,11 @@ struct iomap_dio_ops { */ #define IOMAP_DIO_PARTIAL (1 << 2) +/* + * Use software-based torn-write protection. + */ +#define IOMAP_DIO_ATOMIC_SW (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 Mon Mar 3 17:11:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999262 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 C1692253F04; Mon, 3 Mar 2025 17:12:02 +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=1741021924; cv=fail; b=i7U9zy23xRAm0LYl9aU9JgegaM/7alKAcJv/rWrDIcfJ+EbaPnlLQrlgn+qOte56KBRy3qfEIRKkj/YMK+IH+Xr2DNDMzH7Wr5E0GkwtRBlBnyhZLWXwtovAUT65RroW3PwcTk9SlLDkpWElHn9grJx1UGbKZksNQG7hB5QRpEo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021924; c=relaxed/simple; bh=bt0DPrJNxwV6eLygdi3EMJfNWzPthARFPqKzxNGPucw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ekQljU1CUn2pOTPEMB87kJ1NjBUzZ/fMhTPtro1IS+fbzmFJJwm4ZWyr9t45DzgNFfmypHZDtKz1VNbWkc5MrbHNN8txMqO7mwYo6ERkxKx23k3NCabHOe+9jCdg/BBx0EM52zzECgFLJtxhRw0DP2idzddN8qh8o/O0XXB1OwA= 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=kaa5APk9; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=R7HzRRqz; 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="kaa5APk9"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="R7HzRRqz" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 523GHJ2Y009330; Mon, 3 Mar 2025 17:11: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=ESS+WT8jtxmYZ2r0ZqDXsdOl6DPejybb6wc7DL5kslM=; b= kaa5APk9wBjQVYD1WafC44Ba+e3rXq3ILDg5PMNlzkdW3Z9ya6Yp5lxACG6dU1ek GacoFoEOnC0UK2jyfHcn/YeGBuxZmrarNNUi9jHb9LQZzJ8LZ/4jeEzQ/Oc+RHEE dBxKhX6qFpkNL+lesLvd3Df4ST7ftvG4Esxy6mtbY8wLL7yfT40l3gdGJLwVEqbP oGQ8ZOPA3L4d9mewK1MCw0Mvsarfuz6LzhV+4mmYPfat0kwdEvzWGQ+FXYxXnavD iLUe01X4+V/AgimgPqUVWt827RwYpWlHcpHFtFRHhBEJnQRPtNF/GfNaXCqpHvC0 xuoHV9tgi2FVseNdZcFhGw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u8wk50y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:56 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 523FvD9Q039093; Mon, 3 Mar 2025 17:11:55 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2047.outbound.protection.outlook.com [104.47.58.47]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rp8g9cp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A9YxEagkhXp3xUOKMWPAhN/ev0hQnnD1TlXxucNIxQmZ87QX6U81OCQWjrlEWjKRj9a5qTvLK5B3Otn5ATMY+DuChn5yk/M4cVoN8o/vQSLyYfTf/vtmUtN8GaHS5wHCSEfgZ3XifLF9T85vZdVM2VNxh2q06oEkK9hKyvq/uGRBnFgwXVBEvSvyf9nWPaPdd2mqQzIuQyZwTU0BTvI/WXxJQvG6AqMlTdHwUivNlA2aKSDSZ3kXUkZHS6YItoaaddwwHSHMN3YKjyC66Mqb7JItmxIzGoCFygQT9eX7S5inpc7REz8ApwnAfWYwODsIostNza2sy4K9+t2rOOyejw== 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=ESS+WT8jtxmYZ2r0ZqDXsdOl6DPejybb6wc7DL5kslM=; b=iUwxzkOfu3gYhU1SxH6qGpwQ/vWZ9KrvAcLXGGdeAj801+hV+LXkrPutXamQL9j58zop6rydk2Cu7vqRVBUIm/olAkqLAfL7BT9OKR/Dhiz6mYe3oR5+7emHs+/AWstwgHMu7h9IgFbtchjXfNH0HLC4Q1ekvOBkIrDFJIPS2B/myCp0+Hkxkoo0/UwPlKKNqELrglWkURGMolvHMz5z8CPYU+sbOBo+07zH/JlZ3sCMy/dr9Pj9qs/5SVbdjJTsv9bKN3NLVboyY/ap+IXHQmrvaSZyrlejEl3HSHz87cbVIiDXgM7F+Q8caEXtnfjrXeynUGZW4Eo6Ur4zDhOvDA== 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=ESS+WT8jtxmYZ2r0ZqDXsdOl6DPejybb6wc7DL5kslM=; b=R7HzRRqz8l8n5X1onYZbqehTK1eu2DbfNPwOaYzApN0aeFRVFgsmwTTlhQFBWaXVPVTsuqK0yl2XAOL+NkRJB+zFBwzideGfdtHm4OSQ972gWXRxphSVSVPtB870Oac1snMAkcAw2evxNdCqXlWUBTas5+cZbgC6/LK893AYoMc= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11: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.8489.028; Mon, 3 Mar 2025 17:11:51 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 06/12] iomap: Lift blocksize restriction on atomic writes Date: Mon, 3 Mar 2025 17:11:14 +0000 Message-Id: <20250303171120.2837067-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0038.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:152::7) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 9a205fe5-9a32-401e-3b79-08dd5a767d43 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: SjbU6M0SJpXDQdqkOkaPXB62nnVKgBaVQQ0F6bBK9ZOOZzywq70+L0e8gOBenSiZyjzVgtTWiFZm0eLGuXA5UZc2gkOgGe5RGadz5YS888lnJrKEFr3txLHEABUw4VXUFpVu5ZGbX35RYHH3V50gcPODwyk9S2FdKoRYT8ZknXewZr9lyED6y+paMdExNEq/EGUz7R03z39OU6LF9F99xzRc0xiHmQEfWr2Jx4plc1sbzUQFYIeco2sEYtXSsanEr4uiL38UsWyBD4KIjg0nKJcHO/cscMsTOALhVAh5JVZUBVv2tJZZ6OhgZMBIuj7h1ZxPavbunzuaIZbJkjvucl1zIEW9ml0K2lrDy3VFmeiA0dIuV1iMTtaOlMhDQaGNwV9CPOIdU7OCI5SqWF/TDbDZHP5NWyLk/kHRJIZT2R9UkFCE8kPsQfNXVTlqylbOWsjnReMDLzjrC1sj0yUOZSgYcYbqUrPKRCbghU2R3JUONA3RHREHnkmkVzjVZLYE9i5/MGm6P1SL2uS4gq+ht9qMHsvettURbG3DHjSQMCuAWVFQ9jiUtgUqJNv1Ban8eOOuhRqJ2XaddQbMZzz0jx5kW9TZallhD2Z5iEa2oBH71QHrdDFYwwLOcZMTCd+TNpgj6jyhw7va4C5W+Sf0GwvMfDV+QPt8gbtqQ1QmbZpzMyzU0KkhMXRtf43sDiuXZ4gT8MEDfQ9MtcyZiDa5zJXTWfTvsAZERSigQt9QYxTjAQQQXWo/W15EQJ0DD/IGS6nREg0afe0ts5izE4jSgOfASJo22kWY96D4PpJWl41N1roz7+9ucFLV9+hzRH2lZvvFmXD+oHp4W4IfdfUGrGTMocO8rsBp4IOWmjCjmeSloUENdvVZo2Ql2wD6fzn/5gMsQ7zIfG/xm7aG1GH1kMSkYNntvfw0G7rE2LCT8A87lzs2u9DTYzrvDlQ4iGBOUihVqK/QldD11AdiPxDO73gbsdSYZL9dcOLzDMFuqimt4yoCk2q5Ls444pROdLEXc2RvKyvnzuMXLW4assa84RkfUO2FtlPEYhOUqL7DXacVWIGQQbuutHVRx35BALFoiWglYs/JylsIoCjrx5NCAz/fOUPQ/AaHumPDqleRen/BB8nT3bDe/fp4O37dZE0ppW3xFj0ZeNsdmrIjHl4wupKbRO89x4BPmJ710UWmbJsO7mJ21mE/i3Zx0sdrnjVNFav5SYfE1QbYECjTe4O2C+KG7C0BGOvO2yI4G6aqU2uWp1wnHldqaZ6SGczKE9l8i9ZXkUT1jgq+mBfNxbZogKYkCW7Ykjy59Bk+qxffzWeuyYcXMeCKb5OIgr6Vt+gurT4hLm5iRB6iD/K9AiGHb1hHUBJoqdfbzOinISZQ/J8fGrHMPede+oxuTjL9Pb5v 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +0Tt/J3etDKkyPW+t8xlsqsOmvB+iFl30cX6HEakMXbHuaIJBWKzMzQpbKPaZNFflD2x7NM6kTY7wrA8Riku9S0UW6wsqNENCjvPAmEaCM12q6ZRk/lo179yxVPSTVeaG6WBjs89XObwGupn3YeQxZuz7VeagKHBMPfb3EeO5hFRxB5AxcTAVxjxy1hHhMkwf721BVgeKifDCvN6tAkyWsuynHnveP7gBPICNpa38WkULjuQNndBHfmAgTAw5uVPZm1WT6IN+siyGtRGFl43BvYz0wFlp7kqpsAgpWSlJtQVUxNr4rNpfhZ23e9ois/s5zEd9SySHz3kLGXIjEiz0e4f+KkWX8CRtURKpFe4P4q8kEaJli7dhHrfdykzvo0CynRbmnqs+bnbc4nP8TNu/9HVs9tc+nV0/0VG07iYVLdK3uZS4PXc/y5yXRZMDhlaFVKTTohf8nO6LPuYB6Po3IyCeTn68IC/iIfW1A90VGwj3CZyIurpHrRbVasouJle6zIxvDeUBAygqwmQsk3ePuq9iIV3L+EfzTC9ZU7nuahThXM8DFxXMTr0Tw7a8YiGaPSuW6E/LPw9Xk7VJAdQ0wgwTSvq9j3krN6k+KxQSNQ2NIKBEVGW7WlCglTKswij6sq1YlVRbBWqHjHDCDcAfUyroZD2xzeyWr6RR47zTWw1lcQLdsao3ElclE5IntQpZsdF2Avy/ubc+vBRskohMN8M852Wz0c1Od8nXMy1n3foR/rG7Ar8znfnMktsx4xPY0VIAgCZZK2x0JCUBn3HLWKsYlV8kowYKHGmNbKoEdjt5xoNicKeMVhSw0sD3x3JtE6vGV4szobstBcEmgtnKyVhogDeuN9Aw2Bt1I9WGRaKrDkMKZCUMassTv1eRYDKn9m0zvbngbsgBnmuBKFUejTigEplAW2QBvmjndaDCYsECG+iDQ+UrM8WWtjZocSF+dn/v5Hf4kkIfKDB+OFZfl3KYcK3a1evqxpSKzJ+FcAqb05gWmU8oKOw5BS0KgfCwODZpVPRIKME8iGUI/xWdtsAGVdaVASbnsUYqDktf/BcIC381VNnQaeeDJt13nA7alq3wZZm7u45mCPj4UaYkmMQu4y3tLdcdQp8V/pxKnDGQ8TuyyGixF8VWqx00Q/5y1j2Ik+EQCGY2qtoH0ezohJ6/y8MGbQuCwAdQ+5y6RZFhSSx9o4cBXAk/pKP7GFYxaBlSD13Y+7u0Yinue6C6WYdpdnNH13EDkFcNcoz5wJz31o88WC+KiGu7esUWqAoflnrq4Kn6igOKQGmPVCpPG+ZtWulj3lWGCPr5Bv48oEU55wYR4QL+syKfB1421syJ4+R7ybJ+rZcVjWgJ3iEWindQFyhRmLA5Hov9INOizrIhG9+/oKujgxe2vnd4Eb1Hem237Vm5uIIsiBiWrzyjv15QFFLJfvf08ksLHVddDyngPs/fXDB9Oc8Ld/alQNkQb3ZY7h6UElICMh6ChjLVbIZQhTeDEiiwTlt7hoSwOf6U3LmqMj36mO6Rs690l/vuOAbjftQ51e5jfFChAEiHdkO9n0dsM1sR4vPI1NWz9pgJcgQ8VZe2a6JZ6buWK2u6lfkWMxX6SNc5khM2m73Jg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: pOtgHFRBYfDPjvSv8eWod9LZ5wdBt8e9FOhI1Q6KbbO4ZJ+GcOi/+xAqlAe/1yV6j+xc6jt/El4VSjuIbqD6PbB3JOh0BSxzce+UmfwQdCkyUAX6eDORGV8RGudDo63misthomQYHMF/DaGYNwNg/E6gmRAN2j31HVJu4aAGldCsd2vjzryACPcxdDFodzgRJCsILdcl9ZxyKSa5nonxkxuvi3rNFLVoe9HdoijWNewgVIc2OZq52LpeAz/gMiXPyQLFpnLCW07U9i0U1PQEJ+fEGqGJLC1xHUjVgHwvV9jgvEgvEbyQX56lsOxzK+Fyg4qpJV6OWZlsfLkxdBA2NqGtyOOhSloFNFPcZ8CCG7Y+TVKsiNNj5me0wljTBWiQa4Z8LUwx9GBroIZYG5AIIDqOv7tXL+fEo24tOJydv7vt/zyYMXKhH8rrgIkgOKWcjyA55gjvbcdwsb1raGy3aESBvR8sbnXi60sjJPLq5gT6vyBpDak1Rg7cYvMTuW6ATVBrIzTBxKHKNwqPcaYGEGlITMf/e646IS21ZkC8/jVk1mLY3pgSfUK2h8hEH9gQkTGjsNCqrL5PryhPmRx6WdmFkuyd28SSq6t01cpfnWE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a205fe5-9a32-401e-3b79-08dd5a767d43 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:51.2758 (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: gZ0iQIjGJB+pNi3oibDZS/fXzBJhTHS30hAIf7zLKi00s+fQeJCQ+HpNjVhf7+WeOX3YKoRMGbBVw2A/PiLmTg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-ORIG-GUID: jVaNrOUV4R6fNiH-UoOosb7qYtFzYxyz X-Proofpoint-GUID: jVaNrOUV4R6fNiH-UoOosb7qYtFzYxyz From: "Ritesh Harjani (IBM)" Filesystems like ext4 can submit writes in multiples of blocksizes. But we still can't allow the writes to be split. Hence let's check if the iomap_length() is same as iter->len or not. It is the role of the FS to ensure that a single mapping may be created for an atomic write. The FS will also continue to check size and alignment legality. Signed-off-by: "Ritesh Harjani (IBM)" jpg: Tweak commit message Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/iomap/direct-io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index c594f2cf3ab4..5299f70428ef 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -351,7 +351,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) u64 copied = 0; size_t orig_count; - if (atomic_hw && length != fs_block_size) + if (atomic_hw && length != iter->len) return -EINVAL; if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) || From patchwork Mon Mar 3 17:11:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999263 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 34475253F22; Mon, 3 Mar 2025 17:12:04 +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=1741021926; cv=fail; b=HebY3k4RNvAD/s7MAOdr8wYXluK1nJQZgg90tjfoKz0lEXjEYwxt9zhxGoRqLsDKLM+m9z6DT/YJSbkVrG4g3xiL4swQLMmPDc6cQh6dayScQD2KXHdGxCnK3XHBEAfnKafjDAez5iuv00q2JmoP2BaIwM+ubJM3Ahj2zoZqcU4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021926; c=relaxed/simple; bh=u9qSvhBTFJNC8NAi2xtS6ZybO1LBv2KXmZqevjQ8JIs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=aPG7eykasVfCpfnCtyKNqW20Jg4OUpGuOts1QISvDC+A5ragxmK5KVMzdcLzvr8lwQOoAPTBCzmBGox9A8EJ/b9ARwgRejRBezQq+eR9pCr7yU+rT7cvjfWT8vrHR7IErqjFXVhCx6o7j3XQ2HHAaRsEOIJJBUevzLUZSr176h0= 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=Q7B8OucF; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=glKVoG9o; 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="Q7B8OucF"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="glKVoG9o" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 523GGJnH009360; Mon, 3 Mar 2025 17:11: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=OWYwa/5i+Jj8/qJpWDTKU1Azcekr3UtxyL2aK4F39t8=; b= Q7B8OucFpAlhdYMeYNheKLjbJQbxZJ5SSjpMVm38nLT4JCVwouww95NNyzqWVHfo AV49V5Ynlt4V18TVV361YjpvvyI/REO1yjtG9hwvzHJl3VDCvm+3Y65mUbQKdgLb a2Rnuio8Pf2sKEx22WCWBHggwjMtN/j1KDUYTBWJDf82OrBToDcSFrIWimADqgc6 5Cp1EKdDS7bv2QpfOe90ZA+0RMcxaTiQ93gpyhRuu/+k2HYBxsBKu1XaBeV+16qF WZmPunZUX9GglH6azwmZWc9MCSiRDp6CO9vcowg+WwEmajy67CAHpA8P7VneI1uF RwTCx4eL1YEaWIKu32QU8w== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u8wk511-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:57 +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 523Gfvs2003202; Mon, 3 Mar 2025 17:11:57 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2043.outbound.protection.outlook.com [104.47.70.43]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rp7sj1r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:11:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HEYvVRSwJyAO4sbMxdyk80nS3zZD85lga7CnBlMHke4n/SPxlv3kBn/8yEycXw7QurUBZi9WTv8VYBJHAx0ZtJzs/HsmIGn6mEbGZmBpzR8xYe6SkLSg0rWMazMtHMdxw8mGIUR0NOQdh48RCzeqzxCpIhYN3ZiMx+8SBHJ+CRTbggd36vzqwJrLrQo0FhNRdtVLPSgr9XjMIZBwh35+lL3FaQNzWgZKTAxbUqS1Eo+M/UI0F7w1g3rK4qk3lYWncrAIGz8iMWXO4fGXbY9ucr+DVk0C2uwXYnfM5WJPIA1uZhdfXamsW+eP1yqCyVK7+EVZrtH76dwk9WoB4+KCOA== 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=OWYwa/5i+Jj8/qJpWDTKU1Azcekr3UtxyL2aK4F39t8=; b=puMps8tzycIj3EH3b8JkqWgZS2+I3WCPOtX8Un7jb1ofhCS1BlurUvYTOa3iG3jR8s/x3NcbW0LQuXjH65rY8DD3JKbjf5XhTH7pq/No7R7oYTzIzSjtW5uonmse68za5SjlzABwiPR6KzriWLwY8rPRVfmgZYTpPeAVfcr9YE78C/rJr/V0PXkAm2DQEiuppxEqw+5uO7+wbiBjJF/CbiPXj1ommQdptUEg1DRy2Yo3zrHCPSHYYfh+W6VfPIAXgsGFog/IPKkZ4BpQ3H0ts+BOq2clei+2ZDoGFSPzNPMTLHNZo3nZcLOmrUKJ75v1APHUZAWaLlqzP3p++zpx0A== 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=OWYwa/5i+Jj8/qJpWDTKU1Azcekr3UtxyL2aK4F39t8=; b=glKVoG9oWreVlKRn7xKNjc9xflUatUsHxJEj9Cok0ieNKtpm75HJm7bMalHSXyQZulrqRgNKNonsOylGZXaVsvdAU8d6z8yWDhitB7zuJ8GHIoDz2N4wQVN6aw/Q+PhwJU5ljv0P9vpmDUfr5QHeAZsAo2GK2dDXaw6FdcGPsXI= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11: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.8489.028; Mon, 3 Mar 2025 17:11:55 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 07/12] xfs: Reflink CoW-based atomic write support Date: Mon, 3 Mar 2025 17:11:15 +0000 Message-Id: <20250303171120.2837067-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0399.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::8) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: c2146ec1-e275-468b-e0bc-08dd5a767f93 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: angABOBwD3Ztm2DFVCAK9E2EShxcMGKZMhvqaAld4ebXeA9eTVnchwBvw2XqF/BuluxWrn5/3CoUr0AqDs6xnsEAQBC286K6eVMLnq4TrklzlyKAN5/TmUbCGVDUQ6GHuauZ4ugUcVG/45hRfng2NKw7Bd8uikONXKlbCf27mmN7ILafsopU1idwH9m14wXKoJnM4JYBSFfRul00pNWLB0CBokTX+L+lPwCfXSVoxJ0NXalZnf/fYa6/lbPwDlrNu4QG64j3OI24XljduIg2rDhUSYy+DWrDKj9oLAKb0iqXvPaXsmNw0Vyx8wvkRNGT4lVKgtbn7kr0tVD4xGqQ3ft4WHxkf8JeJlhXoInN6lqzELKmcy4MKCscaX3O0nH/uUQ6T1RyAn4pMBbdIoulYl02c/VD3ot1lxQ8HOvigCVdbV0XwLCoXypuh81GvOXHtggXJNmVA3qEsnfO2bMzMLTt0fTGiQnqjxEMTNGVylBwxPV4B2WxKNaUJ6oNq8XF3y+FqMu5tiLQelloUhI0TZIrDiA61SlZGKEW3IumdkSmJ+bGN7c7XGifCA+tQpRf1PZTqd5oSx+mHI8VJ6mBZjzUwtnBaPac7gW9FQ47AJbZOTLWeFexsnH+NwS+0+5LScGK/XORxST1MKaxdri+79PdhvOW0iN5ld0ocYLBkePofE3GVdHIIngxeZLTPuqI2sopbkix3pmSHQHPu78+58/iPHSeYczVM20RUrhyaz8W0mpqnMkEtqV2nLsOVv1HfUssYuok3Ns9SCHfoWGCXnevNTZbMm7AY6zWzP9osAgNE8J9O+jmlowKYJR2gyi4bVksMxsbuWJ2KYHDSsG7jG6/Rfx2BT7hPNcAFTxpSkJvO8Qiel+PEipeKB6pW6lR7AI4PrTrTLC29/rOiBIcAlFykOzyZ9TLDD09CayP3aBlLhORnKgLsvzITu+m6IH6HR4ddbvLAArw+IJglKuPdVeADJ3Jfl/VRJ+WDk0hjXgku5W163nsEAA1nBI07cdrV2Xx6Pgj/xMMGX2xvle8u4Eq//sOKgSWAyOzF6dND3kRVfhu53laLEkK3e2iAxF6vkKIh/Drbidw0N5M7lL06Xq3Yt/ZdFSw3+VF3HYHTlm/HaAG/aJTfJqHBa0xXHiQ1B8Uhf6+HsSpau9tb/tOEL9+t3PPonmJbxUZzBFoGYy/q2jQLeetXDgxUZE7RN4XJCE6h+tj10N6JRExZkC+fCyK8MD/mryePdsYPWzcemHsD1YStamb7XpMdhL0GvLomnvuUIzrVNF7rArf0AAqoWXehZ50BO+mSce4yI3dJI6TEj+Gep+gbpkjTT5Gyc5elO6CAcnTN0h6zcLIRyq9vidPLGbr48LYcgaJZZlheLrDle/MZ8aR89XZkBejSxAd 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XA77AIeRXmjklNVFZ7EGRaL4NIMA+tkGn3mmm2HAOKYONpoP9qCkG90Fy6XHTs+pOh/WgnoOY3isy87GGlkHGN/BTpYk3DBBJMCGBiEN0wxhffDKvRNuOOeSjfPbNBZNUokCQF2L2JMKCgp1DpOmEUTmPrAOgpw9x0jchYhF3ams+0Si6BTfc0aSFTrS4VUWOQXUcrrfGDSYfBYzJzAvSiWXEaj1vMbnq8jgA6VD3tAQ+vex7BF3LiIiQRW7SwD4vkFf0xvGw2SyxclzTDRIef1tuwBJe/m+5lZALyV/601CoeM490h7rt9DNXSa4nQpBk8nQ4NtccbTYNfNRa9+VpVoFg5OTNzOQbvh/fFmXCc/KqFCi2/rGvU+c5VwrQUV4O7vsC6I6ldacLoeSZaq6J2mCmWm3J8PBefExjQ2L8sW95s5QCmtCsorwVn/e5MRYFsxg4381iZeETVyKYYjOe6QtpOXOUK571+IlFFkBezyxrMFDeqM40bymot/JrM9uP9Q054DzR9cgrJzg+fWDd9mHoY2M4cD08CooIaZ/dA5aelx1QBWJ17MVwIWthQGeVm761yj67GAdm6ag2lEciLhdZf7m5/jX0bxEjzU/CQ+rvSc94igX2CNouqWcZ+DXMGojm/ZEONq4blrwlTris6TZnS3kfjci5IuPgBGE5pS8YDLmsMl+nnGG8EgXy1Ge3MApu64xi7YtAFDTr+YTrluLj2+NMZd1SH3HzDbbmnZLdHF5IWKCbfmqx0VLjgOa2/x1DPc9wClw12QylSFhSaeA/8kElxbOu3FtypQ5oHBCAkSPClV9la0g2BK04/8wp0BXNI7d//BrOiorMJlxU2VWu0j4pXsqEzE5WnDs5rNNbFGoY5nQcUBIeNx5AaSzHSonsduS8MejuZ0FgfX6xmG4lmLFVaXUuQxM7u/03GFhDJJrdyZf+VsiTLsviruA9J4Cz323q0NLYt5/nWll1M52c4PAgGRTPMVn9K1JpYgRwv4Z0jdMPWy6o/Y3EsRqG3/+K80FjdhdNk/JyXUaoLydANpa2ohfL8tA9FMgLaWk7LDN19iUp3KvYcQdXaNnz0CwqQY9E4FNXEO+G4299k6qzZYdj/5BtLY83b+WFrlHVHiHDnE1+UE8QJAZsfoHt3CE6as4d8fwLRrasBPsVjGNJjMjbSF4M5JxVjm1EenuqMzkIgDFjYhdN6H/LZZZw4MNm1r/CtysxRy8ZiHGPm05bhV3Uy0/UXdWQvBlNTJqHyny/CSrCIlJqbAy4J11IoVVDt9zti7aLXOzDjHgfcA9g6jGqsZluZKR1MtYHCGc1BSaQyCSyOW6fnqXPM+PsCHpjOHNibBxQnNAVNVJ8ms35aC57XhJ0F0jYIr+9vnDMpaVcbNIJublihqtRx8ANryhanaQnwVNGT7XwpRHQ9+wrL6vFPXaOtQ/wvHoX9lAG0zqklwCWBi8D0So5LDjsDLvaNeW1wixcRZWbNJKI7EAN1B7E9P0vGTwbqKDfyKRxEojk+3shA0u5u1kB+4/SyiFrfCFSUnhattPwU+eP6Uk5es4/dclKsaQfj+5IIxWQVGwEpkVcDNgt0WHwCc2JDAO/tXGhvq4sWZhX4IyA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 7fJkoeTh4kG6BdWUNji8QzoJLiLyEq8PJwVEe++blvX7Ujx9fgyGsHzwUMNjeQlXt/l+xkF27lzgYHKXDPjLGC2N/1jieEAXazoZ29Dwo8bMvL/tNKfS5ByQmA/1Fa0e6UxsvipfTzoie6z4sM2K19+SuWsxctQNlg7H1rCd1QEJm/VBM1OM1zUfeQGjn0dd97B20yCZKcy3DZZUEglWbj+tXGn2VoiF1K+pFX1GK0C3imaYh/vFoplB5vUWEuAuyssXvcnX3oBeLwG4UfaN4bNmTOIumAwaN91oCODpEXFXor3S9+Bmrsv4cR4fxGwsClQ+gxaCH8HcQ9mBGgbkxzQN2MMiZtq4JZ1w0sJDoSDHC233zITOY+O0eikPjMvBCNPzzxDCUnIoN+mfSzNoQkKcOyIuUIFZ46K6RTKFeOfRZ5k3oZyjsblfQsFSi+Xs3sRXOy0w/MHqwQFr8Z7Rdy5DbWDcSYAau+m8htFWNwkFMCyr9aCLwNMa/FyQma+KUQ2MeTs36tzK+ySLbQTPpgDA06UdF3efAJBz0YPDdihBYO0DypCk5y1zfc3M5C1riuPiiVzj3WMP6AnLuzXbTPhhE22GKkyK7DmEsDUyzNo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c2146ec1-e275-468b-e0bc-08dd5a767f93 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:55.0559 (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: GTGY+95szYgxGV3PUyh1viDIhXd315wxV5a8JNBvtZieDsKGv/9N8/Z7btnT9DWLrh9fNpGXhnszqvoRDjMulA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-ORIG-GUID: -u5nMf178P2NBXft0LJcdhfSngOzkMEZ X-Proofpoint-GUID: -u5nMf178P2NBXft0LJcdhfSngOzkMEZ Base SW-based atomic writes on CoW. For SW-based atomic write support, always allocate a cow hole in xfs_reflink_allocate_cow() to write the new data. The semantics is that if @atomic_sw is set, we will be passed a CoW fork extent mapping for no error returned. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 5 +++-- fs/xfs/xfs_reflink.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 3b1b7a56af34..97dc38841063 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -444,6 +444,7 @@ xfs_reflink_fill_cow_hole( int nimaps; int error; bool found; + bool atomic_sw = flags & XFS_REFLINK_ATOMIC_SW; resaligned = xfs_aligned_fsb_count(imap->br_startoff, imap->br_blockcount, xfs_get_cowextsz_hint(ip)); @@ -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_sw)) goto out_trans_cancel; if (found) { @@ -580,7 +581,7 @@ xfs_reflink_allocate_cow( } error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error || (!*shared && !(flags & XFS_REFLINK_ATOMIC_SW))) return error; /* CoW fork has a real extent */ diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index cdbd73d58822..dfd94e51e2b4 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -10,6 +10,7 @@ * Flags for xfs_reflink_allocate_cow() */ #define XFS_REFLINK_CONVERT (1u << 0) /* convert unwritten extents now */ +#define XFS_REFLINK_ATOMIC_SW (1u << 1) /* alloc for SW-based atomic write */ /* * Check whether it is safe to free COW fork blocks from an inode. It is unsafe From patchwork Mon Mar 3 17:11:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999264 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 94E7F255E4D; Mon, 3 Mar 2025 17:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021932; cv=fail; b=KGkLRqLhh1BUByCJpIWgqD+hBqoTMDpuVsDVo2AwqzJeSI7LMpnjdlYejZKfTRgDgkvegh20JI3y8ElGEvx8SklV9CwGBwlkwxk7WJmK3GKNKOuLltQC424fgyiDIiWtBelYdDYXe7VDURuOWdBDSq/UREYJEIy2m+UQUl6tKe8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021932; c=relaxed/simple; bh=0jcjH7lflg/OATJdR4jfdprbTFFCtiNiBDv5pXzbqaQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=hOSSyAQAMVE//Eyxvil/mc/vh1W46r18up8ZypUmsvP0wKiOHpXHfBw3fMJsWt3QXyqsYi+ZeyE6yW/KATQmAVvJr2kLLxlsXq+y7a+EisYwhEAma3xeW1zw1NvmTUoRn1Z+LrgM98HJPn+HWUwfcQKDQcknOoIa9e129eBGSUE= 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=CGzBU8Y0; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=WJPK5IAQ; 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="CGzBU8Y0"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="WJPK5IAQ" 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 523GKg44007122; Mon, 3 Mar 2025 17:12:03 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=RxWGVWTUVOBCFzJUUzYwcwqWtU/bQPxhvpIVkGxnxf0=; b= CGzBU8Y0LU7m5ikmLLO/xbU0Q+Q6wT2XbeReZbAjwr+Q/waRRf0eTTy4+bhuOBXS 6UBkrwVL1vJS9EX1w6XIJMHtz0WFmskERK9ztCsIEe+yKEPk7pPpEB7pg1vpXUXJ MIuYhdJVv5dDXMZ/NJJA/i7jeNudmogiaK91J0S9Nzz9QO/oRAC1LsKU3a3HCJ0F dtQRj6jPiVwOrL2UeBPh01UXQ13HAESd+SXKs6xvAst6greRv1GbN/zAK1ebfR1h fCKNs6DmQfnTeX2MIdN3bZPBVV1Qu1Y+6m7FKrX4OcBknKxdcLrQ4NZA9ifx6XMq HHXR1+olls0FfquN1B5I+g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453ub735xt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:02 +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 523GTgoc003239; Mon, 3 Mar 2025 17:12:01 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2048.outbound.protection.outlook.com [104.47.58.48]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rp7sj4u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Z4ABV+r9rpsKqrxT2fI2BkP9nOIYdMSUYleW0UJs06hXEwB6Q8UQQ2HYYsJg6rSJwTBpCP5Tka8C51UK8HZFncVQsBdSXAtsHEXs5lDQ/MDHywpG90kAHboPF5NWqNGiOoxEDbVotqQIUdeUYmyztjZhTj5PnOj2B4nDGo8u2oPdv1pNQesFP7157l7r3k4RjwXIlVwkCMfTWFQvGcJ8jmp3u+klcovn9ZvHYL4bxEJyQEbhttFh/ptYA1fZZ4zmMq2GPwGRRvu/5Szawp37Ud4NMU0PwavoTsA4MPIuyNhvECZbCbKkOZ2eOG0Ok7JZb25h/ej+QiHExHKq3unwXw== 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=RxWGVWTUVOBCFzJUUzYwcwqWtU/bQPxhvpIVkGxnxf0=; b=SrUq6Gipraw+FbudlfJUu+nZRmbgrfCPkKGJR+QGGivG0l4wIzWvSJHhcKKkuwelOFS+FUlc3cWA2ed4eq0Jl9nOkKb81QLvzfjfavGTd6Lr4UOoQ/1OJ0Yfsc6YotCYgFWSegW1pM4MDb68IGdRaXGPPb0aclDhHmvCUyA83tLN2rsYD6bXcYNF1DGL5PoJPT2XFb0Ox/LgEOU1bmM7Cchdk6hOxMrlukKlvjMaDhj2z777sZ6ylV8jeGvsDhhQtDeWHPTEmZLOXz/g+uEcmWkGMHCqzHR0CHaIFp6Ocvg3PGy50GVMbvJueIFLfI6NJG1nM5KzEnWZBsFzgSJkaQ== 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=RxWGVWTUVOBCFzJUUzYwcwqWtU/bQPxhvpIVkGxnxf0=; b=WJPK5IAQ5ejTjWcwraDumjlqIYma27wapj+/GjDCxU4q1LHqKKwmM5vpIrG4O2t+eX6fj+pxxi4dPg/jofqTygsxeBnOOxWA2wc41B/M8x2FSwA9OOcKUHefLI9+gA0VIH7bvKOCthJhaifeOWH4jIzO4OJHSHe4QVNnZ3aydww= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:11:59 +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.8489.028; Mon, 3 Mar 2025 17:11:59 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 08/12] xfs: Iomap SW-based atomic write support Date: Mon, 3 Mar 2025 17:11:16 +0000 Message-Id: <20250303171120.2837067-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P265CA0202.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:318::8) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: daadc72e-5f29-4cb4-cf02-08dd5a7681e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 4sQ2Jw9qYUSWpkKxXTWQ1PtmKbXRFEvAfxA9S+tEcgOfMJT5IZ54Ja5dldw1UVa/mHosxOUvQSSq/Ivbnk/ccgTsTkkvACBfNrAOPXs/ZlIneTMrxU4yQAUth1fERF4WHQC5flgYZTw2GtmqFoXCYyJayAb07aMgNQ77sv3YShp0KcIhpuVTmFkIr+whsCKtbwSX6PW5d0MO22wQdvyRcn8zkQcHrnnFWKrsDO8nWXbzNas4BdBBDe9KuvvRa7i3wStmCSTMRFwMZFTQu0Z1t4jJjSd9Yt6P0h0iQVcyc0vHKmydIOnezYDTdL4As6AW0MppHhJgU4zwy4Q5yQUN9Z56bJJ23xLSaOYT18hLxlZKrDIx3FP05kxfM5ej/63rk48U/qN52gPLArAdsVeCwGUC5q52g/3S4NPIvwG5kqo1JhPWvAhP12feoVljxSOiPUDrzySecmu02BgcEe47E9WBNYztWz8hJTGzFMa/p1GOJPU/4BFE3uYd40nYjUTX9gV+jBXyP85ypGsiOnBKdx3P/eDKnd/jUNC7KWPxGhJHkntuZou+awUqX9g5cI6rPkwPOdDCLHgLUke+NIQZ0KpdYo/OVoabN8xPG2lBOvE1dmCz7WpFg37yQjAZ5YD/xI/2xBfAlpmxo4CzK5wpAer+oJd3Q7jgO5ifGFw1ZPxZ48HKR4d0OFNbWgBn7pXUtZvoorSjZnyeNJzaVJIAev49IzjjDnsFM2TGq2oHBcJ7wVfZtTdiMPaW8rAHQqI7NXM82noQOnKY7qm3BCbb2/9CrA8I8/N/Lqe3r6Vw2g5+xEMoxSJuRUdXYYhADvkfswchUFeiP8TQjHRH2IC18UbzGb03UdYHkfWTxFpH9MMXBkHA7OmapDacCFYO+qCp44/uA7awS21xu2trJD4tTLZdNXtI0SmL73EOfdgi+lBkGp4eUzMEtayNjqqSMvg6PIbWxNIwMfrMdlEggnuH0+H8lq8D1z6rXde/zF4iPWVb80wROoQvY9qNhLjgVvsGsCh/NPGxlfq3hX+kkTZ1Sc2THSF3x6Ofm2A9HJeil8PJLEg8MG5MZ8xRS8R2iPdFOD9ndzDieJY3gbzUPjxlWiiYu4ui+8zjBzg3mMjGjrHLKZAmlNq+L9rZ1tXRxnE8XI3KZSGFY6gS3Xs+iXrU15WOv0iegUsaCgPGQAJYR8r0Ev6UTvzR1qzKe8qVxyt9My18VeP3sXgMtUN4yrUkXy3FPYuyzoLsDjgwGd58dZfaySDlkOCHvR0cZArcvRmhcKEAGUyZHeg0BMJCCJ1qSM0g3t1VqLMb1mwIijV9Nd1W5PrLw5zideP6H7ewEAPHCJs8SWj4maV9CQjo7Np2AYyyrHUPhlDc3RAo8bmVT4YHZFkXlcBuFtcpSHt2/+/k 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TuyK6dKxHLGiHBQRT/PO9mWewTEFV8WLTVbieu5xdU+E+z2Rdg1bKLVuZfWcnVjmMz50k3REua6pvU1PrVoi3ho5LIZ2b03VFHPVMmhAUc3k3K0WalqGRt51iR5z13eMtGAQ5TUAPfOLsca8XLRGQTW5FK2LY/HJoKKTP4wOnKHHzvpEAa7e6Rt8mRmn/r3ObzNvLxD3d0b+Vzolb3RQzMdl+a27AuKEPui/c4vGGHgu7JOiZyKs8TIu7caJ6vZ95etOcXW05PvAIRN0KHHsUXlNLRme/BYvolNSkf9SAWxRn21reGc4ISz5ST0t6iTs68LFYDFJqO03AnP/p2Xx/NRC9PpctqLwcHWPJoslrAzm42OCaCwe3zYC1QBjnxzi4WYFPYTHf15mGquhpnxofxOQr2xuvNk0Iv65uTCvDRj3gHlCxMvYiu0H14cZ8+y/YhcN82h024qCWf/aQY+mkBe5VFyq/g8IjXaH/GjM1SpHnC5AiHad7GiqgygTFO6LtgbfP0C8qJaAdjFCJZAwlkbRrvXv1gTU4WD0irXCzd6wn54PbnSeggLFop+VeX8khgTcvlI8NaRQxEE9Vm1F84U1CtOzwwKH2jF0IhBZyexE+P7ll23ZBt/qbRSphOXqbcaKEGa2HB1a/RKPYCxw3q13Drgt3bjspYNcdpy4hMHYv4FHhjNPwvMqOVslwEGDfxeeaCcbMnMNLCFt1yyL9JLiYMk3CKcHxiKGEzLWfpmsOk/2vCGoUGc3eEkE4mNqTLUUagQNB3HOg+d6uIjsXDObgndPgWvpNHPFDNy+ose9lQPPwJSEtk1T+rJvhr9q4Lw1OdIk8OAYZHHDRlH6b6SdSJnEGUtEMcetEVl4mSHzyixrqnETlI6JKkilhRTdU2hLGt8qtusIlgTL3nSp8THRSLjeX0hGRf6/bybgpI2VMbt6n6U403WA4TZlNU+HAfPM0qvARw4N0aZWMosZ6VGm6FYHc3d8PbQhOHBLTSdVpolAK2/HKp04gwgjMgCE5RXsBNG6AxeTZwK2xPq7as8I6CBmIta6n2xH+e93sys6lJV37qiH8RXBsYqeGyjhdAELHW7dEFSvTVRcvas+Wt390thLNBzCxV56yhugM90lfl1Z40vUrOCZZUSIzvRqzbBR++BD0/hDVJR3gU9Cm5G89MgKfrnKQS0gkwejvAB4y0U4TfC8xGczoU2kBUO+vfSebYdUJpFUTGNfZ2X3brXrch6GKAfcw3kP09c7rIwH2Bagmd20IbImeeckDOt2fmPKs04u9e4IncdrN+XCbE6EBZIQLrkLagSB56ci5Z630l9DHGK1Oq+KQZo77sOiiXpE9N6fDYwzgBdNm+FaTly9AVWQHlsC4/vTS6Vl3N5KCLasUFkfJY/znlmUEzM6j34MMg7RTSpATEAynx4tdps76XZGzMujH3LbCMErB0iLh7rNLo469WOXA7fDS7zpCxRRjF1ZcHUo06ldRtzH343gilY9pQY2Lz8OaGPFJpt/gek/6iHzRB51LC0+XtQQnOaKEMsvdkSORwTxA3ezW5zZmoH7E22kkVf9Z4lfJueS13LJnisHGoQ37WBHYYo23dAivnhRM3p8mUP1uMzleQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RYS60jSQ1BRC1+a3bxZzwdlpxgQkCzCwEoJv5XwwvphFet9yABj1e6ClJk82vG/ZlWI26Z9M3x8h4hyIhV6ASbho6l3eu4TNW941AKowWPRz6ZzANUHg6iP1miHV7XkVpg+57dkMLnowtBvbPdf7vLmT1ZlwHAt7QyOe3AopcbHqJM4ENu27C4MHS4bzSlC1HFcPojti1B5OBfjuq+iEbefpoLoeP7LGHWTich5kLSlVyBJUzQ1D5ReW0wWiGXxosQmObUrCw50AOgfj9bIFdxm94v2kW7fQXOyMmtbZPVPaYtkVOUAbHq/+RuY1o97JCnRhdRe9uGnLA5lU33JfLQ7lLHZaHyAWXkBhDRwrD4wyZmre3nG+RPWDqWBHWhMMi2Eb2zjnYYNG1Y/FwTdsjnPwh4UwRi/zvpdbkaIzSC7jQHLY/36pJuq24gjEuQdzh/X/cTdsbVRl0rkXEW+GIFP0dfugyL1klZ65nt8fueHe+aQ79QYCzTIbq4v2YFuN4GUtRbgGtpGmktpaNUxfmRDVTrem28xRh0TMqlgW0JxvOBfgOVNw5x/Uu36QxmXgPCSFS/gkp129qwsZMVdVg7UrzQNukzNYf78wG9wAy/I= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: daadc72e-5f29-4cb4-cf02-08dd5a7681e3 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:11:59.0182 (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: mV7VKRLLEB+uqa/WJLBRHdkMdcT1z5jxu1w9JWtQyxV2CJ3TS9g7RZnO5TblYYJ1vnVFSLO3m/MiXx/uwVwfTw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: 8IgxhTLfCVgz79hbldXrwY3FUVhYS3YL X-Proofpoint-ORIG-GUID: 8IgxhTLfCVgz79hbldXrwY3FUVhYS3YL 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 regular DIO writes are handled. For normal HW-based mode, when the range which we are atomic writing to covers a shared data extent, try to allocate a new CoW fork. However, if we find that what we allocated does not meet atomic write requirements in terms of length and alignment, then fallback on the CoW-based mode for the atomic write. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 137 ++++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_iomap.h | 1 + 2 files changed, 136 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 2e9230fa1140..2228330deebe 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -795,6 +795,23 @@ imap_spans_range( return true; } +static bool +xfs_bmap_valid_for_atomic_write( + struct xfs_bmbt_irec *imap, + xfs_fileoff_t offset_fsb, + xfs_fileoff_t end_fsb) +{ + /* Misaligned start block wrt size */ + if (!IS_ALIGNED(imap->br_startblock, imap->br_blockcount)) + return false; + + /* Discontiguous or mixed extents */ + if (!imap_spans_range(imap, offset_fsb, end_fsb)) + return false; + + return true; +} + static int xfs_direct_write_iomap_begin( struct inode *inode, @@ -809,10 +826,13 @@ xfs_direct_write_iomap_begin( struct xfs_bmbt_irec imap, cmap; xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + xfs_fileoff_t orig_end_fsb = end_fsb; + bool atomic_hw = flags & IOMAP_ATOMIC_HW; int nimaps = 1, error = 0; unsigned int reflink_flags = 0; bool shared = false; u16 iomap_flags = 0; + bool needs_alloc; unsigned int lockmode; u64 seq; @@ -871,13 +891,37 @@ xfs_direct_write_iomap_begin( &lockmode, reflink_flags); if (error) goto out_unlock; - if (shared) + if (shared) { + if (atomic_hw && + !xfs_bmap_valid_for_atomic_write(&cmap, + offset_fsb, end_fsb)) { + error = -EAGAIN; + goto out_unlock; + } goto out_found_cow; + } end_fsb = imap.br_startoff + imap.br_blockcount; length = XFS_FSB_TO_B(mp, end_fsb) - offset; } - if (imap_needs_alloc(inode, flags, &imap, nimaps)) + needs_alloc = imap_needs_alloc(inode, flags, &imap, nimaps); + + if (atomic_hw) { + error = -EAGAIN; + /* + * Use CoW method for when we need to alloc > 1 block, + * otherwise we might allocate less than what we need here and + * have multiple mappings. + */ + if (needs_alloc && orig_end_fsb - offset_fsb > 1) + goto out_unlock; + + if (!xfs_bmap_valid_for_atomic_write(&imap, offset_fsb, + orig_end_fsb)) + goto out_unlock; + } + + if (needs_alloc) goto allocate_blocks; /* @@ -965,6 +1009,95 @@ const struct iomap_ops xfs_direct_write_iomap_ops = { .iomap_begin = xfs_direct_write_iomap_begin, }; +static int +xfs_atomic_write_sw_iomap_begin( + struct inode *inode, + loff_t offset, + loff_t length, + unsigned flags, + struct iomap *iomap, + struct iomap *srcmap) +{ + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + 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); + int nimaps = 1, error; + bool shared = false; + unsigned int lockmode = XFS_ILOCK_EXCL; + u64 seq; + + if (xfs_is_shutdown(mp)) + return -EIO; + + if (!xfs_has_reflink(mp)) + return -EINVAL; + + error = xfs_ilock_for_iomap(ip, flags, &lockmode); + if (error) + return error; + + error = xfs_bmapi_read(ip, offset_fsb, end_fsb - offset_fsb, &imap, + &nimaps, 0); + if (error) + goto out_unlock; + + error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, + &lockmode, XFS_REFLINK_CONVERT | + XFS_REFLINK_ATOMIC_SW); + /* + * Don't check @shared. For atomic writes, we should error when + * we don't get a COW mapping + */ + if (error) + goto out_unlock; + + end_fsb = imap.br_startoff + imap.br_blockcount; + + length = XFS_FSB_TO_B(mp, cmap.br_startoff + cmap.br_blockcount); + trace_xfs_iomap_found(ip, offset, length - offset, XFS_COW_FORK, &cmap); + if (imap.br_startblock != HOLESTARTBLOCK) { + seq = xfs_iomap_inode_sequence(ip, 0); + error = xfs_bmbt_to_iomap(ip, srcmap, &imap, flags, 0, seq); + if (error) + goto out_unlock; + } + seq = xfs_iomap_inode_sequence(ip, IOMAP_F_SHARED); + xfs_iunlock(ip, lockmode); + return xfs_bmbt_to_iomap(ip, iomap, &cmap, flags, IOMAP_F_SHARED, seq); + +out_unlock: + if (lockmode) + xfs_iunlock(ip, lockmode); + return error; +} + +static int +xfs_atomic_write_iomap_begin( + struct inode *inode, + loff_t offset, + loff_t length, + unsigned flags, + struct iomap *iomap, + struct iomap *srcmap) +{ + ASSERT(flags & IOMAP_WRITE); + ASSERT(flags & IOMAP_DIRECT); + + if (flags & IOMAP_ATOMIC_SW) + return xfs_atomic_write_sw_iomap_begin(inode, offset, length, + flags, iomap, srcmap); + + ASSERT(flags & IOMAP_ATOMIC_HW); + return xfs_direct_write_iomap_begin(inode, offset, length, flags, + iomap, srcmap); +} + +const struct iomap_ops xfs_atomic_write_iomap_ops = { + .iomap_begin = xfs_atomic_write_iomap_begin, +}; + static int xfs_dax_write_iomap_end( struct inode *inode, diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h index 8347268af727..b7fbbc909943 100644 --- a/fs/xfs/xfs_iomap.h +++ b/fs/xfs/xfs_iomap.h @@ -53,5 +53,6 @@ extern const struct iomap_ops xfs_read_iomap_ops; extern const struct iomap_ops xfs_seek_iomap_ops; extern const struct iomap_ops xfs_xattr_iomap_ops; extern const struct iomap_ops xfs_dax_write_iomap_ops; +extern const struct iomap_ops xfs_atomic_write_iomap_ops; #endif /* __XFS_IOMAP_H__*/ From patchwork Mon Mar 3 17:11:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 13999266 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 63FB425744F; Mon, 3 Mar 2025 17:12: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=1741021934; cv=fail; b=V3an8ONLV2Vhu6A3lepw0FAy3jPeQOf1npaFYz75DLAbHd3mKEaFqWmflekQSof4annSaLVQRXx0xTVvwPuf5aAGv0LNtEMiCUcNZ7SmC55Gj7+9mf3WcMil/O/wlQz/wYL+d5rf1ztuL2YpY7+doI/NQ2+HAsPSvnZM5lAo2IM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021934; c=relaxed/simple; bh=+1zKr3umsMcfDxD1Uitu0Zl/lcyQB3aM5HZ4bV8D8mg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=DyoXrxE6RUGHCz4VulWYFygSGuFBVqdINVYyNJqrsdmPhxz0Q0QaV94NxAaChTH8WbR1dcxwnb014B803xONwgi3Ttlrw2Kiiifendb/uR7fw9K7a7TIHYfWYz5UQ6iAEuq2X/bkaDdSGrYQNrgWsKu2hkjB0JsfKkAq+n6aOew= 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=XYxGjCci; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=NG4WlG0q; 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="XYxGjCci"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="NG4WlG0q" 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 523GQgTH031279; Mon, 3 Mar 2025 17:12:06 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=4rSU11rP3N2rK+RW6+6KelYOsHrpwFWdB/8w+J+8czY=; b= XYxGjCciXPB2Oim2JBTw2bTozhInIkZzoAkYgWXE+HlrjmfY/VOfXDS5BdamNC3u 8uCN+Y0CTUIM9LbqndyNd7bSmfTkF3cAHbFA8NW49FKbfbqI7yru/XKFfcSM3C2W rGBUhTAWZ8lMNi6KJbxNj59plIFfbI9ddFa+9Dh1G+Dquyfsda+Zi1l3i1XFR21p EaNg98J+CoACXlK5+6/kfAQY+aEFODKCqIrpIbd1kbKYPUnsr9P4zxVHc8x4DxBD B7hVGhfWKWqErI6zFNJpZaWlXVC94D8H1pPS6XFeQauC2oBjGXkJgNPXTpy7CSfP /sGkWwn2YmGzy73QOQAnHQ== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u81u5nd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:06 +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 523GSIkk022516; Mon, 3 Mar 2025 17:12:05 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2044.outbound.protection.outlook.com [104.47.70.44]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rwtrcjg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TiwGiIaNRNThDv+qsaWobYoBU20hy7tgFslxo2o++OljebMrQpFubHvUEcYAglhrnqYrfTXY6OvfSihIJUntfUc+Ao3fa/MNlFm1BA0h0r8mSGCZKqNvUMVYefIWDb/RT4hugFCvFtviNeZSGAOcZ70jzhEAkSaLXIDvanSbhMRLiR9mmtyM6r+oGW2uwUx2ehTJa4etl1K89lGhFyXHLWfFiujqVK/d616MdNPj3ShFVxQZlwEpFkwAItzQjhQYyHDN3edf2n+wPGtQMlm5kFbSPKGY/ZNjPB1I/EBVJ4fLhEZg7EwWe7OaiNCrYpunbkkLBOMjlUTorhz3SYTF5g== 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=4rSU11rP3N2rK+RW6+6KelYOsHrpwFWdB/8w+J+8czY=; b=eolRt6k5u8ZIJaNMdwbB5J5A140UxJ+UtEOIrO/NruKb4TwoCqh91QqIgtoFQj3OmTGL+6lQxWIORKH8Obkrtd2CvOqrqE/TCOdTTljAUlusHsGe0izeBoZFCCNl9aIU8TVbHUj0Ecn7N8Lc6Ax/a1aAIO89rmhTtMmm+SuGj3Ihs2RQqleDxX01O2Oo/aZIHXJKSMY8I+woUmc+OaQNXTq3p45E9OXGFAyzFwKf/4Ib98bkEp521H1diUL0Rd/OQm5ucHJ53r9S/P9LfwAxgqmW5VUb/tXyVJJpi/DUwMRdw04gtoZLlYSkqE8ei1VyK2NMjDmx7ioTfJXVO8UgwA== 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=4rSU11rP3N2rK+RW6+6KelYOsHrpwFWdB/8w+J+8czY=; b=NG4WlG0qWmtKIbq6aHelK8axiLx1aH+aFiND8V6P1upkoF54ZBhpUy7cVqTtpm+zmlX+dkB5Ux5pUpCP+EotgN68Vs9hdBc3+RVmW+TEnucu4z3fUchmEX4ZQG0vpy1nyffAxi0SLUThvZjrZzGpzzLKIiJ4MqheCj8P7UF8jv0= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:12:03 +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.8489.028; Mon, 3 Mar 2025 17:12:02 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 09/12] xfs: Add xfs_file_dio_write_atomic() Date: Mon, 3 Mar 2025 17:11:17 +0000 Message-Id: <20250303171120.2837067-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0504.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1ab::23) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: c6562c31-3e9d-4399-4de0-08dd5a768430 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: phuE96J7zbErlGe/6/RVsRprR1kNzrT9lPklDtnzECXvgR62UpOh5sCno2mjpM+b9qTcGiJNLYcCRU2sHEUd9DQRjiPoCWMR+HVqF0oQvrQpiAvzCiLBywhxsGBji7C/joQnUkFGW3psNu6mERzKvnmP4c3Rv1nM4PEcRvjeZvGpUvCHIte+KvAPrj3pSJVa+zDnadiJsC2nj/5VyFF8e/T3dU1fqZogy6x298NxZwE1jsqm/S+prToi2DFceX0BpyK1dQ/kidX3dUBZv1h373FgUL22/thv4kb6GUf1Yhev6yCkjkS7rrrVKwfcs/c15de2gtWznmVypd+lGrCAHuRIFjfqPINCFCaag6JfHSHazf3+cV/0wOIwXAqyL3At3tSTnv/OVWxpKvDgu5PYT5EJqXIyqMlHMDJwfANc463YKYPj7m+irViG4uHrr8PKvayk1Pj6GpdZe+vYN7r7jR22XCL5bqHAwnzxuj7K4R4Y9Q6bkvhiFS0vZyedljPp9s17ZMc04MOqFmitkt84irJW5J+gIgBJNmea3uq+J2ph9D6zieW8NkmMmYfkARku7uXJh9otqgStIalOlYYbxpIrVJ4Bqx6Vd4lufKYAYtQezV5kSM3wQiV1P/JCaYJ2PIW7B+tcI0cB+v8zdCRWHuLn3jJ5slOh4TYI5dP6SjaYnBYG3ClmQXOiSKCCPIM9daCbw8P99kCjYjgHCbSGxnAsDD9MByevmCpGp9g0PahubE/hzI7jQ1BWRFui1raIQG4tF+2toyyQNHsLn7GyhoP2kaVwJ/Cy8y+xhoSuoDLLf36gR+A8TnBWM6M96wjNipj9dNcme+XLuuvAPkQqAuk9ZeyrdXjrxIfP5n/cyUmOeWqsyOEuHQYYXToMTMnELnLhuIt0L+xtbHdlIO1dZw6GLrCdJLU3l4Myz1RhT098LVMw4K0aMV0yixRTX8d/HyQml7wHAKzeBTnEKRSoYYfiudmiY0KJbUyMTydrvbBtxKQs4dk8h5viHaYBLXl3D9NoaXNf6pIxiQttQFmu4VMYAfyLvWQ6I5coGRjhIOdcoC11IV4hgKvYFwaw40kbqDKcrIqTn17dwG75RochaPG/tyVsAir3hwFTOZHOJ6uMyIF+u6UnQjeqMv2yYX9RD8XZw1l3mLiWuyMDdI0qN8DUU4RRGtMBr6t5QmW+2mdNwqQoPYYaM6g7sPmBAGjQF9HTcj7fuSaNN2VEB5kguoNa9xCql93G4EN1o3sA3hDzRZbenE3RW/G17PCre/DOkPyTAVFp9sITFxH683whYWtGMyMueKW9lD1ghmC56r4HeFXjKl12NX5Ga8dGxFZa9yyw+XM/iRVuKchxH43gyLBmCEiFBu7eeinv221xXhO79G4q6/Sc6XF5WlGRvRBW 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ExvLHDHWIdTuJNArC9pBqCRNTSPssEeRQMaS3XeVM5Q/e1BLgkE4FJTktHvbnytnSeu3uX4eotZS8+o0YYPaqnx6eJmo6Nt56dT0QNd5U5YuskvsoWwwWfkAT0CVacK86+AnYZy/0ympToRKxwTEtRkmgPbmguc0B8WX/FJpJLLf7okhGs6NeXJ+HFwIQY4aYOawpLf2U6W5vobe1/mnKQn/zgDPQXoiaieGKiUQWd6FnGLntMK4SdmCt9Kjhm7WvdxjH78VUR5a22DNf0wmWqVVGX0limyqX4OQvZN0TGCXqJJlXTA053vKbWVcwhtJO1DFjLZviJFd/M5bSFX4AxqzUthIj8eCyEIH6/xvGae8JyaoA1Nue50w+g+1Feo+c6ZA1fSxS9bQfn9g6LUhhpOr5xDMtmN182lGi0aMJcTF3p1AuXQbe8TlhzOlCw4zPCVWCdm4V2hL307vxqFvjkBoFbflQb2ORapCSGbHhcqEgml5MjcJ3vPMZ5OaaPBMDOVUHUjdL7Ui2ZYXz7V2QCAewkFCN18bR6xCg7ca1rxcrJUWyQqBdzZekirIPZst8Q9N75r7d2kmXZIj/jQiQtwhkcJ1CjyXBQ0in4JoPjkn7OdkIEToXyUNZfDqHqwny//wsBnfcdmmkCCzpBlmESwVm+AmEcz9nvqfxIuKkIpOOUmF9hCQeQvm8cjuDQXIfTlEN62FX1J/dMjsBCEg4fYCk0rtTwTWfn8IH5VFN/TChJCmceWVigirnlr5BFq66K1Q5HRPEA3kSOfXWXcE87BmnqRERLPRA6O4RYECm+XBk4LoEUealUX+1YgcZOVR4ELwO4kmxjE6WafdE2vfiolDYM/qug09cQdinsv6y8lLzwaubbiwgY3H/KJ3lDtPYv2gkAYlijCXcsDVessvkqsx56oXtYKD1pK+5beOnM1PjPYalDasXZ9hZrd3zqb3T1mqbLBJlYXSgvHtGyg9n/bqvpAD1VCBp3uox3lKILHNp1qBfV5cd7KuPw0iFLXDV4Q5HXLeVVcLiNZt90+CkuFsDM5wjIA/UuC8NguMmWRgR7SP9BYdtX3Yf52CKCgez+KjPZuMGJDDyXitZz7zOoOhTPEIB6ngqyI2cX7OBOStTv25c8PVfw1n4T4grdAvzw3ZnNKIJhNp4oAT8BEEpvJHWz46Naxj44UmBKd7miX+Db6LN3TiUVNXQdf8opAD3Ets8pWUvQof79Wh3u4bWBHJpoEvv9E6XEs2x5EiR7s/ohVCVJhXTExGbCuXyhWAZH/hx8soY+7Tcjjwm91Hb+/cLZiiVuerZHQ4qU1fhjB9j/kT93oSkLJ672v57HMF5Ekn6LemzquB1dObQBxIDTi5qF3rzz7eMucJnj9t8KShhP5Ij7GCSbNCDPakJ2eqV5663BHdrjB3AA+IhZ5BjZDs10axTyGGtXzJKjnf5ggZ6+3Imloi0zF1/W1zg2JT9JIEj1yXUjjGQvzZLBI6u86QlpqeEi9cJ66DWfxstlve+ZNcKG90WIFJ0nkdVGEvTn5IhUc0FN/+rEHOo7+f8qsRG668d6FzntioZrVOZfwiHf4DCEe+FR2/nLP/HbSgoPfTJz1No/0HZ6740NSpEw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: LFJ383rqqDINxFJHrDDhiaf3ifuQnyyCSbH3Ireg7rQXKfqef31sjRZ6d7tJ/p9AB/Rf9IBgxtALUJkP2pcrtuykeSJWMGOLK/i83nk91q/TNCfmDhivdGYiUnEEVs+1vMoRMcnMqyj89DvySRzci5PgjDBgcXAcQwiOmgs1A6cqA5yNWLPHlwA3E7pJZkiyvIWS3ic0nhuAXgpkvuwOPcxT9Q9dlfqg9nlVbbSpIAvDBDl+gbV+0/cFvb4Ce8WyO9X7wUfEYAZbUPvT5wYSWlETEoBTdxLyClNf8MVD5GxW9R2j6U/Gvrs3cdxLS2za9oT7xjOv1RoMcwXeTDfyuC4rXioqCmdbirNaQI/H1VyHkjaKwcXGe+fSKxyPGYSMhRjQDgaNxN6Ax6x4ad37rSQfB9tPsnXeWa+V4mcrDVm43AyJ5YjT0vwfbu2bdmWzexODL9zmEOc6BVtpDrQvTeC8zL3ddDuD5wGoyW9pDR496lvBYMEUQ4zHCsvbLofiWLCWJWNMGoZimh5WVqUQjY9SyFZqL//Sq0kR9S5CSG6YiQMQKuUCUaFEcFGqCOK86BWSeF5EDiP435m1ZrSNzXEHs6yscaukTeeLA+Qgp+0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c6562c31-3e9d-4399-4de0-08dd5a768430 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:12:02.9108 (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: TTnHIGS+Qivy99jBoMahAag5c3JBGthIj/2BE9X+aW4XFIenIH1d7wulaj7jVcGXmFsquPwK0WimciqKVlvTyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 bulkscore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: NO2_9ZSvFBCSM7dr9F8EYP9J2oU3rRqH X-Proofpoint-ORIG-GUID: NO2_9ZSvFBCSM7dr9F8EYP9J2oU3rRqH 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. For CoW-based mode, ensure that we have no outstanding IOs which we may trample on. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 51b4a43d15f3..70eb6928cf63 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -619,6 +619,46 @@ 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; + unsigned int dio_flags = 0; + 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 (dio_flags & IOMAP_DIO_FORCE_WAIT) + inode_dio_wait(VFS_I(ip)); + + trace_xfs_file_direct_write(iocb, from); + ret = iomap_dio_rw(iocb, from, &xfs_atomic_write_iomap_ops, + &xfs_dio_write_ops, dio_flags, NULL, 0); + + if (ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT) && + !(dio_flags & IOMAP_DIO_ATOMIC_SW)) { + xfs_iunlock(ip, iolock); + dio_flags = IOMAP_DIO_ATOMIC_SW | IOMAP_DIO_FORCE_WAIT; + iolock = XFS_IOLOCK_EXCL; + goto retry; + } + +out_unlock: + if (iolock) + xfs_iunlock(ip, iolock); + return ret; +} + /* * Handle block unaligned direct I/O writes * @@ -723,6 +763,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 Mon Mar 3 17:11: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: 13999267 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 5F3D325BAD0; Mon, 3 Mar 2025 17:12:18 +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=1741021941; cv=fail; b=dG9LNeykqzv+dzQpUOfdYROdBEFM1SN23ZprVOgpF4hMrvrdr8YdgeX7zdzR5aLZDle6BZfeJlLPOpksm47Ak6YtFH5QowmC4esyjGtVknuCD4ndE7mrPp4nmsUnfwHuMk8A35HOefE1eUt3i8LE2X/Rv4SMrEiG2FJH/7Ga6Fc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021941; c=relaxed/simple; bh=X6aItIDTNHMD6TStqCry6vNZ7gxH9G1tNVneMFOnSpk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=fUzWHKcT1sAdIOHdTl+sOt8xzIzWmgqY1K6rQ5AiUhum7jHbN+jLniMQqC2loIuQKynR/Mw/bj7yK3AF2BfSaOtuckhX8HCQxQDnxknAuft6O2zTLNRCjcw8xktjUiSVbsy1FkU1wJqtuVi/cw1xJvyrFl8NYeqjeeWwTlCpuLg= 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=W+DtPf0f; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=jfrpEdJH; 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="W+DtPf0f"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="jfrpEdJH" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 523GAnN6022695; Mon, 3 Mar 2025 17:12:11 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=XxXApDfz5ClCC/MC/45bon3RNS7G1xBAjBvohm+5nJI=; b= W+DtPf0f5PvKuJU7jJqGBHBBNHLKh+nsXVN8tkv7tiqG9D5L1kpYXwoxRKnNFXds e5vN6Iicxyl/WF1qB6t0GN65ii1AqLx+M2fJFfKHjensDCh3rVjk4eLVCeFB0X09 Rf4qCyu7+0Y+lN6FBXc3bwat/hcHNLZE0UtAkzUolAfaVOAZ13q3DomU+hCfUa3O s31ftanNggo+yXZ0vCAxBWzPVrU1cjhwfVVugmH1AWPB5KeFNML7MsgJedquTJTw RAUbyzdoA7Pi6oYBaxbrCY8hx14txQZNGiRHyzf7QP2LdCJ7Uy3ATJYaozJMEAWr zIphonOuKJSinIM6jlcqYw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u8hb6hj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:11 +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 523H5el9021872; Mon, 3 Mar 2025 17:12:10 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2044.outbound.protection.outlook.com [104.47.58.44]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rwtrcpc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HyOQ/EhgI8JT4jWX+GNs+sDQwuTSrDkPVGDfWmOQGZkKf7GJXMueNV42Ir6EvPPHJ+93aytKf3YM2Q8w98pKKK3TXpfa9sD1pcoQDeP6PeAJFLsIUUylhUbbqcmA1R+a/aOudDeg4jobuCtFlmQ0OVgjsLBLeP9euG6dtfYCuFg8GHrmzLniJFjDhpLwb/ru2UNsdWLKD4YX2e1oyrKCcF2U9UWCpNhewHEL7rIfXDkvgG8x2OliwlitU8cDq7xWiyjVaUe45aWZF9UYGyJUfiN3vUB/JL8LAw2J1T8uRcu9KVE0jVodPcFMj6m9PpnpxT2l3EfUniU7X5hT05DNaw== 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=XxXApDfz5ClCC/MC/45bon3RNS7G1xBAjBvohm+5nJI=; b=oDY39XP0WJoN7JoHayPigiB2KDx5pfMs8zxpfwAiI/YZGfJ9T9T2HcErtFRUP/JmPQ7jOmqk/+jQjDNW89YJ66DhHez1Wbp/jmAfS0nm4o/cPagMjFoqCKI+4s+my8cggC3cfQGi0WR8Al1ckmoc5qYyc32qLCTuVBpU/wQbn+KvzsOOTCE2Z4cXDa7hHIhaCTaG2LuW8KWZ1j4s5qJgzeowGeifbNPSZvKFuQMJ6XpMIPyQhBEFY3MVWvVGlR7vwBQeNbFXQGd3uyCw1z5A3B8QnzI7FQcsntlHMTMUTDCp3tROz22LLawHWJTGAzYEmNGSCkFjBZhenmy6sKX8FA== 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=XxXApDfz5ClCC/MC/45bon3RNS7G1xBAjBvohm+5nJI=; b=jfrpEdJHFQjbMwh293jQ5++oqxFUg91R9eIIXb+T/cccc6psQARHvi4jWxQQKMJrXavltqUKIahHdGVVwG/zyEyhlam4yvL7WjX0wR5VVSXF8h9Mcafk8fdb39TTFPVSP2jGoAxRYE/dCdnL2s4ub8XZFa8Lxn7vf6tt1q2L6D4= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:12:07 +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.8489.028; Mon, 3 Mar 2025 17:12:07 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 10/12] xfs: Commit CoW-based atomic writes atomically Date: Mon, 3 Mar 2025 17:11:18 +0000 Message-Id: <20250303171120.2837067-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0494.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1ab::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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 68e56240-4d64-4980-8e78-08dd5a7686bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: XqUAsJRcesGac42VC1KXD7xkOg+rSfM0xRhlkgPDIEI1Gd2mlLg4qYOLYyGC6//5r0GCspqc5Hn7OEh3cKLLx7pNcSmLoi0M9QiUJ07oQ28VQJexe4UmJGjg4R9GIe0ZzHejsUiIwoGr1Nzltw4++TNwd3Ip40ncFWec5r/TVf2szLA8IRUbTZKx9IRp2VQ2L8bslGeJ65WFElLmcLpV19p0cmlv3b0vxGmj2zPOR8smdTjQTrq+O8jMRd71pabyLchg4CV8C3/Fs4O/12hIrdAZCafhNMbwj1FElIVOuav/X8VERSNDTOwvMMxiBv5DSjvVjAHgUAX9lB6QKk0yUsFc0W1S2Qdea0v0sEq+FZaSzv7MR5AuOoEJ2kvwC876yl+lgpw6pRuZgUL7TJQFElgihVckB4nRUGMLIDTYIOL6wlWqQkl7442mHdiApaEOaEhteC9QpZYbE4DAzxzyQdJsxAW5vDTWDCk6FiVCmQdmQuvpTS9B4MsUpVBaJVXb2krd0M8nIdvydw4dVtFKp0mLJ/wB57sli66gCSWqawVUYDR+yXueRuEA2/o9BTaqIiAjsfaBvVOYgQ4lm43nWrs5xhTimo58QnWdFabaQuZu3oZIXwHZ5p5ghrd09o7z99fpOQkarAw1BzCcPyh+26y7p1EWem6JIc17NoejnnQOQgBlix3EL7hbBKaS9608FMxhmfe31Cj8bv/XS/Ps6NBg2wmi346KB9rqfojJcOHnlUNmcg37crWl51jBxtmw6Ps/FOIi18Tvh//Sht7sdsCUHYaItk17WHHOw4zevVTmjcUHnichLbIlQocLXjUd63dBeh82ogi3QkyZN0CEHz7+Kl5978vTrRN17tEnPwWzZgr5fArUkjQenmfJPIHntHIkfXO/mjkKCt5Bu6V6NXNtCXnpXFIsDyCJ/Nl85N7MZQMfpP9jahpWNPg/Llj/0bUU9ddZO86/U0fTac7cTb6zmLjt8Olj3jx+rYrybYJnXyTbQYuJjS1D97QNDOzihNo29Z4AWrEdIWfMt/17JNiUS5KB1NBT8noZKeC5omcH4/2oivvQwvNT0WQ0QhITMypRv0DTxldv/NQQJlmtrfwl1bTbyCO9wg0punX1iuOfxowKGLXb5McWG1+bp22ilqmEIOlMemxHWtfoEBLnYnyhWvgQENNE0s83J93DLdLzYyJCkv46OoP+jypPD8/1rPztegXY13KyMLeYqrXhDJxdVlaadALJRSE1lChA4CZ2f+2o8Owg50dIOFGTW08/PLjVGRgxTwJR4Gt8Z5P9smaLaaq8W3QsbUcANsEbUjKJJ59okci+5bpZO/aNs4bRAVhbeKV212UVCAJOTH2n+wjhK6P1cfDZi6p6nK5txJnb0JwGQKZCK6NE2seLrHSZ 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FOqX17l35BCm3LF4ugLdWSs6dQaUq6ZzzlZTgCvyj2cD1Ektv4vzlY+mBWTZsqWfqvqTAPTm9xbbgW1/2dkmsarM7k8V/fFP+wRu8m5kEo/WxZ7YpKJh1c/ESp6J9eVI2sv20lv3yL0nkx3vwqrUcTSfeSJzsZoQGGMmDBFU1ZbiCaviChNR7qWW/Wmism40KmL8EINCyhqnHNYhqKAHGvk+VsFSLODjKSANnEaaUHbDDsSRP1kMMgiTxF5E6VK4VfVyX1y9ist3EdYn0AhhILYwVebxsPAI3LiH21YOJZ3FoO1+TXUNDHqJ88aHtipj8HGjbOlcr3I9S5QfSXMVoNESaiJFdB8d4wUtep9hFo4dSJTmV6QgtoXKEd0OurAcTifO+DTvno6yzFrJQn/FmPQY13OfqcbBJj1vc9eXsafYEfBfM36bNZFwa1Y/64uSn2NZhj8jhFlfTUVpJKlrzMK45IQp8HuljKwG+BM2skUsLpR6K4ek7AavCB9eEQNPrk+XOYs9GC3AM7UXfMk0d+teORqYPAx87SPKwNjUvpHvoajtf6LfT380JFuL+hSsDySmTEa05N2KTeu4VfNMnJv7Z8yAAFuPUebpwLPZqFBxWD3Swm+dkngONAAJOoE8ihS1VZ8SChySGpjpjWlax27vCBtkUKi8OB9h6XZDOECE0Ng/Ss29FuaU0e3988HHl6pUSIuAdktt6RPTe1A2r9nnPGMjMjgbQRPwnN9BKYpkTzBCzN5JDTj9sbgUcFoaX0ooCyp4GGoQHumrhlQHcepvQOQbpwR5oisF4F3TtALAznxaXxRAZSJp3hkrUBCazNVl6SowkqnQXsG1k9oS5yMtE/sP+jE4VsblfVMlrUIydMvSO1yIb1kgx5rKvgqsmuG6JSgDd1pzHlEVSiBGm+KDt22tpVkxvywCGpbsyLP2InwpaoMMYmvxVY0we5fiw5+oi6iNi5Xvsj+tnWL+BXf1Q3r3JkWFsxXP07uPGGqrV22nn49yUXC7XJNzEyq+wenSquFi8/xidMBYwDuY3mFvv97KnkDwXJ939v1EHzHPdXjgYyjmITK7j9EznILIMLBu7ggOJ6HrzlLRMN2x6dU+41qh/DfiRbM5yw+jsnEH2COLtJKk0Y4CZqI8TrGPO2sEyh10+8vw9SVf8aQx94DWPiWryjeigfVz4L/6Qosk50SNYeUfpOVEYfJIU1XoIYqWnTDtve5ENxp5mxo7ZCCUvAnwdLxk1HY/MlI0aBYehkvOpQdUd7IEI/wjbCcTHBdx4vIREo5wA7jdG/BYw75zlQwnk7aZ+dJtD1tSO/B6LR3/052k1ZI5YB7bA50im3wXVTjjeKGO2d3XqzFkMsOJJfwzYkL+ES0r74wYwWYK+VYBAurgLnNtJKHyl3Yd6cS9PAYwrJCAHnFzK90pOF3O5Pjp+wncbQMG5Bz/Pys6Xq61CMBrqy04fuvJ39n8mXomtfl3QWWHrLBfWkt80FIodP7hB9g2VaJ5hGfxW6A7N/y5KupwAJ7eEUPvtLrwdShh2ByPK/ZSHNcMY795ViS9KkHhSySivfv5D9yao0SiWtvM+M3/JnH8rPkZM5iY2KU08b3T7YyNJz5haC0OKA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 9XY6Txlga7Gm9rWuz45lkLDVHKB6sWbNx76wtwnKzNJxM+9xLoCUM2rJX3S8rmBpXqfNU6Bw87yNlMtAcXRqKQyCYmDx+9XwdDU+/y6mQIjrVOqnl5oqg8AbE2eDlS3rgP6liKhKzNlu3EAx/QO7/HrON4RCLtBITTvGqrrhxeIWgxdoe/klLNWvFTWiGp/GvO8C6q8Mr5j/jJ4jcccQ/YX3lQ/UEHy+wQseTLw6rzpBG5kmq46QosLfw6BqjPt+N52gWKxdlU92njQPeERvkXRP9LwrcmlATGTDs7zj7stC5BRvHwezshlH3MOBv36G2q7KBGylh6c9z45aiPcwFLtF+To3EFS8HHl7dEqHVG2jwjXrtCzgYUrjLI2273Zu3bZntKfq5GWnOBpX4yOBngm4/MTt6Iruv3iiGqVyVchKOX1HUEZXYLrq+LWOjU89/lOLTztOnQMhi+XuzNGUnOvAGmnwiDBRi8dOSDVXSZsFyDMYPU3IWP0O7vDW63K0mdfmsGtcJeIA8hjsSjbNJ8GfwSFqt50Z+laFW2Kx19lK1vPDOzz60FN2jm1+vocRfZUJYdoXPQ4WgFlrTm18zxJQBbTQD4w2Y7vtUeC7bRY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68e56240-4d64-4980-8e78-08dd5a7686bc X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:12:07.1923 (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: EZI8HCJdAO48kGaV508LjhMYzQ/AICu51JzRj7FcUVS5THsKfHJYMgVS9hcX2s2gyI/meMRxs7W0t76qW5EquQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 bulkscore=0 adultscore=0 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-GUID: RJCdgmzwVcNgtlBcDsdSUvxBlGhJi8ra X-Proofpoint-ORIG-GUID: RJCdgmzwVcNgtlBcDsdSUvxBlGhJi8ra 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. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 5 ++++- fs/xfs/xfs_reflink.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 3 +++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 70eb6928cf63..74806c8c004e 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 97dc38841063..844e2b43357b 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -987,6 +987,55 @@ 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; + + trace_xfs_reflink_end_cow(ip, offset, count); + + offset_fsb = XFS_B_TO_FSBT(mp, offset); + end_fsb = XFS_B_TO_FSB(mp, offset + count); + + /* + * Each remapping operation could cause a btree split, so in the worst + * case that's one for each block. + */ + resblks = (end_fsb - offset_fsb) * + XFS_NEXTENTADD_SPACE_RES(mp, 1, XFS_DATA_FORK); + + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, + XFS_TRANS_RESERVE, &tp); + if (error) + return error; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, 0); + + while (end_fsb > offset_fsb && !error) { + error = xfs_reflink_end_cow_extent_locked(tp, ip, &offset_fsb, + end_fsb); + } + if (error) { + trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); + goto out_cancel; + } + error = xfs_trans_commit(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +out_cancel: + xfs_trans_cancel(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +} /* * Free all CoW staging blocks that are still referenced by the ondisk refcount diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index dfd94e51e2b4..4cb2ee53cd8d 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -49,6 +49,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 Mon Mar 3 17:11: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: 13999268 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 2421625CC70; Mon, 3 Mar 2025 17:12:23 +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=1741021945; cv=fail; b=KPBZ8PCcjw4Dk6Vp9oI7bYYOySEyVwqJKtJKqQhWX1EDoe699RYCRIg1qcgmn0ZNU0EI5baCb85snQE8zI4y65rlCMyrdOz7EsnS58SXaxgnmeLDGiC7ZFe662VKIEhn2Bz9Bw5a4nV9THt3MXGdQZWhi76E40+lhR6EKUtL8mk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021945; c=relaxed/simple; bh=u5NgwwPOkP6fmlznjI6Hl19OQXI5eBVU/Yig+LrH9q4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=hfRilwI6uOgeh1k7jYRGDlPGFX4F80ZTgr13CP7Qr/jXPIStRe3qYxmbZqN001nEk3C8tNdi4GGW9i1VX1R1nbI/5fRKfEhFIGucwH2iXtyLlqqUUjTOXXyf9u//ItYCkSL3eddXc7m6XyKvU7ABObRGHbGEjPWYrYWMjzfnIxw= 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=ZsN4KRjz; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=dg7VEG/1; 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="ZsN4KRjz"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="dg7VEG/1" 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 523G1VZ3030062; Mon, 3 Mar 2025 17:12:14 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=T6D5YJX94gUD2AkSYT464ZF5Zew3sqQnvZb7IqSaIGw=; b= ZsN4KRjzE7azj0ickRH5WbJrJQEouGs/XUywv/4Lw1qV63b292SeCjMuY3R5/paC LXSL9Tq26cLWiGGM6BNDaqpLyY7WjT1tV4kcWEdmqQWTfmUDgQIMnE91RV/tt2vL GL2PaTXxi+K6CoOEtYIfaVmTEmGoMwnayvGWr3tcsMHPI34DG59UBN2NhVUpenqh VIMJDUNgOlcRzG+hZIFILs1RDqJ+AUiaK/0Mv8RBfff9qnQhwd9XIOHzrHY04gh3 guDhDm7laMNvEU05Czq0bj24qtEwwq4YDTLGHMO0wYY8BwU6GyZ8UZsfPiXOQTQe Xw4/BGdNnSslZfVsauyLAA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u86k61p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:14 +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 523G0Ji3040320; Mon, 3 Mar 2025 17:12:13 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2049.outbound.protection.outlook.com [104.47.55.49]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 453rpe1fmy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KfSzKO+K2TsagkJnQr87B/otFGfLZTULZBceo2u6370ZgQimbq+Roue+b0FHZg2E7AkL/5lEF4SU9mWmrLyaKeqHKQbsFwnqQH5YS/RzmAtLnxVP9zfcQ++GFHDIhraLqIW8G3Xnr22WGfFCTM+5ugrzw1K/G5SWO/0fMwQ71T1y0e+7fUAk/Uoa32Ih6C4sW53h2Gs/1QcO5QS0ANHem5Pwyuv5gi9//lFovWONTG9oz1L0CSXBIwcVcD5hMUD2uFgja/LszTEFyL7Y3pQ90tpkHm1p0U0K5a8JHClGvrEQlpugfE69Z+Vt2/aHbvgM0+hsE+h5gjad9+HVGy3RSA== 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=T6D5YJX94gUD2AkSYT464ZF5Zew3sqQnvZb7IqSaIGw=; b=jrvp6ht8GFMQpwmgu7jz2CXR0RsRsM6WR5JxOFsffKieYrPlTVomMeChY/wqVm/MxDTo5Kc64XC/WF1/boQKeiva8lERBJ5HrcpVarBJF1R1EjDT1gg2Jf+1OzyA6/RZX0U7uOdKxqa84brVxcBr1+SvbN76jh7JSDHtD9CFdhBEWcKyQT8ujSXt3eWmQm6j5nV8wu3BrFDH+uBWcT9E6OftOWco5cpB/xSA9REfIdXrLDK4KjeiD14xYpBS8wVlRSWwYD1XNKSun97u4lox61BbGENrb495BEG81mj2AXQD4cF5GE1+GLUeLP3DhBVaYWpE6CmD/ZhZjg/ov4mrqw== 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=T6D5YJX94gUD2AkSYT464ZF5Zew3sqQnvZb7IqSaIGw=; b=dg7VEG/1dnYoXlnfL9RwTi2Y+bg876SvR/gzvHu0bkHjhFXuCNpTplwx2Bc45scP8J4YEU4kANRWo6g1m/0QgqXXK/acNLKo2RUGWcHKMO/lQv+Qpw4HEOIN1DFvhdg1Fd34L7JO3ZElM0A3PZLoMqTdV92VwJovIQJo9M+O/8E= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:12:11 +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.8489.028; Mon, 3 Mar 2025 17:12:11 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 11/12] xfs: Update atomic write max size Date: Mon, 3 Mar 2025 17:11:19 +0000 Message-Id: <20250303171120.2837067-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO2P123CA0019.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:a6::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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: add4fe4b-10fb-4ebb-cf26-08dd5a768919 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: YoRvJ/7nvlbnHsS6ba+ltdvdaeeX3MEuNDKTEmeY+w6rjdFMXtLN3njxX40XseZRk96sfHzlLtDe4U0WFB3cdgvRf0dWXvdNAYb58Y/ANMkHYNyAdjkvoU4eISdET3Y++cv/wR/PkGyBVcI4xeGXQ8uzmjq7ln9z+c0Nwa3Mo2su1WEemfrO6Iwy/cwo6DGP3OjlRguxe1l/3ggpNtCWarz395qLGCofF6GC2LMc0dLALljvXZ0CmvAgzomgbOecdq6P2qVZnWkmwofKgl/ZT0z80VaE3as9gseJPyQ9d16YuadttiZDjcfAc7X+Pa1/aua7nmEUcVlvA0FqLO7TgntZEvvMMUV8+VTWb07QDit76PRoWkZ/6sJ6jdwRnzMFt17JWEba0RKX4fyDgljB7IqSbVBxn4J1MRSF2VRqNAwrIz8arPDPD1Fb+r3Ke4q9nmQsdt8OH5YAu1tLAWX1UTgRrsD09f1RYN6XRGwhUSA8QKgYE5IcwQMtLuZX/DsdrBaT8yEiyFW3lrk9yOyGfY6gjMlSLU370pp9Jc+vu3Gdz156yGS2pQYxMVTPZcb1hiA0hrVc3yjKGZbNSKPTw9itN5NKNZaFQVoEZ+ArC21ag0OgRnHMMVDeltji/70CdqJ4gdQYI99VVIPHN1R+3yr8OUkOSBwTi10tJG2YRTG5JyDDrw2lvsvWJjW2LLpIrUn8XYL9q0WnnnvEUkwnRFDOI54h+T++FcDrJVyG0bD+F+jNsEib953J2nGajdquprizHkh20AOfrwC7CuCAqy5+RtGUG66dLuNe2oqVWf3hjH4SLKUh03vZnrhgrO624Exs59Vs3yckoso7gM4rfdvBmbrDmupYv8jahERDDk1ISd1InGBYboHsFhuLXIFK+Zl6wLzbeDkCVN1WbHTOo+LPgCDu6/2rQiRVHxbE1BRgIMxREboweRhHrNgA3u/A/7Zla7yzT3EubFznhwCxLbNYiha+M86E7qviXkhe1rInk3JmGlQTaipaFTazoAgcyxL+HjXcfEsAnqw6DT/ZJsPpZ/4i8Er8NmtVNhVVBTwB5wQC9GgdNKR5Ognj1J42gLV2tfJrd1Y04fDqVXdxW5/VN7xiFb/H1M+wKrCQzD/pCXm3/TO4jwe5fe5jTvBvrD88lorUL/k7ikXcoloXXWP8QYIql7TJORMHoWkN6iqC9R+FphHhcWdMXSGrRVOQ16+uS02aVD0YY4xgCUNXjjvpm37kaEwv2m861kPKodpb276J3SfQzCnodPePfMnPQl4KkjmjCL+cHsrsNlpgvSFqFHHjKj2lnL4v+h0xWD5OODhuZHOrfmxXJjXrkDAf6R7AJow6xGIGEbX+sq4hu+Do4kJsM0jxu37MnzwmHJMEDktBNkdix3vsWH+nyImo 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +DcPwvDnEbzSRn+o5tuNRWBOYXcS2T1/7NvhrneaU+XgrH5xof5nno+LQZ4ckcwr+7QqFtsiMsxkzLDdg0siFbyHTZeAdzCyGPitn1SkElFZJCpxOCvmKi27YIutZY/UZKTu+c/dsojLUSk6Gq/hMyeWM/SsrMJVdQgktXHy2ITQL6mkCVtQ5BqwLqKL6DK5/VvyIdcWD+9EcSINjMrufvm9ikq2BTEshHj6XKvLjx/dYzRGgaR4dALqVGwg4ntaUymPK0Bq2eDEJKPzE7pCrJOGD46zq22Q1hpGg/NwdBe5mnQdJ8Ls99/a4akFYxl0a7cTWtCOz/Ww/HImYNyu05Q7Xw6LV7uwFlG4jm/T+DcN028NJAA8KfpfG0BiY4rII+XpTFS1rnx+iRT0JcULskebyJyhzqs8M/aXsm5u406bRoNB+0a7EH/x05lrNjgsJRMiVRQrl79lHwZEq4oEWyU+WqqK4z5wBK1BEmuwV3LnPctbYzHgbGArHFd9tX9JwCcuDanMArzj249yXZcDSQunTKR/mdsLyepwjtkBNLAky1bD+nmwz5qUs/zep/6QqObvmbkO+P8mUrrZZpR7iNf2tk3B5YK6gQnhMpjsR8UsFo6d18QU3qDs/pyh3RwTPzHuaGOJrsCPb0pAauQg/9gZhHUbYc8c01+sY4XMgo8crV7i+L+S5y81Ene4APFyhz+YE1s7t1Fk5t1EhR8dKJCsu3l7dWfo2RNmnPmDwdnMMYLIAyZe/X7ggtpo0LcG85BMmR1pgTNrS47LIEaIVuRLs4h4Ar8HO2Hk1G0qdQCJ5X+OLLcO3nsbPGj5v5xyMNfi7qmmWXA0+XAduOHSaUjRfeh2HHwt3hcGXoRMFTRVSZAFFvFOwCFlS6fQlRUhEqCjyp0TyddAVxkc1xYctnfkdYeN2l7RUYcXFEV5GeIR2OFmw9Bn2SCLzN5fbssmu0ukslWirExPHQqJPnm8fALKM8LsT/1GmSl2pxEDAuQyO0iKNqH+Za9yT29XFtR/iga357UUKa5oHx5bj1TEkcn5EL7DBrYtnU5QVQGIacq7NUjshL/VAsaKTn61Yo5MEi3ntzn/wPFIIjxC7QWrtbPvn8qPQbT3iHnqF/90SgXdckziGnY1gQs2W6nmMTUMD5+iSmNVzpN2bcJCWj2mXdUd4L4G3xk6nYgBs9gBx+sdUs8GXJg2rJ6ffdlneCiTC0AXai855elyQxXAm8bgwvUBvgmlt+HK8dEDDcX5+lArKTuFudxVoGkcpe/5UwXGxh6Owlgnr65pSR9M7ySKf4SDl+QlplptuiLQUev6byQmvkcEpzRJMVivVo6EHzbZqx4JSLLitAB/5u2rY/Wo8pDlL/U73Z6yKO8I8vCpa6JFocyI0NriMs+tTuUo0aVUv2nHaMKs4hJXPwDywIzxprdDoua6sc8dqlBCNneh/XQgCuvEXfbuRMBfad9QvLruLaZTcJk9yvYWuMwYu868/+y1/MkiKqTuoXKBVoCFinVFeOCfvxgDZsD5kIM6vZeC0Ma1i7HFQ+b9i5XL/pKh7Nz5RWSf/UT1ciON9hNqeydp6mIXn2KHAUV6O13VYn+Opb66mz8HgcZbA/KEk13x0Q== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: q1EUvZ1NNatf2WGGLeGhm6Xxsrav+7nPxAsD7GJjLy/NB+7pO0jBR0g1bZqwXSVAcnOj8B2hwD9LBQKjWIzsOCZP0tV+SsPoLquli4hVi7EQeBQwfo+n1dy090aTrj/Q8faD6wklsQ2VIYvcDLhlEzq7EkuYGy4v4tvViddFKJPM5HeLjMIX5ODj4ktExBxVeBilKvDsovSQKPSM2EvJwRc8sE3bbES/Ttr2X2c9W6nq2jqY+wyHPGfG74pctLXFMFIRRGhFYx1jU5uUaCVFlkL3USYfyCTuJKxSsKZeV/kSj66Nsv+Kwj881aaxJJdJGTSdw9pU7cVWA7Jo45MBWUzp0LmeQ+Ws8sxFNpUvM6A71B9FMaXwQDBVZ+qLXjwD2zSm1O9LZWoCVv6Vm5dCkeLK3hFbmEFRW/M1BSN6Ly4Izah40CwzXpgKR2YolKYt+8BIt7SgTlcRVPEZrmGcBMIu8eWlmOtubDyppU58ssxwqo4yyRQNqliyuyEXnGihyqcqMRQ5FBx0fFpouoaRSz0UpUmDChLRl0yCOS0rJVbLUGNifT/+/JMt/ZQgWSM7DFvDotkZxvh8ybyWdbeaqbMdHiFp0y/BQPhUsWdWons= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: add4fe4b-10fb-4ebb-cf26-08dd5a768919 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:12:11.1133 (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: puzkITM6aoz8BIO9kLdHW3U8pTFuHxRagQgZ8N/JUdLKV+11J8L36zm9klk77pe8Y5YjBxcey+dK0KCUqw6bTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-ORIG-GUID: QkwRyV3IMpcp6Fs93wmF9SBtgWljuKnL X-Proofpoint-GUID: QkwRyV3IMpcp6Fs93wmF9SBtgWljuKnL 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. Limit the size of atomic writes to the greatest power-of-two factor of the agsize so that allocations for an atomic write will always be aligned compatibly with the alignment requirements of the storage. For RT inode, just limit to 1x block, even though larger can be supported in future. Reviewed-by: "Darrick J. Wong" Signed-off-by: John Garry --- fs/xfs/xfs_iops.c | 13 ++++++++++++- fs/xfs/xfs_mount.c | 28 ++++++++++++++++++++++++++++ fs/xfs/xfs_mount.h | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index ea79fb246e33..d0a537696514 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -606,12 +606,23 @@ 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; + + if (XFS_IS_REALTIME_INODE(ip)) { + /* For now, set limit at 1x block */ + *unit_max = ip->i_mount->m_sb.sb_blocksize; + } else { + *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 b69356582b86..c6fabf7ac506 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -648,6 +648,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_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 @@ -733,6 +759,8 @@ xfs_mountfs( xfs_agbtree_compute_maxlevels(mp); xfs_rtbtree_compute_maxlevels(mp); + xfs_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..bc96b8214173 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; /* data device max atomic write */ /* * Bitsets of per-fs metadata that have been checked and/or are sick. From patchwork Mon Mar 3 17:11: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: 13999269 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 58DE825CC8F; Mon, 3 Mar 2025 17:12:24 +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=1741021947; cv=fail; b=aXKFxMZTOt2AFH/S0ROthzRps15tjsmnfsL2urIkMy4oJ9veFUZa86nUP4bqED6XlLPoHkB8I9+/KQuSiy9FsoEo6ryQUjanePWBhvLsyuJlf8bDIZwEwomhbrX/HlYbf54DWKN/lQ67pC2sSybFlwYo4WfXogz54T786WWSDqw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741021947; c=relaxed/simple; bh=Ew5mmVK8Q58H3hyOE3GF/xUDrrAIp6SiKFKY0WOHiKA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=RxttwbjWqKKGd4ZenSpIRf6TpLSXIWEvs6RHH1vgcBBjtsdrJzgxORT7+jX3ndz8nXscH3Rpi8N97nh31hQVBq/FvYWeWAUqfxGlwYB0h2ElhbMER1sedWiK9wVLOZo1IO/1qt8aEzg1Qlm77maK9bO79h7P0M00FN+twfeuRdY= 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=hKC7ntAs; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CxlrrNxK; 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="hKC7ntAs"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CxlrrNxK" 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 523G2WPk030312; Mon, 3 Mar 2025 17:12:18 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=NyicfsSOcVUe3XC4hGKHkWG7h23c6u9MWAkfr3bmx6E=; b= hKC7ntAs7b9Oe8zRiIuibLxniNVL6mdJmo+oSP+zPiNzjeiacCE+lt9uuKOzTgOD gNe++lPRUEejqumYOidA/SYccnYcqz4ihUEcVRDRaap4hHoip128RIXePQJcnxBT CtysWKbdUoAZCtbot8JeFavv3647fLuxIztYYJNT3pWOvo0+yfs3+mAJq/XgSQLq /y4bLHKd9EqiNDUJCULupNx+ouS/V4Pdx3xhFyQ9OIgMjYDCCjvz67dYMT0fPCJu fQl2AZHS/b0EALQVy8ssBPiaVNK0hzJ2Fj3BOHUGmV6Ws8Mn0CANk270H36B8VcR hLjctYFogXW5NW8X9mMUzg== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 453u86k61x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:18 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 523GmEkY039110; Mon, 3 Mar 2025 17:12:17 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2046.outbound.protection.outlook.com [104.47.58.46]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 453rp8g9xv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 03 Mar 2025 17:12:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mpIrLhV1y6fezkTOiu6nUD4lIy2wyy4ODRWeRRMlHkCu2HAi7SeoIHxEamBus79eE4iCD06r5WkxiefsBWOSojYOO73BC+yD5/HBJkLNIRivulMO8C0sFuiDetVl1pXJdL5RiVdHnkB9n3pGMixiJasqzu91md2v/5fAzRMKDFOykyIa+JCRg9Axm0pDTml9FXIASe0jNuXy58z/kBJZYMAXUyF65ST/7vm0bNGTASiTcesqcsVsfXLzvmT5/76aFP9i2LM10zbovp4h/Df6qTvAdFg5WmtAkDnt0sbd2JPvaX9v8WrNPdegoT2IrTQHDwvvafwcDupVG+5spmewyw== 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=NyicfsSOcVUe3XC4hGKHkWG7h23c6u9MWAkfr3bmx6E=; b=dPvdRczlLkiOgWyzCAXDGkJXccmrJu7gEcfxy7xrkC0KQ7yS+pxL3f9a7CN7782w4Mmocs0Hj/AhKBMCD/9Qpm9X0pwdjEUiGhZBT/y6/IoklBaWMHIrTZIKym2GMLGcsJQYigdZYfd2rJYXdOu5SQ7kfuDOCU1+j6PBvup+A6zBeagqxOuefqnjsyFpTGhaqNQReMtV5d2Q+erJSlcwTaaXCEga+1glIZndaaFSeZPPdWhVkM5TN2FkvOKGeBS3YsAXxeGWN3ro5Nd0FFeYdlrT84ukVH7I9bKz/O50CGsA3eBmlqbFN2Ychn/nbefrE99R8fqD07WJJbLa2XY4uA== 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=NyicfsSOcVUe3XC4hGKHkWG7h23c6u9MWAkfr3bmx6E=; b=CxlrrNxKCpGlzq/X5zLV3aBN/+bcy5hgiDLtSGgOv/ZQq0T5ZE8++wc+RrmLl8u9s1EOEkoODksiOhUg+5QyH5XnDqCltRe6WHyQpxErcSZlzYZXxqV9+v6b+Bo/nB/KGNNvsQsAoI0KtbsVQN4tAyk5wjGuLB7FSKR3pHtSL/M= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by PH0PR10MB4696.namprd10.prod.outlook.com (2603:10b6:510:3d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Mon, 3 Mar 2025 17:12:15 +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.8489.028; Mon, 3 Mar 2025 17:12:15 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org 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, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v4 12/12] xfs: Allow block allocator to take an alignment hint Date: Mon, 3 Mar 2025 17:11:20 +0000 Message-Id: <20250303171120.2837067-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250303171120.2837067-1-john.g.garry@oracle.com> References: <20250303171120.2837067-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO2P123CA0007.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:a6::19) 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_|PH0PR10MB4696:EE_ X-MS-Office365-Filtering-Correlation-Id: 349b54dc-a83a-43d3-e3f5-08dd5a768b71 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: XUPkx25fZEvWYMb5oHv2g9hteBaKrzzIgWhNhQdbskK1MNV42+iUbHlgOob7Lm0DpooeJPobN2uPGKW5nRysdPa6+Xjt6Ao8/bMMlCYAwyMNeauXYX/9h4SeZU1Jappa7F3q2YN66D/G+nBYpt3r2QmU0kng8Qi09niwNk/xY0YUK5oDMluKVtw5PIkLG/vAssLG3x2jj84fDbkY+yDtrcTMbNNx6RzD4cYMcwhYU596+30lQf50VbDQch5uD6xeDpGiFH654VcE8DXuNnuRLSXZizqePri3If1WwIUGkuGwGMxukCV6Wk81EdYKneTprbEJ/07AHyZaTer13BfcFNxTeSbuqpUVpYFZY9KkWixE9eDs83P0gR9sUnhIo84NNOf5V/fA+0xlhCpr6pGqxlScnk8LE45ZGIw5MAv2pZMbTECov6qoXG7qqjrVYGbH59IykX387FlDG4+xogCNGE7OpqsQTX4ddPyADjj8HFXVB3ILJYjuxmcyTLZwfcibNprXNoVfpEcSBUSh+5au2cA/ItnZK/rXy5cPRJlO+WlUcNWpGS4S1LclfBWjjcYVqnh4KTw7kjjWtKtp3ld8nrDa1H3HT0dsvEhC6H/B+egOeJBlKAnFMMeKjkb1Udj+UxJ0OTGPIASLyPXDjnT6pnQXrSEtvQ5opsTwQoP2nUzwPglanqvxAyNcWiyGj8Ep+aclamJlMVy/O4hQif9TRi9rcOA7p0n/tV2oENMn7EcPYNo5EvYgOhtivnNA8M0qsFVbGGnpQOECB733uefDQ+xkpHp4dWHx+ZRDVFOEFwwyGKONoL1I94xCukpoTzJhTgaWrngWi4OUAlweQ/K6LEbuuIXNBQbAkzfsV5n05jno9zf+zChAq6e/5gwBTZk8D1iL28yI0oFftkRxtr4txwTQ54ly+5HrtgCWuxAzTJl5U25wox6oOH0uOFD76QTNE9WNSeXGP+Y4Tz9Hw3FAbMbbkOT5IHcYEpV0VJAjl4fHGyVb/b0hlc5FmThK4BVY9BTSFaLI/KPZHL5nwmGGw06Fav5n19PrWeKE1EtctcOHv0p+Creybud2ACKi4sn5d30+HaCIK6jYclACIFl9OhnIVG+hPs/NJ+Ds33+SuG8kW6PL6kW6n61qWtAEOXlB+YFL6/egr/d3gz6ebiVrUJL0e42sr3Jk2qH/Iq9Qg9dSQIOuAmTwrwy/4Q+xa7kRUCemVEjRZCeWVieC4IYdUDQ0cBoYB4YE7NfwQ1ZWOOXqrcU6IJoJlJFP4z90xNNSV7NrebHCvo+ikj73LfAV9kAvq3w5H8zUetcxmMkH4nfxENl2gPSfbhYy4jnFSqzfBvXXxfceZDigML/L5qY4lLTOCei8v5Zak5isqLZALrKU6s98T+I53M5P8OvhJvBg 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)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ALcMha15tVYbGZBCNQLzQTmAv+SFlhvDvxoUWEaQoK6fS77meYEH8c3E/r2EBb/DRXgiBCbxJXKnBjEJFFwsdy38+WiKXl0yORwOGjtTE4eEjtcFvKWXLX211OEJ9OYE8csfnFWQZmCCoOU6B8qaZN4KEkRm31sQtqVkRb0FBGd2fTPLOSnlRBQJ1Zka77pO7dOkqxspHD4rOcdyao8pg1pHRVZp19nTKkZVx/FmdlU1WDNRIgbRrtIfgndweps/B44FT5eBMtBwlljW4RX+1zzV+vkixvyMU2K9LH7KeJCf5Ji1hmCmFealbw1qWZEwNytXsofuRIIzx3FJuMAkHSAk+I3zr040Xmprd2K8dQJOuj9VZG0vbuha7S9U7dEnuoTr3GxYonof/7EI2ifOt10+lh/5kt0se4rBrF/zW/3oHj7TiU0NkJSN2S2aVtZdY36T89Rbh8wa1VqegObVyD46l9doI+M1xINuAcvm6cC18bJPeQSCckz91HAuTxTpbwI0+QeWzX0t/Q/ttb1sYTqh5WY5XFtRppDMmOqAhMlhuC0zSbA5E5TUzfYGx3CO8KomdbEFmQLrvrl0NHjURPb6QJhn7jWxUmFtqYtBDJLg+Xto0XS+MxvLvJwBE3xAirvV6iK9OwPN4C8NjxWbAN/Pqha6t6z55WvxxX/HZJZcGAqooiK3QRj5Yfh8h2ccrKRgA2MiEtZ+ooKMuZKkI8wu/VomHgeJ86codIWLF7Ih4FySiqHJt45DxMYtYydhbHHy4bNLwisVYzLztQupvaVS7r45SCmXT0JH/sFaNZB6sIm9JicMnYK1akpZjCvgkkH7C8Jju3amN7EvMwO8vM1ATHdDYjU0pWKnz1IuPpMIbhl1Rt+DiRQl13E7LjDsnBhYUKH/ItmCYN69vduuNf+rHFOPQP0lssBcmXlYUXjmiO4HIlKMfS+OLCY+ysDNvGJ5mHvTPfQHCQrDLObk1o2RE1i13BRvn8TRf3xC0fOF1AtaCtUsDbP39QUZOhQ4E56blr4BKX7pDuZt+8RhFFzbJRtf+kHMiaHKkVlJTW7ouJGWyQ4FAXF9IUVtcHgAmk7iCJqkphU/Gaoh07En5VyZuQbLAIfYXAxx2goF2q8xzVoSL1/wVdozqigbnNES8qjvvD3uUE4U3GMWT2Z9pzFVslDUUHs5COAq4PuuutYMKNTi4y7LNuM4jc/yhpfZKGEOuQcwzfkW5n3kAeA1U+rn7jbvZ23/7ez6PlOjyCKhjpAc7KH5Riv4I6kADarGvgePpLgHS+qWNl9gLqAG4xVJGX4u9qu078Xnzed75Z70W7/GGbdcSWEuvIjdRCd/eSjMMC6+joU1+cMfyTjI77umY8u1io+ZXIq8kwT1qqqQLzvQ6L7XzHhteOwcpecKhl+65fVYYjUqYIMHwWPSNUG2BTzZ8FC29Tb6cuD6iM6+OzU9K0TQe61eRqof4TlSwvWgJltA5yooKnCWuVnId6oRJ8g4wI9UD1QPg9kfgvlvJSCtsoUEjY7Xe01sjrjqqawCjQLr4jL4HgPnbwqceVPTU2THfhR11n30qfSZ9Vy1ksWdA1sQdiWzeeYtEyDk57LHEA7v6hGFdC0/k1EUIA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: CVSKpfCwEy1i53Lw33QV5o4pNg9PghY5hnZa+dxKAIa/NezYLZjkd+MKD2FnwqoT1iHsO/qsTZ86aIUTiib5c+rQNoZ9OeRL5JXB5g4LRo4VSCn43RQFv9iteiemcRa+477EqQFuy8yjRXuOjjgCUsVmQ8C0EEdQ7kqKD2qLn48l96UhnQ32FUDLXTDPB/AyZW5RohpSzXEin6SQhAMB7AUxLx7tyT9Vrr88lHiPO9C/FECd42lDJKl8x9VldRLr3QbNN27P7SAKCJjuzNLkpF3GoHRd3T9m6MpbEqgGsWKMR7yQ/EDRtzttmbPz3mMW6LFzFHJ4kRHtKMUjt9fdHDhydjdnPgIMu7FItzkOLe/K1h0FPuzDi4mzh/AyT8N8TPLFTNnLxWLpuwSE2Nn/IFdNHz1clPdIiYsAu0pzDFciW2nh1BmSt7X7rqXXSSHgWolIh7Fdw2NCbwzi8uHDtJzgFYFoDrpxhheRLWlwvJ7ACZhToZnxCB2ftUSIU9yQDSJS1a1A8+xlh/fiDVQMEGZxRCsErRyhCluaLEyFgYqg4L2hxQXKqCotoix2SnhrN8rct57ZUR+ZSOX0JrMcPTrf2NARFQsh2SrY0Gm0NmY= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 349b54dc-a83a-43d3-e3f5-08dd5a768b71 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 17:12:15.0618 (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: 7xHOSGEBn6f7Pl5NwHCKiwibLejHM5bv81Z3bKn7VjIjdcKNZxObpZ1gcYDlTwCgN1j+JKXLXL13FaQOyjFpxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4696 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-03_08,2025-03-03_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 suspectscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502100000 definitions=main-2503030131 X-Proofpoint-ORIG-GUID: uY8M5dGTeK4OXk8qhK5uJ-X6gasGUid1 X-Proofpoint-GUID: uY8M5dGTeK4OXk8qhK5uJ-X6gasGUid1 When issuing an atomic write by the CoW method, give the block allocator a hint to align to the extszhint. This means that we have a better chance to issuing the atomic write via HW offload next time. It does mean that the inode extszhint should be set appropriately for the expected atomic write size. Reviewed-by: "Darrick J. Wong" 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 0ef19f1469ec..9bfdfb7cdcae 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_EXTSZALIGN) + 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, @@ -3782,7 +3788,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..e6baa81e20d8 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -87,6 +87,9 @@ struct xfs_bmalloca { /* Do not update the rmap btree. Used for reconstructing bmbt from rmapbt. */ #define XFS_BMAPI_NORMAP (1u << 10) +/* Try to align allocations to the extent size hint */ +#define XFS_BMAPI_EXTSZALIGN (1u << 11) + #define XFS_BMAPI_FLAGS \ { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ { XFS_BMAPI_METADATA, "METADATA" }, \ @@ -98,7 +101,8 @@ struct xfs_bmalloca { { XFS_BMAPI_REMAP, "REMAP" }, \ { XFS_BMAPI_COWFORK, "COWFORK" }, \ { XFS_BMAPI_NODISCARD, "NODISCARD" }, \ - { XFS_BMAPI_NORMAP, "NORMAP" } + { XFS_BMAPI_NORMAP, "NORMAP" },\ + { XFS_BMAPI_EXTSZALIGN, "EXTSZALIGN" } static inline int xfs_bmapi_aflag(int w) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 844e2b43357b..72fb60df9a53 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -445,6 +445,11 @@ xfs_reflink_fill_cow_hole( int error; bool found; bool atomic_sw = flags & XFS_REFLINK_ATOMIC_SW; + uint32_t bmapi_flags = XFS_BMAPI_COWFORK | + XFS_BMAPI_PREALLOC; + + if (atomic_sw) + bmapi_flags |= XFS_BMAPI_EXTSZALIGN; 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;