From patchwork Thu Mar 20 12:02:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14023864 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 2DE19221735; Thu, 20 Mar 2025 12:03:27 +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=1742472209; cv=fail; b=EpXYop9r3lPs6/SqcRzKJuOGA7VvFxeJ5dxCgsUE3VgGj5Zt4y4UWF9/xg5/gjzqnDG+Ocnx+Mhr9r609MUWT3F1Hs9W0S9tSVig06Q8qXJKUN9GfAxm426H11rF/MPqkzrwHGznwha4+rWVqSZUFvMbhzW6JRNZza0H1MaHpU4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742472209; c=relaxed/simple; bh=fZWzpdc7blt7oOpASM1kskw24j1CHNyENjwszAFDMxM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=usoQgJdTExsmAPBzu1rHX0DoQilgmPAn0MTtpug4JiHRbOSUMbSKPpQH8ItfGWECxEzJg//QNAGNXTRTQuRJOfYFqW/+YCmQX2nriaKiw17IK2I9cZGSGmrbBL7d08y68q9xYSsG3y1vZg0LXz70vzvWWrzvIVLuDmcdzWz+mDs= 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=bDq4a9lk; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=iTzAiMb8; 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="bDq4a9lk"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="iTzAiMb8" 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 52K8Bu3v030551; Thu, 20 Mar 2025 12:03:16 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=j3E1OfZryech0SU+PSDrhkYcm6Sv1qHqTWhmr4cK5i8=; b= bDq4a9lkyYIJaZRrlJeUkdLsbxFE2OUQrux1Z6LDm6WkJ0rZTd9QSAvGPT/BzTjq jL5Zfh47pBb7ejWeT+ArM1ARUGnY6hLBj/9rhbfwKGv/MKBUwZvrOmY0ZciLpef/ p94MRwGyN04G2fn5kBx8fB3ieweDfTvsUZjHyhuVbgvSI4oxy98ndZ1Qo/pM6wcY N6Bv1YA0m1GBezJzWnBXdAnD6AyXPmf6AYMbB1TzgYGi9k5uMUapUUp5Cnf3MIxE jJQ8tPDIgPM92s6qAc9J2v/H7dc9tr63oRMu+SDt5RX3ePVh8omCEGY40nbyg6H6 thFtMGuJbIVxJ0h9A9OPOg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45d23s5xhb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:15 +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 52KAeP9X024475; Thu, 20 Mar 2025 12:03:14 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45dxbm9xdq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=p40MqEvPxQxTUdq3qQFMKi/dUebqrE/Hig39TBCeMqa+iHF2QkcanJCnn/rCFmEj1QHGPsu1x26kb6xLguR1wHuNuSwlDWeeVnnpPhotkae4JtXb+WoJq4W+3NfgNujwCjh4Wg/61+WcDK2Zx8uyjV/dqcGwz2TSGsRAA6uAd6g3yYCEUS8M/6hKcd6JYnmaV0C7p8xD3J6KNUgERlD7b5Uzi5RWQ85rBn1/7Eghx+bktGc/WjrtloS6jJS2Q1Bbhg+UJMjTPAPEzBATmQ1TDA0lgTRx2C26hP+wXxjNbMAkBgOdhxt4y7wYzTWRfhBFxEOcQxFkAUbxhfalHyrOOw== 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=j3E1OfZryech0SU+PSDrhkYcm6Sv1qHqTWhmr4cK5i8=; b=LwEbcYOYyTSXtSUxQegGAzzPRXh2mo2Hr+hIzZORB1MGtc++aQf/zOhv8i4grF9XYg9v4dHAfcqVyCU+JOKK6XdMNXziJ760cdGX91KUXB9YSz8cXSnRBPQTzDTaTbuFxWysgrQcg+gd20cm5VB83zBRGg0kykeqP7qO7TY25AYGEbktieZ2N/iHcFrve+TMPm68a0K5CUMfzwxiu+EsbzQIeq5EBXFBmS2Go9uStslIb32bvoqAkcrI4x9EFRix9d3Eyg2HpfmLsM18c42RVAv5m12ecthzfizkUndP6asPiCq/DVA7CH75tZMDDeJulENEqePMXxkFe1ksEWUsfw== 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=j3E1OfZryech0SU+PSDrhkYcm6Sv1qHqTWhmr4cK5i8=; b=iTzAiMb8+0LTt99h+VvPIHOleCnvlrHhrGEqo1qSy93aq9XPRF2NokaIwMWafwFO4UJ0AZJslzSL3kyBC9T4ymeTNdgGeLmyw0jxONWkFjx0z792euEmd6sjqh3EnOflz93A4/vvRu7l290oa37klSMkrkSgBTbnoIiURwpV+DI= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB6902.namprd10.prod.outlook.com (2603:10b6:610:14e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.34; Thu, 20 Mar 2025 12:03:09 +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.8534.031; Thu, 20 Mar 2025 12:03:09 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH 1/3] iomap: inline iomap_dio_bio_opflags() Date: Thu, 20 Mar 2025 12:02:48 +0000 Message-Id: <20250320120250.4087011-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250320120250.4087011-1-john.g.garry@oracle.com> References: <20250320120250.4087011-1-john.g.garry@oracle.com> X-ClientProxiedBy: BLAPR05CA0048.namprd05.prod.outlook.com (2603:10b6:208:335::29) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|CH3PR10MB6902:EE_ X-MS-Office365-Filtering-Correlation-Id: eff4403e-5d56-43cd-cb4b-08dd67a72e5f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: 2jJ2U0K9L22XROcHtplmVUYDGw8o3nbz8lN8BI3hbhQWsPV8+ZNV9+a86AzpY+dbas1e6LhJGqSG8+Alll5+qa/5nN3APGewZbRim8LhIfvGbR+mBNrW/4DuGsAt3RSRikMQDm7AZkGh9190Yg/n8MXw7xyylze2Ic5mdYuWcEm5dxIHZ65/vcGNrv7hqDjJ3ffLjX0nigUtdCBMPOvDaGmo8FaiqWIV6OcPNbmzYJ9wvS0q8u0mwHnnvy5MdZYJyQtTQt8OCXivgaJl/igqNzWUXpcJa30hoitA+p4tPxjPnDpeSG+dXoXIVgbIsesE7pHXbIJValIMnxZL2YuaTeIKR7VwzxJufiPRy/X2dhEe5zPqATXPEzg581tcPMaVCPE6OfffcE5Cc3Fu+3r2X2KHnR8Nm6Nt7qkH8DYDwKi0ucJabsEM9dfdg3inLlmiMWIMLAFA29LO/eiC/wUdp47tKSjL70XTyejlCGLaEK90NT/K8MS9PiqIhwzfANvNTGa14oz88jAWZ8tGX9olb7nmDZOYg6vx3K7B+JUal/Sz9jJX2lGQOHqU+lW40qv42pfBzWUqEPzx0J7W0Ns84pg/bvBawM+E8polnz5gRpLvw4MnvV9BKWfm2n02/CzDPX5uzz+HN4qZOh3DeYqVZlf2x5V6GFQl9RvIBR4PznNvnpGuTMhA/X7utnYvwCrIkuFSo1HCrjQ2cpMSM/mVLBPUrT2qUIah4nFXmFOfKjbxNJqKmk/1IndSGr1JlMi73Rj5AenAj44hW4/yxzd0zHzYvqbtUEwnmpqsZT4yXgdHvzr+9T5hVP0Rq52/j+clWj4RTzaE0dVOq6HeBmiGhJquFcb1pTYrfyw4SM8PAAkHFBQVra2Wl9SGOVLtbgMkpqUWUtkAa5eL5fhnYeAXkF1OwI1bYk/TVK3rQVS0nSW6k4bsprgAZlm+bYW7Fd6xxQhn3G/62yP/uAvBuU936Z2WtTMZ+LLoDiW5nbouCZ0/hvdpD87vmAAn+ieNrFpx84fS7HhtUEjnqq6RMADBc7UrH+00UhKHpvjmXpVphZgLWOOjENmO9gyBmI80sRvJfKRBA4h8T7dpIPmwU4/U6key44uscUyLqixpb0KVPfcBoBv90rDLaIWj2bksoESbG1Xu8I4NOy/qYKPy42QiXFqKFJdEZIFmCFRPxT9bxmL+Ag0pyD/LxxcrjeQas0D7DQaZJ2Oq39cu5PXgPTSlFY6oS+HcDJdzAQ94bG3MAs+lNIkv1KsvxYYFdm11pf0J83UsdeNBgBT29KM8XxCvyl+fct7S2c7/EjWHLKrbAl5wzue3K9Jz5pu3j5wGAFNmryb/CNRzbTQ3Rdh/j2hnj4Pknemv1Eaj5+KlCBifkaLYjz6tqvZeL28wXRb33YcT 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)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vkvsu1eevt/AqXQ8XuacMFoMiRzBgg1QS4LSsWTXwUGxJT9dcwG/CrUgU2Aq+SDK/S4bTFgmVfWlk6ZdNow58E/wpMZiKYJOFF9x8+ZBrWdfFfo4d5X8AbZCYVVrRT6nnvA70EqFw5K6O/cP2niEgmlOtApGWaYgq74BJt8KpjkBZW59eZx2HgzL81F2Y0KBBJIeQC47FrgA78wVcujc0opTNFsmLMpm18oCI5MVquTGiJcwyW74kGpzz6e9I7FTOBE1ch9x5eqj0EXTqDwWPiPTseHPOBFL/BWMWgI0yHRX88IQ/50rQBk5ZQWENdGaj7AJoY7prkZKuVcyWRiD5mtc1i7KS287mOhLtF+aIhOA/oz0va5wSRiNOZpK5cczbnrDw1B4JavxlV3armYHCETLQImRnro5iwvhDIvHDiGQR1Rl51z4uDNMqQ+QzvzzpnIcrrITgONnm5UzMprykLxyK3h3bR75m0+nWlBLuqUl5TekMwZ/KgVJri41Oj357CtfU0KfvzPfdX6G58BYpaBKR35kZMU0BzkyJymOk0ekWMRlKq6AYVKPnzQ9Mssb9qxd0geIJ3EwW7/PiaSigI0SZqga/3ETvXTwr9oJhu5RkeFLWItQTwoF+CdncN2EKsMtKmuSJoG4+w6sXFZiKJpMOp06ru5wy3EJPaC0NWtheVS+Prxu1QWMeE4RddZbwGRyTlBsbcfMje+xJjy+PU5JxQGg5SCB2yQVGFoL362+rv7dbUXwHI0vKHRk15gzXW3YNy+Urch5O6L74FbxTsvhUh+h5rFPLRRM8nW4TyUPJD6l3EzAe2peHeRbpdyGktRfK8bb4hpxjBA3+yGUJtNK+zmtKa5Ovj6N9+o0CMCptRV1ukgClShut1ASHzxQ7r0OtApijrNln75KQ74PXjKcJtZ40W/1znjTFU3hECT2CrHyo3ocs0ICutxU8trCUZy7qfw/it9FpuSWWyXIru8AK9ansXUijK8huyiItZpU0q6AKnTmbpz+oyAkGMHaj/FuCzIomPAeX+84nkXBiKpLHrJpXE96i3HQiydTuOmwJmPS97tfJ+XUzOgXefIbUu2c4ouh5SNWUPmYZ7RB65QwHuqa7KxV28VY2xUrtHViL/LXKwGD+ppmQ+VDs2abpZKkaMWWOY3uTFAGFjkvx4IyB7zJlv2nUkgzA/M7cPhxqjOqOGVLpPoHKCGbIPY7mV+8BQy7Bx3KOgfQk8XiR7P7wbFmiPAKybrCRv7mU/APhobAg8YTW0a1P4nJym09q+2pYnL/YJ4e2+bZD5zLybyYFzJzdrVrOxCwe5RGMpJpfhGkhZtloMbu4JC5ovJ/A9N+9o8N1sjTwulW96USoo/CgTc6rETNVXb1G+iN42xtyZop8AaAztPBPFGZEKchqv1Ipr2Y40l4baW3Wgn5Z2h7J2i14louSTaEAP3o2lUY0ITpiSguZbA/VE6Ocz6dnrj0LNKjb3eV4bgAsL4KMakoYtBB81fc/sN8jt4gsUBHTKXiXr3Y9RI/6MpzHvl602JF2CZM59pg+7s1FA9bPBogJ0YavMIlL2UH4CTCJkLCjghnO8XTWo8obKwyGRt9nTS4gPlhGnYThhwBtR5HnQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lgzyinwua7HX0sZcytI5KrLtIlccFORH34+ciuXuSIEBhfjrmLllIRcR1A1q2Xt+FzAAwR6ORX8Jf0FQlEIml8q88bKrA2mJQqf2EPQmI7TYp0a7ug7r8et7o7DVM3w56asrVIbUT67rzA55YgxvQgLPox1sMkDiRj37b+CxFDD/AcU4pKIeYzU152uOWs+wNMlxLt/JJ6OOF3Xgr++aVcBZMFvr+nCYK4KV/hUCN0iL0BFlFNwiqL4hr0g49NmEUrKBjrQ2RtbZu00+lX8/czMucNLUiTpWumj7o+TgIP6RfhJejgZ7/RTOpaGNLEhlLJU9KCRGzcwCIGztvPHYHLKKPtAA5oa/Wyk3yMoG9JIxxJvNz14PQE8aJa2hDMSub7xl4sy69qoJxuH8GFL63v7whwjGQ0hjqJTS1Q6p5GtK5RgfDjg87VHxgdQt7kJLLau9cVsHjDiKBrIpuaUi0kPq4oClNvypFIZNyji2Tpksy+xM2rWuM/cYWcsyh2R4UJHDZYGbOT1LY4ILtR3MmMrCXpiI0SevPEwpkqUfFQXk4NdFk3RiZKNjPW4rPBPK99/2dyRTNbVaJv39Ui77cnNu4r66FVucl3n26SR+Yyw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: eff4403e-5d56-43cd-cb4b-08dd67a72e5f X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2025 12:03:09.3040 (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: 1lIT0J9ayRUd0t0RZQRjVP3a0NtjqKic4GPu5yyYpTJjZJWHZD5oaITdLJq1uFo4lIRIaXnzLBLZhn8HSkaGRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB6902 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-20_03,2025-03-19_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503200073 X-Proofpoint-GUID: fr7d5ohW1zJufRqqy7FnGNgkxEjRIazT X-Proofpoint-ORIG-GUID: fr7d5ohW1zJufRqqy7FnGNgkxEjRIazT It is neater to build blk_opf_t fully in one place, so inline iomap_dio_bio_opflags() in iomap_dio_bio_iter(). Also tidy up the logic in dealing with IOMAP_DIO_CALLER_COMP, in generally separate the logic in dealing with flags associated with reads and writes. Originally-from: Christoph Hellwig Reviewed-by: Ritesh Harjani (IBM) Signed-off-by: John Garry --- fs/iomap/direct-io.c | 112 +++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 63 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 5299f70428ef..8c1bec473586 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -312,27 +312,20 @@ static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, } /* - * Figure out the bio's operation flags from the dio request, the - * mapping, and whether or not we want FUA. Note that we can end up - * clearing the WRITE_THROUGH flag in the dio request. + * Use a FUA write if we need datasync semantics and this is a pure data I/O + * that doesn't require any metadata updates (including after I/O completion + * such as unwritten extent conversion) and the underlying device either + * doesn't have a volatile write cache or supports FUA. + * This allows us to avoid cache flushes on I/O completion. */ -static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, - const struct iomap *iomap, bool use_fua, bool atomic_hw) +static inline bool iomap_dio_can_use_fua(const struct iomap *iomap, + struct iomap_dio *dio) { - blk_opf_t opflags = REQ_SYNC | REQ_IDLE; - - if (!(dio->flags & IOMAP_DIO_WRITE)) - return REQ_OP_READ; - - opflags |= REQ_OP_WRITE; - if (use_fua) - opflags |= REQ_FUA; - else - dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; - if (atomic_hw) - opflags |= REQ_ATOMIC; - - return opflags; + if (iomap->flags & (IOMAP_F_SHARED | IOMAP_F_DIRTY)) + return false; + if (!(dio->flags & IOMAP_DIO_WRITE_THROUGH)) + return false; + return !bdev_write_cache(iomap->bdev) || bdev_fua(iomap->bdev); } static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) @@ -340,52 +333,59 @@ 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); loff_t pos = iter->pos; - blk_opf_t bio_opf; + blk_opf_t bio_opf = REQ_SYNC | REQ_IDLE; struct bio *bio; bool need_zeroout = false; - bool use_fua = false; int nr_pages, ret = 0; u64 copied = 0; size_t orig_count; - if (atomic_hw && length != iter->len) - return -EINVAL; - if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) || !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter)) return -EINVAL; - if (iomap->type == IOMAP_UNWRITTEN) { - dio->flags |= IOMAP_DIO_UNWRITTEN; - need_zeroout = true; - } + if (dio->flags & IOMAP_DIO_WRITE) { + bio_opf |= REQ_OP_WRITE; + + if (iter->flags & IOMAP_ATOMIC_HW) { + if (length != iter->len) + return -EINVAL; + bio_opf |= REQ_ATOMIC; + } + + if (iomap->type == IOMAP_UNWRITTEN) { + dio->flags |= IOMAP_DIO_UNWRITTEN; + need_zeroout = true; + } - if (iomap->flags & IOMAP_F_SHARED) - dio->flags |= IOMAP_DIO_COW; + if (iomap->flags & IOMAP_F_SHARED) + dio->flags |= IOMAP_DIO_COW; + + if (iomap->flags & IOMAP_F_NEW) { + need_zeroout = true; + } else if (iomap->type == IOMAP_MAPPED) { + if (iomap_dio_can_use_fua(iomap, dio)) + bio_opf |= REQ_FUA; + else + dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; + } - if (iomap->flags & IOMAP_F_NEW) { - need_zeroout = true; - } else if (iomap->type == IOMAP_MAPPED) { /* - * Use a FUA write if we need datasync semantics, this is a pure - * data IO that doesn't require any metadata updates (including - * after IO completion such as unwritten extent conversion) and - * the underlying device either supports FUA or doesn't have - * a volatile write cache. This allows us to avoid cache flushes - * on IO completion. If we can't use writethrough and need to - * sync, disable in-task completions as dio completion will - * need to call generic_write_sync() which will do a blocking - * fsync / cache flush call. + * We can only do deferred completion for pure overwrites that + * don't require additional I/O at completion time. + * + * This rules out writes that need zeroing or extent conversion, + * extend the file size, or issue metadata I/O or cache flushes + * during completion processing. */ - if (!(iomap->flags & (IOMAP_F_SHARED|IOMAP_F_DIRTY)) && - (dio->flags & IOMAP_DIO_WRITE_THROUGH) && - (bdev_fua(iomap->bdev) || !bdev_write_cache(iomap->bdev))) - use_fua = true; - else if (dio->flags & IOMAP_DIO_NEED_SYNC) + if (need_zeroout || (pos >= i_size_read(inode)) || + ((dio->flags & IOMAP_DIO_NEED_SYNC) && + !(bio_opf & REQ_FUA))) dio->flags &= ~IOMAP_DIO_CALLER_COMP; + } else { + bio_opf |= REQ_OP_READ; } /* @@ -399,18 +399,6 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) if (!iov_iter_count(dio->submit.iter)) goto out; - /* - * We can only do deferred completion for pure overwrites that - * don't require additional IO at completion. This rules out - * writes that need zeroing or extent conversion, extend - * the file size, or issue journal IO or cache flushes - * during completion processing. - */ - if (need_zeroout || - ((dio->flags & IOMAP_DIO_NEED_SYNC) && !use_fua) || - ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) - dio->flags &= ~IOMAP_DIO_CALLER_COMP; - /* * The rules for polled IO completions follow the guidelines as the * ones we set for inline and deferred completions. If none of those @@ -428,8 +416,6 @@ 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_hw); - nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { size_t n; @@ -461,7 +447,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_hw && n != length)) { + if (WARN_ON_ONCE((bio_opf & REQ_ATOMIC) && n != length)) { /* * This bio should have covered the complete length, * which it doesn't, so error. We may need to zero out From patchwork Thu Mar 20 12:02:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14023863 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 DCD28221731; Thu, 20 Mar 2025 12:03:27 +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=1742472209; cv=fail; b=LPOFVGH35UyoIsQFzbsHTAE5eAFacRTMDv2eiUZvnk4506E2jBPACJwY699+iii7DvKdCcIMr93+xDlwh2981+0zVbSPWrFc0SS3zCXQQWD/m3HpaCBFMxrDSir/WBwToBqRPYCcGXF720xIn1CuxxAo7emue+E4nTHfMbaz+mU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742472209; c=relaxed/simple; bh=e45CLOI62OHCYhzgckHkF7O7xdKM5m2PtH8kHUTXg5Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=poZw73eYbvklYl7aE4R7KPifJW6HPLfDEhHtSWaajHY5GQ7tnxIezC+nFNJurYPdMTDslIFR5TLqV4sx9h+0JQD5T/Xmz00ce8FwW6KfsB+E91++xWLISXcQ0PF5n3vQ8/HJP550qGX5CS2ovr32sj9rqoABRP0JADETJ/ElBMQ= 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=k5WaEIjI; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=WXKmZqYt; 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="k5WaEIjI"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="WXKmZqYt" 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 52K8BuvL017529; Thu, 20 Mar 2025 12:03:16 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=fYwe2dtgbE/G+UWKQ6EH4f3hi0S/SXLsb41sT+jZN3g=; b= k5WaEIjI8AQd+ny0QOX7bbrL7oCO0XiaLnZvURWp0DyxSyFKBJ+rc2cQasQiDD1P 7zcVD3qFRy4YFWaszS/URyOJIzflYXob54WUvZ0tG3LC8tAsq+fWmPPhx4FwmJsS aP2e1hnQISchBBqbeepqjt4KVtKFfvlpANwR9Pj6U8lCZZEIjjkKkjtQ8kJz/5E9 ml9ttMGqfqizpX29zajmIPDEn5KpQYfcA1HGlnDLL6UQ0uyxrjWP/a9CDagdvWc5 2ZUkwhVadJ5NlpuwQVFYLvE3O/InO9K5TcESZKGSA1c769WY73qm+U7mnEu09MHo bJNn3xL/66uaMyzIFAcSXw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45d1n8ng9d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:15 +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 52KAeP9Z024475; Thu, 20 Mar 2025 12:03:15 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45dxbm9xdq-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MiUC8REzt1XpRHHNvrYTdSoPmfObfeKMrDT7LjdE7monMqb8Dn6drpiQTnNm8YiLKroQPbYeGBjmdK4dORN4hfoyVr3mScB8wQgEGL21IclQwGCdflPfSUH6/lhI+uwjUMzhkyhNutqF6DMJp0YlZGyA5TDJqusYksriyYcUTnn5V04xPlZf9lOKFTcAW3Nid76lNqjVBq9gGJW5+cL3tMLT6padJ8K0LO6WMIdF9mqIbyViKTN9huHdb2a1jXGF1nsXj4iigHMITV4WcDPdIuoSvxm3NjVIthoBOQx0YX55Xt6YGWg4UEyE9lwx1JaR/4a/qc83bZAav0LumpD03w== 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=fYwe2dtgbE/G+UWKQ6EH4f3hi0S/SXLsb41sT+jZN3g=; b=GTyyV6G3t/3hJOrJqon32dkD9LJRtpS/KIPdoL3hRVdu59eYsH8LzasuNJ0OT/Q+aoaym/c1MhkHosM7aeD5h5C0FmoYVP6rnCvfHAT/6MufASO7nKg350+alCaSPYMZzYj7LCsaLiVZKNc5ibB8dRaw+v64UKDqIILlIRWSw9FHLEx9j68pJKJmXrogZS7ncjDpPaFcjpCjBzDGLBLtNwEDQnsOAsuS1E2lT8VomISoCLwPZXRXJpSqyrKJPbL2hxCTp0RKy2BloksJlB1QL6hmWup4cc3lfyHBnTkxYzc+eRsG0ZQFP+OxZBuJfTvr2/J1WNaKCFsAewEjnvtvfw== 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=fYwe2dtgbE/G+UWKQ6EH4f3hi0S/SXLsb41sT+jZN3g=; b=WXKmZqYtu5b1s57JWl9IGJkMqBgNW8l8pwTUyZsE5z8U9jsMN2xY7whISY+iCXISP8aSqIzTVYjiWSNScNaFlMeOdk6ETVxz7YhO5d4omGMiRz2EHmt7OxARL3pMkmFbHdRh8RsYyyAb/8/tChoVbtqWB3pQsO3LmKmAgI5jas0= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB6902.namprd10.prod.outlook.com (2603:10b6:610:14e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.34; Thu, 20 Mar 2025 12:03: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.8534.031; Thu, 20 Mar 2025 12:03:10 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH 2/3] iomap: comment on atomic write checks in iomap_dio_bio_iter() Date: Thu, 20 Mar 2025 12:02:49 +0000 Message-Id: <20250320120250.4087011-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250320120250.4087011-1-john.g.garry@oracle.com> References: <20250320120250.4087011-1-john.g.garry@oracle.com> X-ClientProxiedBy: BLAPR05CA0033.namprd05.prod.outlook.com (2603:10b6:208:335::14) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|CH3PR10MB6902:EE_ X-MS-Office365-Filtering-Correlation-Id: a6942e51-b411-4d27-615c-08dd67a72f27 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: 9Dr7H14TeNHxaWIDOMQqI9ebyCqrVoMxwWL7C+VJbpdd7J0ZT9G4dsXa/thgZY49R+LP1dBhTBIVK8uzz8REDO4VT1qYygssHiCXaMvts5J28QuSAVtcyke/V4tzylP5E0h9N2UbdusKEG663eS5YavJaUO8aobj8sQYDltyYVwB1BM+WOrRHejvNtbIux2MxKfp9NqKFEK3Eo0+vcYgIh6wDV91kkmZO5QfaNHAs7Y2IPQWoBMwsO6yR1SnHH5or0ULOEHvBX4yzmXIvepGrZP1vskzhlrUpJZhfuQmN/1q1LuTxb4/drygqndDtovdPeej6jbssWdzjJOn41/xsQyKip7QGzD1b46iMit5HmxJGY9G90JqkqPTv+2pS9WiaBYNuXEhc0aaJi3S4gdxhjajVeZN/yTfJDVxQf5UPgYYCgj4jFVVfr8NS2v3XrEz9Wwf0vOlJkk2nA6ybcNhgmG2moxmSrjaG3t1+FuO/cFNY5VMvJonOxRunLehsh8VGDqiSwHKbuDrBQ+8fDEBXX8wDsofsViiATbPVIWnQLQXnCHmlVEzGVyWgjJkw/IK2xxZTeKd8sEsw8qKNN7uhCN1NLZs4yzSfj2O6CK6ReZLXQO9zixywCPc4iZ+mdlq//pVt9qv9JWYZjp7+Uc/2PXfNXKv98NNarkC67Bd5RMBb4z2PIzFt4sAOenHTmG6d1a4EZa2v/uzpiPShgKMPvBZuJUSdJKMmsZ8fP8Qj01TfJhP526JXAYDxgxCou6FwtFrGX9NyH/2UhT7ZNoY8gBA0JJXVFh5QBvcY0+myIkA6RX+lV7ya/MX3r4ErJC9oYK2wFjKBkBO8+BA2Dj4xE3UJL/H819cL3DOjgbbbOIE5AXs+oaVafkc6D3lT3zAy0fTgZ/SMNsPmFiompNYu85NW35H3tZTOJGBxWfDsZ/kyAJ631VspRkwo906jtGB36nrfVJBlKE0ROXY5WV93BG3GHesXvP2ntGnpntnVmENksLcinq1EbZQYPLpkUZFkZjv8PcvTRZDvzl/auSmVCtyplv/6xAKFQtzVIP/imUN1E0ufeqSjCVPFV7a/Fz2rCUSVC8SAQIdN4lPYoqAq7JBERmldX5sPAS0hoLbCMWI8tUYCHMHnWqQlOJCKi864X9prDM1hQvEEXo17Y9uOGuJZmE3sWgDOg92dOoIx2GgO6A8J7lRJHfNDKTd2WT2fV3wLMhU4TL/QiB8YncE0cIcSIFSFtXUN8y1fgNhis8+XTXZKkI9xRk9NV3hQ/XMQUNYuVh8tPbwzpEPDXkta0REjNwyKMiP9LVn/wif3sjsormN8vqyGvyZ5LKgTfN/44booxUPez+g3MnXN5v7H/2pgDUiqOVVfjiyz8RaTwCcOw0ahDbaMRF2qh20/JKb 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)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mfwbUrbGztTD/vD0Ns3iHEpeBVfj1J78CSvBM4ah5WMCIxUxL8h8x7xfTWVgRkeX9PtKEy4oqCL2hqtDt9l+/a61ab8OT+Fzl060KhZe2ZWu56k0Y+A4Knd+wlFltNfO76CTXWuShzIdLO7QB9W/dQCGmjlRnGrAH39Y4Xd+8vn+5WpiO14NAjfmjRF6eKtbT6x5BqoQSbGrXb4VvdsESPXawfVpkFc9ePrxyuGXtHTMHBSJeHd8v7eMyk26T8GCvNlH2FWqHfEBEy6w/uEWKatroUnJgh7FYMW00JQ9OPhkIIWgEaIWrvjwyGUQKl4NxgTS95DSg22XBr/IndBLZA6zIAyC25IKZMAihndOwThsffMQoMSzsXDcCrnkWI0roipPAvS4Uv0G463WR1qgHZrqVRM/ls+KpLG9AFa6gZDOdjkLRi6LYDoeL7b2TnOPrNYAb/vzLdANMyZW3o/kzo3pdZmTzhsNENmgvXYAtK0D3/uZdAPsD5UBwEB1gI8wKhmnl0r5s4nY0iNo4nEHIHXricLVTtKjNE2LzbbiM0RP6Ghtfo9NslD4PN7tBOgtjxf/rRS5qvA7L2EilHV80lETRhDMUt7D1D3r8ONovGOHCZLPXBAXlFURuGfCvROeMxymVAWdHhR5m5hswKHyX05jJlhxa1OKwpm/lTFBFZMVzZI93eQX9EWcgAECo3zgitNu91KVwZVzlFmLb0wo4A2DuOQrYV241cD6RPb7ZGvE5EvG+5uAE/W+DaO8aeQLXsSxiJC3XxxNjiL4LHtqshuXCXxieqJFEGbjzximwJHh4QDFej0BlHvvB1Hbe+dlwkhBuy9v10XtDpRoPw8zJYNCaGj+m6bi4a5owZegSM9tw0xZL/W+4xwvcsN3ozGiXbhbyzMeo8pIOu2pk6u9EOPHlwcxaKq3Qk6fSS92vX9yFPP3K6N52Z3iZig1Qnu/QucMfLcBLV5c48UqAEV6PaJa82oJsBqyCCLiCj1xWvOsn3db8VJiazI/f9NRazBy5PVllILXI0h9sCLGBr2yJipmheiKJA3JW7jqTPID/eOQ46Gtrda79bok7QX6aVts/TnRoIdZFvWHpsGhw+KIriDVFQEZ+RSh/zaHrDPqveY0quXY6qsWAr6a07Jp7wedal/PGC8JL52dyDZfgwb7qmVYqtsetO9dsk6VQrq/PsRL49S9Z/b2j0B28WKd5CUMxqo0r9+ffi1fCWZNizROtvqhpqxWOCKk+k5+RXCTX/ee6jW18GpDQacsjgIB663XwgSVu67vIpsIu1Hx6mE2jxamTvJ6p2smha2PaiV9w0dH7Oa1C3tj/xA8HWg0dIvKkiDmoVXKVxsHDwMW/C8IboUUaomTLU/Ue5l0AgG5BiVtVXRkN2eq4v5qBE37+vquuUZT/ZWKN3R0fAmB7ZBeKTnEohP4wWGgT2X2NaQTrOhVANb9L9Lb9nL+tas7qh0AaasjBwm6NnxAA9DcWGhRiRiwS9SmzKfQm1k5y1xD9x3Gfag6HPuRtvGlOHu+yOA3cHYuUhojsKLcWTr0KBC55RpbsH1qIULUiB3dYbgOBPXye1QKA3LlrxQ7tMFX2/HrPMhK8Suqvei/+QEdB1FQ4g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: kXVLATTnl3AROMar60qIWkmDHOWTLgpIkIpC4WBEVpvrR+4UFFEX2F7FZdqOg0qasQ5ecf/UFytKUO/8APl8qYwKcqnS0opIUZ+7ErC/LwvMmcOIYR5scISUDDGHkzG5vUPA1+YrsAhhtF/sFWM1XfeR0WawJnUugq8A6oKbbQkrd9MXYbKxncivF8K1wt05Wxpn8X/DMsNpUZwF6ZqCXb5sMgDQmBioPMpp0vq0nQKXdX9Yq+of6n6ZEyK7tHl8WPrZa3MUHguZGIdcM1lNId/9IxVHWOhiF8KhCjE/W8fiAc3c5XC8VvREP1L09sPP9QqZcM+pLXNVthDSe6J3Pnw+QQ1XRU+pLxbWbSDd4DHQJKyexKn5APF/E9j63/YCMYTBNN9JwblBwWTqL5fdgHUvSM41ACU3NRzCHr7R7OoOOy9MNjtzRLdVi2CNSDR6D7PJpJqDgGAjM1VXr+Dj6YdjxhpOcua6lGGmInwDbJVR+vzHrv3HxQY3SLxGeJFYH5z+Gvwqyc08JOr029N3ra/yJwUsfU/pMMxbE0KfQ4EXfSogrm1AjLYHIzLo2pnNGE98nBAaX/OO0JBcJwz77Cd9BBvR76G+6JCnX0vCpa0= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6942e51-b411-4d27-615c-08dd67a72f27 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2025 12:03:10.6309 (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: kww2XSNpYdnBjwxMJodSG9nSAkY3gMjnyIB1XPv/ftlu58plzHLvbnCDs0wYKUQNSHSvOHA4zyxnBc2ViRa7DQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB6902 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-20_03,2025-03-19_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503200073 X-Proofpoint-ORIG-GUID: T4q0nv7XGsTkgl_qhuNa89kQKggD0O8U X-Proofpoint-GUID: T4q0nv7XGsTkgl_qhuNa89kQKggD0O8U Help explain the code. Also clarify the comment for bio size check. Signed-off-by: John Garry Reviewed-by: Christoph Hellwig Reviewed-by: Ritesh Harjani (IBM) --- fs/iomap/direct-io.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 8c1bec473586..b9f59ca43c15 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -350,6 +350,11 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) bio_opf |= REQ_OP_WRITE; if (iter->flags & IOMAP_ATOMIC_HW) { + /* + * Ensure that the mapping covers the full write + * length, otherwise it won't be submitted as a single + * bio, which is required to use hardware atomics. + */ if (length != iter->len) return -EINVAL; bio_opf |= REQ_ATOMIC; @@ -449,7 +454,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((bio_opf & REQ_ATOMIC) && n != length)) { /* - * This bio should have covered the complete length, + * An atomic write bio must cover the complete length, * which it doesn't, so error. We may need to zero out * the tail (complete FS block), similar to when * bio_iov_iter_get_pages() returns an error, above. From patchwork Thu Mar 20 12:02:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14023865 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 C8F922222A3; Thu, 20 Mar 2025 12:03:31 +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=1742472213; cv=fail; b=sUYOdB9S6+s83sQqyXK71GoTGsLmJg5OOa5LI/CM+BcWgdtMrrHxIrzeARBn5ly0DdkvDuu5unmiNP843pzNXOcgdOS1XJjNccLujhta2TTgGWLu8xYPVg8ZTet8pF3vaZQn9ONHFLtBeiv54Y7uZNXyIOsQo0/v3QYJRcQGDG8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742472213; c=relaxed/simple; bh=gll4mXY9xMW+IMOPPjONoh/+hvoWNLDxvqkg1RCzakc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ILnaRaY74HU7R6mcfRtzvWFqtJLRhtQBccR5C0mKpG5ulXB4B1yA8lFhbtC3gVdRAXwIpcBHTQN1o+reHNBvCrUnE5plmeBvivotzE/7pwthHAze1IfBcyzSoGoO2t0+Yh45N2V6VzAejPqfD4QG9NMq9Zg+AtDbHiCUgjEcaYQ= 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=TfoWCJvq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=d+Ax+k6A; 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="TfoWCJvq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="d+Ax+k6A" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 52K8BvFq012018; Thu, 20 Mar 2025 12:03:17 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=dmYTyYJlXkzJr46SQ5OrRSjqjWBSvhiumNVdpJuL0tg=; b= TfoWCJvq8B4K4GCZKjMq/QxOtU3TeDHCQ4CyDEbbWL+KF3zl+Tu50dR0kU5/RChB /cjRlmpayk9NEuwnIpbhDfvHFmBxEAPI3vcHHQvFcUtxwuYAE/thpCrprXl+9hFL pi47hMM0E4EdWD0qxXrb97DcqY5L3nTMLbuKRyYmF2Peib+C8x6svtoNvYeVuuoq hthejtHVslGHKAv9oecOq/bS954Djwc1bhCteocPotbQmPHp6GlFmE7d8wOkmkKL S0WBWLxUPmT3uuED4OJc3PYUMBz9MNxID2zCH2XaYw2t7arHvoiOEOj29m7FO3jD GMiIRp5zhvZiuNNpIuASUg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45d1s8x02p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:16 +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 52KAeP9a024475; Thu, 20 Mar 2025 12:03:15 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45dxbm9xdq-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 20 Mar 2025 12:03:15 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AzSxQX9cVfRuzPp2woXJwAK+GCjlUceee6ZXtQGwwapTbpqZexY9goI2rxEtA9MjvJbVbK9eRbUR1VDcPKfd2DGyTLH8m2KumtsK84cZOvS3P4+TooEnavgZFe7EBJyJGZSc4zPy9Uon4BiKyg4UjdXD0AC0k+CaqC8W2qJ5Y9aKQVQi48ZgDBuHRxYNSX8U7LihUGj+gd7z7SncwoNJjYTFh2Jdeh+YXPeKQX4zRk2qppEsWjKLhjnzwVTqPwRbTVaDeRHKkmhKuSLtAnY2fLWDvF1FblgXgIx/nNzTsIuWzeNa5WFoKy4dTWoF7WwVqAsqWVHfM+IKyGuN2d8NYQ== 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=dmYTyYJlXkzJr46SQ5OrRSjqjWBSvhiumNVdpJuL0tg=; b=V2ewTeZBXHkVC6A2vS1Aq8HMjz6ztplGZW71vTCN7wDuviLp+yBI2yY8YN6n3J0sLsGAa2oa/OBisnosFCmpwp/m6DOAI3jxwg/s4OLcjNHaT5TmlzjSTGTbJFdwuChqBhKD0Ke2pcp4sCnzFQ9ci9CquYKA/sAWE7glV4T/3lLQIHN8W1juIYww9Vqt3Vp2TH2HOIlKafxuMwFnDNNRNxqH55TQa9ci7/sYcubrJ3DjoYoQbZnMy1d5gwfyTurQTMl5xbEBsWlm4WQXVfyh5yQeTM2UWhQKex2sfiiTzEbRP6LnfxWs5qLbJ2nV15h7aciZO1NCYCHTrmhQ0egLog== 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=dmYTyYJlXkzJr46SQ5OrRSjqjWBSvhiumNVdpJuL0tg=; b=d+Ax+k6AoyJ5F6F+Jg05v0hk54/BV9yS5NRJz0PEQ4MQ0Bjd7EH4HVY2yHob4PSKGFmzyQsMux5YY8R7SgbWcYDcMpvGupxlPO9YTLkUMz+NWk/KnEOA1vmMNyhannJEBskXh+rPVgsaYNO5/gz4pwtGafaU9MkZeEzTt4HMI+Y= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by CH3PR10MB6902.namprd10.prod.outlook.com (2603:10b6:610:14e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.34; Thu, 20 Mar 2025 12:03:12 +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.8534.031; Thu, 20 Mar 2025 12:03:12 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, hch@lst.de Cc: linux-fsdevel@vger.kernel.org, dchinner@redhat.com, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH 3/3] iomap: rework IOMAP atomic flags Date: Thu, 20 Mar 2025 12:02:50 +0000 Message-Id: <20250320120250.4087011-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250320120250.4087011-1-john.g.garry@oracle.com> References: <20250320120250.4087011-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR02CA0004.namprd02.prod.outlook.com (2603:10b6:408:e4::9) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|CH3PR10MB6902:EE_ X-MS-Office365-Filtering-Correlation-Id: 197c688c-0608-4465-a866-08dd67a73008 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: 5ZvxB/jDejYRtYxZVeHhU1I2T6OAGPLrtVGDri8LQ9ih+LVWvZZhW6RWdMEWHdAP+6QCoi+IS+J9ncu9nzehDDem/dFsA5FyZp5LRjwsoavcWOZLywR/q9be72A2Au/ZxKtXa17DGeNipZ4ESfeB+3nhtuQ3P3CcwrMzVgAufS+jgm/8KXAldCXMQoRRSRBO2iQuQQU6KHtpAHMFFj7d/Ki0U5uzJybcMgZsNh+7Lx3R981eoMTIvttbilcuZmJe7fIy8zSYWXVjfSTqQ8dZzmmZPT9IucF9h7bsF2tvnAM5StmuHrew37f/fuRpHXoEb5Z8gXpCr0rGcRRZu3a62KL5CDNU2jsp02VkDJZyYf2DCf+CYlmLTicr1m8/b+Pm9Z7HuhmnnL0lHYmLeexvKol8gqb4qZnmE2XHrY2l0QeAWnABY/VBUkJFo88wSfd9owJKFRITx6PtOVBCgdXr25GTbELH/Nw4aYTKamDyahssbdlzZuSwAfMUX1YqB+RHzulQjF61GzBv2HbCzVxtmYNx2Z8ZnxKv2cP4FSGTseDxjevLh64aIefTJ7C7s/2nZEHAzm4VdN+dt2rmrRa/OM2qkgCF+xUOUq1Wdh87i+ttBdk4ibOieyeOASSYt0gGsJ7CnmFvm1Bv3+ykESnGQd4k8zN+zQMgHaMGBpFbT3RLiHMzFGlg+KuLnLTYx3AlEVTsdvN+hpF6UaRyjHHyPKplN384qBRhYc60w88ZzeF1xFAYhW2B0GraJxtByY7UzT/lRQ+q73QJ2duGbM+7px0c7c1iM12+zTBDnmKt1cS7IY7mq6GIUf5HC476wIYjGdly2d7RSY8GkW1vnbMHkC13aVkzebvzXoJXhYBldFAINVcDTFR7J3dsWygjJHOz4xq7HjuUb2cgu7Zqpa9Ni3Oh/k3f5sbvp6A5iCbmUW/CH4Mp+y2PwO2TrwIimUpnvlWr/FLvkRNWyRZqQKep2KlbdWQ3T7CVPTn0Y/J5UpsRk/ZKlLXyAeK820QdGLGhGepFsTbq5OzlUyueErC+XV2VoLAYsrKG4fHVEzQOozEO8SEYdM3DF3OuwWxOxg68bfYsILj0B0+zauIctp5aZ2LNODhWQb7bzfPvSdBl/cB7Af5kP7tNDS1kAOg3f0BrBmpKatLnmOOMaVmyp+LLh7l6bu7ZsJxkpg8yPhzmmPnT25bak7MnjxcKCCG0kz3CsZMiZq1/QQ3yMrVCoAOkiGChkLXWVRUeIY4+Z5Irhp1SitHRXE3R3sNTS1F4X+mm1NPw9cUpceZQAXGEQHgTWuAAWzHxhR/yyDaGJiCtCQRk9v/ryXe2b3CtJvQPzknmQbuINUUFEHC2ATKGsLRJHvoXlInn6uRMiWHh8YxAONltIT7IkvVS1oz1jXAyG02+ 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)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bv003BZx1d9R9LiSTD6wi5u3WZPTAJo9WqTTBqod34AKSoarefj5B/1DQe+/NAPNp0FN7CcZ6z4CRxh/WSwJujWKYYuPv4HPWFetMSHcRq6JyGCT+KltUAww8E9bRCB8lgMeSpEVjfRArumJxqKrtyGREt5AZXlvo1Jy7zCsShkHeHUWqFOArKvz2DaoJOipR4IWMOX6AO0aPWXoHF6qdeNm3JaOuWs6C0h6Ybvo7R3bqxwDzLox5XPMkjRWps1S5wrFrQY8643db50SeelK7aDDaTKJzTXnGIANMrV+ehIIOsZ6yoW0EYHQpngcse4HjdugeauS5I7W5t83Qw9hPp5O/OZ3Lx8bm4QwTYibP6ALmhe3dgNWAzrTBhalua0f3KEyDMCtZZ/4+NqCodOZDzJ8NvAJxuFjhIqDJ4MIOpaPAyYyoVSu1J1GTTcl0uEw/DwNhYij+q6uf5rDpp5skzW/8Peq1Z7rgLOAjoZ2+I+PVW5NEAAEfNFizxZ6w7Oe3t7XuRyN8/vPrVGHSU3qvxKcVFr2FKYRa9cZ2KJdw9I8T6zmQO8shXREE+d83lvEdiZtGBcCRFwKraxBO7kgaGpIXhNuUFdWt9753tf2NOzTzmXdPLyFKnECuidsrJsDiQYYsL5iiINL4qiRMVA0yguGTUTqzCDmN9LyAKsyMO7/zBNydp0c/v09SWBNPgipLHxVX27SfgEBd6tccaxXXLAn0YusI4s56Y9W0PzjZLSCdhy0OW3JxQ2XX7wBYFC2qC3dJC/6+En69GedAczEQ6vPB6Q8tOagOQBgEPL8etBmbSqh2DFPN9wJe7mNUd2+hBZgr1jqv/vIm0XyLUk8dYy+qa6rKIO2G+d+Kf/v4Y4jIEXdD8Y9L9y2scbmSEpTFffVlSdCTfNawEbRMCmbkuMj+swnePjzoQz6nGtcpWet7ZqIdXwjNIBUyXfi4cAmfG2FMUnZDg3sYRLc6k9n4wNPYoM0zAdTnhXGMLyJiCuWZuW/Du/ahyBl2ZrG4lTmHrUHKyQVIvM7vr4Ryd59SogjQI5sQ3LrrngyzsBRoh4h9FmGQN0+81cO1IiSnCL1SbSGmOf6Djf8FzoWQtlKSYt2KiBXvoKgaXLSu9D402mWFDdDOZn0+K42Oi9BBm6aVUcWBGDvSiDb+CEs6BW114HGR+VCRX0/qabJJ3HrfHT9h/lEKPn4cnS3gpAKGrRCgLHxMVeXfbxnexJu3rDwTV9+snjEfSMck1xr1EvWbNlzlXGCotL7IEq3RkxvokVFWEm4MjQGisZt7rP7Sw0sX98uajNsHi1FnjjFpUSEI4sD60eJDSIlB0KcfUxr3jDDm5cPp+CM40NhLXB/MmFuIuC5XsutIM53kLLE8fM6aWKiFLp9ScLNp/tZcPanjWb/WLJJeXVPDl7kGFsCqstZo5ZD6hw9sQRx7wrr9kezZdqpSJof7Gh1dqcuP6ZTXBUcVJ0vtY2c6rmwYF2zidDmxcObEazxCcL2cg4r5jIlhO78LH6MFdX1/+gFmlvK4qv8pIxHi78nGntFf7au6H1HxgkXCQ7xm/d7kXnKFLtEyHCPo+QEhBnTf13uYxEfYjerBucjJ4DRnYgPRdDJijOdMA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: cJ/KgNNSF913pX2AM8f/KEw9YuMvq2dnCTmnwVp8LLZDskYQ5+wf4nTC7LM9tEdd/wJrst1mW7KjDLAzFcvbvaQZYqa3nbGBvSilelFTxAz0avgCdnBCi+x7mdPnnIXMeFuYzV86CwZabsOpnwhaBC631nuTmxYURzAckfaJ8t+xSsyz0xTkvOy+vmX9ijED3lD7E+/ZpIKWLWaOygjDVMRj391UY+SgxYV4pIyezqMtH2MKm4JV7Wyke5qO6nzUCBnta61FcKCOoNam2+ZFe4uZDQPWndcmhjlZQej4U3v+FG2bmv3G8udqyjeflO0anFuZzOMmW/lkuxrGas3QCvwS63D/22L48tw1HSauQDgVIH7mDd+0nI/YD1OkNyGos5LWcGd/rg9Nsl4jdSsN1EtWmFHmIG+0jfbmOEAT394asoTTh3M0Tcvkvqbo6FvMvaHprRyl8TqOZbwKyVQuqtfWlhKIKX8VEt/deX4djVz8kjBVtuk0FJp/4j1mLSfapLArXMXZYIS7cnR4GxOrNhXr+LZpACiL9dBm/Kf2QnzGdEaF8hBCwJZMXnyEvVpAG/4hkP16+/JPDAoVwox/zjkQ4+UZSCph9ckcVd1AB7E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 197c688c-0608-4465-a866-08dd67a73008 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2025 12:03:12.0797 (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: DsRCW+zHxth6hm4xbr2OYDE3NhChhhkPouMcbzBUPnWMns7P5eYyPi5eNKNmCNfBK0gxlfJk5bcAlJWbHPgLPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB6902 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-20_03,2025-03-19_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503200073 X-Proofpoint-ORIG-GUID: _PcnM4nyrhaV5VvjrV0A_YsiltaD8M6p X-Proofpoint-GUID: _PcnM4nyrhaV5VvjrV0A_YsiltaD8M6p Flag IOMAP_ATOMIC_SW is not really required. The idea of having this flag is that the FS ->iomap_begin callback could check if this flag is set to decide whether to do a SW (FS-based) atomic write. But the FS can set which ->iomap_begin callback it wants when deciding to do a FS-based atomic write. Furthermore, it was thought that IOMAP_ATOMIC_HW is not a proper name, as the block driver can use SW-methods to emulate an atomic write. So change back to IOMAP_ATOMIC. The ->iomap_begin callback needs though to indicate to iomap core that REQ_ATOMIC needs to be set, so add IOMAP_F_ATOMIC_BIO for that. These changes were suggested by Christoph Hellwig and Dave Chinner. Signed-off-by: John Garry Reviewed-by: Christoph Hellwig Reviewed-by: Ritesh Harjani (IBM) --- .../filesystems/iomap/operations.rst | 35 ++++++++++--------- fs/ext4/inode.c | 6 +++- fs/iomap/direct-io.c | 8 ++--- fs/iomap/trace.h | 2 +- fs/xfs/xfs_iomap.c | 4 +++ include/linux/iomap.h | 12 +++---- 6 files changed, 37 insertions(+), 30 deletions(-) diff --git a/Documentation/filesystems/iomap/operations.rst b/Documentation/filesystems/iomap/operations.rst index b08a79d11d9f..3b628e370d88 100644 --- a/Documentation/filesystems/iomap/operations.rst +++ b/Documentation/filesystems/iomap/operations.rst @@ -514,29 +514,32 @@ 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_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. + * ``IOMAP_ATOMIC``: This write is being issued with torn-write + protection. + Torn-write protection may be provided based on HW-offload or by a + software mechanism provided by the filesystem. + + For HW-offload based 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. The file range to write must be aligned to satisfy the requirements of both the filesystem and the underlying block device's atomic commit capabilities. If filesystem metadata updates are required (e.g. unwritten extent - conversion or copy on write), all updates for the entire file range + 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 may be longer than a single file block. In all cases, + 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 + The filesystems must set IOMAP_F_ATOMIC_BIO to inform iomap core of an + untorn-write based on HW-offload. + + For untorn-writes based on a software mechanism provided by the + filesystem, all the disk block alignment and single bio restrictions + which apply for HW-offload based untorn-writes do not apply. + The mechanism would typically be used as a fallback for when + HW-offload 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. diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index ba2f1e3db7c7..d04d8a7f12e7 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3290,6 +3290,10 @@ static void ext4_set_iomap(struct inode *inode, struct iomap *iomap, if (map->m_flags & EXT4_MAP_NEW) iomap->flags |= IOMAP_F_NEW; + /* HW-offload atomics are always used */ + if (flags & IOMAP_ATOMIC) + iomap->flags |= IOMAP_F_ATOMIC_BIO; + if (flags & IOMAP_DAX) iomap->dax_dev = EXT4_SB(inode->i_sb)->s_daxdev; else @@ -3467,7 +3471,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_HW) + if (flags & IOMAP_ATOMIC) 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 b9f59ca43c15..6ac7a1534f7c 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -349,7 +349,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) if (dio->flags & IOMAP_DIO_WRITE) { bio_opf |= REQ_OP_WRITE; - if (iter->flags & IOMAP_ATOMIC_HW) { + if (iomap->flags & IOMAP_F_ATOMIC_BIO) { /* * Ensure that the mapping covers the full write * length, otherwise it won't be submitted as a single @@ -677,10 +677,8 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, iomi.flags |= IOMAP_OVERWRITE_ONLY; } - if (dio_flags & IOMAP_DIO_ATOMIC_SW) - iomi.flags |= IOMAP_ATOMIC_SW; - else if (iocb->ki_flags & IOCB_ATOMIC) - iomi.flags |= IOMAP_ATOMIC_HW; + if (iocb->ki_flags & IOCB_ATOMIC) + iomi.flags |= IOMAP_ATOMIC; /* for data sync or sync, we need sync completion processing */ if (iocb_is_dsync(iocb)) { diff --git a/fs/iomap/trace.h b/fs/iomap/trace.h index 69af89044ebd..9eab2c8ac3c5 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_HW, "ATOMIC_HW" } + { IOMAP_ATOMIC, "ATOMIC" } #define IOMAP_F_FLAGS_STRINGS \ { IOMAP_F_NEW, "NEW" }, \ diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 5dd0922fe2d1..ee40dc509413 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -828,6 +828,10 @@ xfs_direct_write_iomap_begin( if (offset + length > i_size_read(inode)) iomap_flags |= IOMAP_F_DIRTY; + /* HW-offload atomics are always used in this path */ + if (flags & IOMAP_ATOMIC) + iomap_flags |= IOMAP_F_ATOMIC_BIO; + /* * COW writes may allocate delalloc space or convert unwritten COW * extents, so we need to make sure to take the lock exclusively here. diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 9cd93530013c..02fe001feebb 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -60,6 +60,9 @@ struct vm_fault; * IOMAP_F_ANON_WRITE indicates that (write) I/O does not have a target block * assigned to it yet and the file system will do that in the bio submission * handler, splitting the I/O as needed. + * + * IOMAP_F_ATOMIC_BIO indicates that (write) I/O will be issued as an atomic + * bio, i.e. set REQ_ATOMIC. */ #define IOMAP_F_NEW (1U << 0) #define IOMAP_F_DIRTY (1U << 1) @@ -73,6 +76,7 @@ struct vm_fault; #define IOMAP_F_XATTR (1U << 5) #define IOMAP_F_BOUNDARY (1U << 6) #define IOMAP_F_ANON_WRITE (1U << 7) +#define IOMAP_F_ATOMIC_BIO (1U << 8) /* * Flags set by the core iomap code during operations: @@ -189,9 +193,8 @@ struct iomap_folio_ops { #else #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ -#define IOMAP_ATOMIC_HW (1 << 9) /* HW-based torn-write protection */ +#define IOMAP_ATOMIC (1 << 9) /* torn-write protection */ #define IOMAP_DONTCACHE (1 << 10) -#define IOMAP_ATOMIC_SW (1 << 11)/* SW-based torn-write protection */ struct iomap_ops { /* @@ -503,11 +506,6 @@ 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);