From patchwork Thu Feb 13 13:56: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: 13973307 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 B23232222AE; Thu, 13 Feb 2025 13:57:18 +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=1739455041; cv=fail; b=hQVn0tc+lhBUNSmQpXow5U/KvgIl1QYu8FXu7yja6nuncuMlevmKJceGbDXbmVjIBww1JgtQtVnZ5BWVDwaFUA2rv0fQQEJ15rMu7EvT36lNKF0Px808c/jz6OlO59BY3UvAwimSxPSR1y4Y0wmwkOHGc2IVjv1UbYeYkT88a0k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455041; c=relaxed/simple; bh=Xm4jBMxfAFw2CaGFF75S07Q/fh6KRnn+UsMlbS7C3ts=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Sd7JsrFsECAICMRG3A2Nw5XJUuZSRMr6hBpzX4ixjO6wBcSxSoPFn256Y2NJEfobRnfwg/MX7lpG7f5cIQefstaijBSgNl82AKm8Oyp5DuovFz1vFulfWMRS8XabpmLro5Iv3g/v7297ij3QCMH+Z05B1ZxpUqz9q9Ypt6vd23c= 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=Vx8JHElm; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=fsJg/ENz; 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="Vx8JHElm"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="fsJg/ENz" 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 51D8g0lK022566; Thu, 13 Feb 2025 13:57:05 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=YGb/DUIfK1AtXKzzRvrKHLaT7pB8CE9DOB3tMX9m2kI=; b= Vx8JHElmzrZV/aZOX3LHy12NkYECJQwM6AUxEscbDdGkbJjnooAc/U3nWVYdbXdT H0ABAxU2whqGRAe8y8wljg0k4OsC0BrXHOYhhetaBDoC/7ojZhtlurm6MBSdTpkE XtIApXXZeM3yoO9NLIGUDIEWlBZVbVkI2NqCoChgb6FIWwUS+KPp0KnzDNvSv7SY e+lzedKrKCA1LHQZy4ddhHPdtz6/isCQfk3mdnHcmbTjaHmoFfBn1WnHWj1PFcVl ecUqHiBUuiSHvcuoYfxKG4lNqrTshwFCRoJUobg3YZRENow6Yaq3xbu0J68y85v8 GALsZ9wsIPTxJTeA8t/mjw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0s41mca-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:04 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DCSMVa026996; Thu, 13 Feb 2025 13:57:03 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2169.outbound.protection.outlook.com [104.47.73.169]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbpr75-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=THVkOOZ1ILLuAlaJRyAX8a5XJxW5chD3EqTYGCopExdRB/d3OuZqOX7JcDA2k2Bhbkl/QGJlMfwZ2XRPrNCj8RJK3EiCBbGn6FA27gEfdSSwp0kTtpA5JKJ9PsRPosTdjWlzl3RfLprZQ7XuLAeC9E3qyDJJmiJhQl2a6ldUDATYNSUqOGz4+swID7gjkaS+SR7AwBvTEogmHhaNp8iW/Y6tJDrdtE9iYc4c7btZ72rb+VqdyALnE7bFd62Wx+OOHF/ADwy33a3GEGOVmULx6nTyyb44XRjl68mTwy+quz+4Hh9ZOaR01cnv2kK18/wAeUyFMujlHxT7CDgmGew13A== 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=YGb/DUIfK1AtXKzzRvrKHLaT7pB8CE9DOB3tMX9m2kI=; b=eKU/1CrsyP+OrouuWFvq0qazsK4xs6o3b4jVsSDl/KVbAKnMcjWfSC7wxTZbfUVOG+IuBsnAFNeBsRVy2p1yw4W894GBhvsI+GI0aaazrnreYAOgJfa++0t6paJZrn7IbfEGunew+E9fWYM4g3nrIKHRztooaXxB1bS/j1C39gPZ/PQWQzP/hlyIdWrtiCCVSjrNYwMf3H+/BhDU/+sEy0czTbYu/vpmA/SEAMNnLPZfRxWQo0Zf2vnHpm3xyRyX5Kb+iTxeuNT7Oo/u2G2AAR8KfMeT5pXx4BM4G2Y0sxDd5ZDiFW/gfzAnNRn5btS6e099dsPzQnGhC98HvwcNJg== 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=YGb/DUIfK1AtXKzzRvrKHLaT7pB8CE9DOB3tMX9m2kI=; b=fsJg/ENzBPaXiLX+6wwl6CDmLvC7t5l+4sbZUio3Cqk+8FCqzBCixsNaT8gMVon8QpdmPBohylfI27N5Y3YMa0mD7kJbkLQDqpRGBd3n30ai0VhBMRfwIhCVUrcimo2W7+RUzvEvcimuoOb8G8WBvaqYTJ+KH6+n+jSVIuOoB68= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:01 +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.8445.013; Thu, 13 Feb 2025 13:57:01 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 01/11] iomap: Rename IOMAP_ATOMIC -> IOMAP_ATOMIC_HW Date: Thu, 13 Feb 2025 13:56:09 +0000 Message-Id: <20250213135619.1148432-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN8PR03CA0021.namprd03.prod.outlook.com (2603:10b6:408:94::34) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 10e06808-f052-4dc1-0290-08dd4c364a1d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: U2IHCjwZsBFt9dxE4ZEN7++Rrj/tqm7ewJXzsMQAsYHIiSSboM5ZBeJA95lxsdtYn+G1b2EHB9d0EDrUG7rXsS+YtAcKvyO9LCmMhDp426th2JoSMFm4cUn+1o/fAoJ7gIDl3SpDTx4wkEm6dwdW4yt0V1+LdVeZijWhcjxbd6Rg7/zt8X9azKR3+UbHsLHitikjAAzBYvELB3XDlV8JLzdEbbGDb0c4kuwM6sv9bfTb4h3xbOWQv0UUw5Q5zdVprMpljGPWXbjmpsMyzGZQnS7ALtxBWmH0UPFiZPYkAlQ4D0U/xjCYpbAz2QY9jsAHfFM9NwrzmhokVdMsR7BBK3z9fGLQxFIwV1++i13qF77LB2p6ddXjeYsFiIvCueJu/wynjq3bKVs/aDEslHPvZ0SdEXsbqpDSu+RUntYBIpbiaM6iQbL8rN9RHwO15V8wPCnY8QKpJsWpcYoClKXHi8g6T0nD/AJCjI6BWYZ+cTf04CnMcLO4MO6YxcmgAMH30rEGk8rw/M4KDfgghKmHdo3vdtUvmaMQy+bD/tgmGeIt1baeAaFcsdAF5r92D2x0QqbuH8BNZ+xZhYR0Yy5GrCekcBxX3N4LrydYyd5sdMRsj6rOkeyWFzhTsgg0ZX1r/K4bQj0wU6Q94PACRwlv0FUDHtlU3YLbaQz8vDVjSVWTkegd1DOEujN0RTg2z76ThKHjZIMl+z3VyPe03qzdMT3wUaSxy/vWpaBmpgPIQvKAIlnyoYZ2FuWWrx4qmErEq5z4HO3hVM400rWwgvxBYkWggxkX7MjN+aen7SnA0vqKgNP03TywinbGST5oG6RZoIOOiNiyK/Xg8jkxF/NLhEpqc1aGjgn2s+VXDYifF/1RIt/3JoeAnh7pt3m0PSjeAJVS6rjoQ0vHY+h28To9Lc2k6AJOEZPF5icyxYmUGTT4bU/che8i5xhMfOYBZaqtKz5dCMuB5xmGFbdlvVvbuL/Im87Zvy6C5j0pUEiflOgtfOl4enRO3aLn/jRUZRYxauvgYG1uFbTTSOtGWmKUqbfQ0uP3E6+FN7DuDdG76WfrexyvgLBvaTptSbj92kiwQhq5bOIHVZEneJg0xkhrIU5mcDQxG6SqB2paRRZzhp3H9GDP7vp9AW8qZcXxoDsKA0mAmoPpXP9BLFAG/gjAoB3FNtOlOs0sHCj9pURr7r9uto41T7LIMQ7D0RD2B5PlDgtS2IDXPQGoOpCvZZ7Og2zzPRaIUZlZ3YIvQjwf60u1POQYUpcSVRj0z//uNVYkc+6nbCmGzmVIJJRbCVdHWt9yQwLd9zliZiidV4O1ZwgOWde6QQTpHKwEyQjKvYtOW1zPm3G0tQp5mYVybvYnnsDHLGNekpeLDmOyo+g3AX4gKfUfoAJMh5OduZwzTKZ5 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: N0z+DKvJRcfezO0h6gtvieow7YQT6wllLwtYiwCi05kJbuKUikLUekHJPxZPLTkDdaPgsC68GDdKlsdx/tv3GyZsPzw7pceJh9gt7vjOPGa6RV1fA1Jsy2FhCSF/nKtrE8pI1TbAyCAPEDN00WvO2YcksPqgnoOqfBhy0ZLLxer4kVe9AFd7ojrLllDTBzh5FDKJWGaV8fmng71HojSKaH9hhbPe0+/5Zqei+KJZMEesRplCaCcJPCd7tw5tXttLXmg+HQbevJq9CSI0MrtOkCYryLP65N2XydAL2iwf7f3AXXidTPUxbVRMxBlTDoc+VRE8IMEXB/1jcidizd1VOSb6s6ulkLYDC6IFiKCpoToF80TY3lh5+TemWBvkXBX5+u6I+ZaKZJBKWLTktd/76fTS0FPFLxHJVZSTl6e5X1YyODboMrzvUqhab9T3mT84GIF2R5VBxAIohfBn5cpailzKhEU07A5+rLs4Z3I5Gvpg7QpSeBkOqIaWMRX4pPAyMSlrQ2+3m589uf/xgTYQ/O3QSKoN5K4ZIKzpHV1gb88r+LzdHMclV+mztes8D3OvDIHLc9k3MmRl4IBzJJDSlnXnIQayW4TN+7iH76bMvSj5V5g0ITP4dD24mP/1pkYVjwkjd7cDH7MHLbGWoh+cg7gg+MXo0hj82+1t7ed2HAbzeqpL/oX0VPCqisRpIpnSMZ9OnGp7U59nrNmSvVtd00MOnJ76siSnuaCKyNjiJicZTn09IUKBNO02mifQx4YPR+DTk7YL01XwYyreEVn9MluMkCVNSL8LmTpvN79irGTOSH7dMRjrm3pK5qR/iTfqUk2ADX+2NLAUrkxKLLSxrZn1mbzmwwwjq2N14dJnDmz5SAFQ0JRCDIjX83I6eq1wdLDk1MKjzT1VJKt3uTHpUkkk7fshfoUZA9CdEUfCXGg4kLOGbOuHBfYFiLcttVG1+uOxvXSNvcwzysHHk1ClpaBZ51eSo1wYqMBD/sXzAlPzcFbcMryMf59Vd+rrTNKGeYddSNbAWmygWDQ94e74aPJ9133hRHnvIOB/zCWeF2pT5faStc5sH+kKumvgzGV+qCmTwhEsC6PpZfAOVj47TeVELNh9wfdvVFiBHwQy6gNcYjOT9ZTwisi8/mMEUNV9vJuJ5WIPvjaJOLSakifc2qCu22Yeh2kznaxYpwnDGWbwY+gRzU0TeIVu9rQbqFwFPpVO7bC8AgGMTpW3j2x22g4WbLPBjMCPdQXLsGbAbiBJvM/W8BKd/uyngiG1aYj6l+mE2EvuDDKll5G2IuWucC6srtrNrLm7v8iKhw+ti4jovPzDwk9Nj0R0j4/8T/nZcxSJDtonfydVo1+CPkp1UXuu1YkmH5uAcFvpnf9Qb/CLBCO5McprEgUJE7V/hnFoNsJE1Gsr1xG/jZDGtlpK1OndcLEdvp9ep0pCeafSLmSnV4ueJiFkyXrxs3JKFh2/kuZWFl1W/uBaFiDCx1dqLVhkw21uPvCrKF8mxTtPdRWS/i2sBjKRiWS+CQ60VM7FW5qU83EEqkF0IRIf7ZBUdSi/02kTGfJlH/d4cHvOU4iYOClk1XoyWmcrLHF5Er3/IjRRYDEeuJzX1g2RK8zVJw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: PltBRNWMwLGLK3JFTvxJx8fB4ZfacEVaF5he1kbN768tGhVNxd28MzFX3azbVndd2tDtdHM9c1AQ4QMCfO+/UdWkQc3rKSg2UBJ2weL9wHHrVCKoacEMCA1On5N6Fh1bmOPnOIhTWSTgWVJw4oVuidQmkwdd23SWNmRIxdYpiPFuqceF4UsVPLwMUzBnFq0pFCX6yasHClvhhSiSDcqAX465XxeEsX70GeOv8/6BWY2x2sO677qnZGMlPv6wVH/JP6UL0vzm2ZhLXz8tCogYiul6kK6BE4M0/N901oDQmkTSh4Quvnocz+z8ED3Q0xuQLQQiKetbb2EhcuZ37FmCLm7Eodfb4qe24xKCU2V9a20KI63iGWG9bWF4a1YoHNboXPM2YyPQF1VEJ+XLg2YFZ3mBhZPUcotymjgaetfv1Ff64dR1jvnA8weP9xzOaXFY75aTG5J4awaTQp6Rj/1La5W3WGlkI9RcnjFAUdM7cJ7u9g//7rN+0cwoZsGGKSliKORrqILvU5TwYbEWGjkGpE8kVA4rHkvD5+a4BhjlEz8rpG6vaDloU99Jmv7nTHoBD3tmftUNWdiOZ6WAket5/88Y6w35udt8h49PxBCb27E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10e06808-f052-4dc1-0290-08dd4c364a1d X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:01.3401 (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: 7R1bxJapsj2iVS0MIvvWJFhkA499vLcjT874aoeAFdoIOkan65xqj1icnN6bZcJSjmWDfE29LFWF+D/Xg9Ph5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: XCV1LCmYKqzY8GY-LX0qChssNeD18E7B X-Proofpoint-ORIG-GUID: XCV1LCmYKqzY8GY-LX0qChssNeD18E7B In future xfs will support a CoW-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 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 2c7f5df9d8b0..82bfe0e8c08e 100644 --- a/Documentation/filesystems/iomap/operations.rst +++ b/Documentation/filesystems/iomap/operations.rst @@ -513,8 +513,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 b521eb15759e..f87c4277e738 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -271,7 +271,7 @@ static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, * clearing the WRITE_THROUGH flag in the dio request. */ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, - const struct iomap *iomap, bool use_fua, bool atomic) + const struct iomap *iomap, bool use_fua, bool atomic_hw) { blk_opf_t opflags = REQ_SYNC | REQ_IDLE; @@ -283,7 +283,7 @@ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, opflags |= REQ_FUA; else dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; - if (atomic) + if (atomic_hw) opflags |= REQ_ATOMIC; return opflags; @@ -295,8 +295,8 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, 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; @@ -306,7 +306,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, size_t 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) || @@ -383,7 +383,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, goto out; } - bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic); + bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic_hw); nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { @@ -416,7 +416,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, } n = bio->bi_iter.bi_size; - if (WARN_ON_ONCE(atomic && n != length)) { + if (WARN_ON_ONCE(atomic_hw && n != length)) { /* * This bio should have covered the complete length, * which it doesn't, so error. We may need to zero out @@ -610,9 +610,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; @@ -647,6 +644,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 4118a42cdab0..0c73d91c0485 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 75bf54e76f3b..e7aa05503763 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -182,7 +182,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) /* HW-based torn-write protection */ struct iomap_ops { /* From patchwork Thu Feb 13 13:56: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: 13973304 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 DF10B221703; Thu, 13 Feb 2025 13:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455039; cv=fail; b=Y4vYR08tbOMJHaebN+L5E+sKOLlTwJOkRFbYqKtdOrSYOLsvAlOavS4iopBu2JZfKSL4TC+waCpFCM41w8TSTf6q2dhjfTwjBa4jcuEYzlyG0WA9KX+EyaabMKCmMOM1Riprll1nVfq+2NHvObPG9RT8lmvKYw58s3FecYDl7bE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455039; c=relaxed/simple; bh=1M+FM/Mca5rtuTFN2lTpAUcgvO96mCawZ48BpyIzo04=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=T517ipgWuDv7HTcSfH3peCiYGMTXoSGryGQcjjYvviBveAsRLKP7RTdG8/ZQGOnLV3UdYZZlYB7CzNCT1adM2itwn7rionMX4R31yuq3bK7L2IhhaUSu/cfaGTcs8Bf4lxQsUxwVWs3N/37iYjAATPh8eoTB6SZ69DjliWSrMRs= 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=XWT40DUC; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=On40hb6S; 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="XWT40DUC"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="On40hb6S" 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 51D8fgK6021984; Thu, 13 Feb 2025 13:57:05 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=O/wbJUh1s7CEXlTu6VJpmcOOHv3vNeuSN2V1yfXEZbM=; b= XWT40DUCqMHwpSxWq2aqDYujApbzsPvCO8rD6mSoRpdtbY8Do87EWdkQglGh5U26 CWPCLOk4Cl/Ob1xF3zVsFcpDqD92vTmzmqkJlUIDiOueOiDgtbn4n5a6U/th5otJ U+Sd3QZX5nyJOFxWPlSfeklfyeG3i2lp0/y3swe18rZjUaYLAIRpWIJWlcQeK7gJ /ed42PCS7p8qY5Vl4ChAlGIkyy/CHmvWNn8lldPKR2vbhUu9grWfp5Z8uThy0XUj qqOuErXiuWrz89aYVrUeHn5klt3tn3a4Fy6ffqJdSjcefKhtWAyVU3VonFoXevIm Yq+z1YroFr0Ta23ltun8PA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0t49jh4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:05 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DCSMVb026996; Thu, 13 Feb 2025 13:57:04 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2169.outbound.protection.outlook.com [104.47.73.169]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbpr75-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BYqK3USD2DdH06MRpDIj721KagnG0Mvkq9JILfkQr4iNTw3KkWhvpUH81Dw6w5fUwW2hguPUN4z42/9ehEbW25y8kK0p0QXkMhD6F1KQC5AxAdN1UrCmtuGl25cWDxautNM1fH9kSK287Fe4Z5MUGbzP1cuBXBidf62dIIe5Bb9qyigjGueo+bHixLi3LStVUb5rJ6pFR6WdFfCpZb2Y02gG8y31H0FEaBcQtYU0bK2kwlE961ICxTZHGSSgE/0UwjjE40Pihss8iEPPXF+s/lxQYsgHDjpNwzYpWOMe7a9NXh6OglamDOm/R+03G9Vqh6nRTIA8/0uM/6SwHci4uA== 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=O/wbJUh1s7CEXlTu6VJpmcOOHv3vNeuSN2V1yfXEZbM=; b=b32XvhoI+ST9mM+ffvfqiBSJHatKj/U+LFj3ri10BOoONOSUsH5nmBSIlfqVteUwSrgKmgOX3CYfbqvXYUJJbWvZnkx1LgG1g2Wo2pPFXRIorsZIUiMFqk+9P9ndW7GIiK7tvNOcd9b7pVE/E7qgNI5WNEWIeb9IgvzaoDwIa36ImyrqKVpCTSHaoOY3VMDRQ8f+HKsXryxUUDuF9uj2QRksUIzBUIhyI6vrW/x53kHE6etST0uWfIIpk7ah7wiBTVtWOUNTDBiGJ/POARODkGab0DGyFX7By6xutVLV0+FiK643q5o6RdjuydHp9UdD5tN9LagqWu4HzAb4mXJh8w== 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=O/wbJUh1s7CEXlTu6VJpmcOOHv3vNeuSN2V1yfXEZbM=; b=On40hb6S3Yw54/n8nmzFQqfy26svia/DLV3c4qdmBv7BpCuo7HIWeaPqhTXPbAKK+B5Y/YNs4w56n70NL2B/IrFAk19o43B4RtszoGvYScEJqAHF7tZFe7EG3a+bzzVlMurx+8lB8yUTBZgUDbSFWl8QlRJP+8R8ricajkANEPg= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:02 +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.8445.013; Thu, 13 Feb 2025 13:57:02 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 02/11] xfs: Switch atomic write size check in xfs_file_write_iter() Date: Thu, 13 Feb 2025 13:56:10 +0000 Message-Id: <20250213135619.1148432-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR07CA0027.namprd07.prod.outlook.com (2603:10b6:408:141::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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 7afdcecc-80c9-438a-2e32-08dd4c364aff X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: Vjc7QPytchiS+i66NQOY8jy9Qmz7oUHMZyuNxf4hbnRqMxwyQFOQXRnVDcfHpu2OCxZADyO43sssbwCTRLxs2gf+ngrORDO/7nxdsvQdZG25SVxR8Rax3+ysjw6+oT+SQ5QE15XY2yKnAJDdwyeSMBdvSVoXd+l0IRKxDjvV46YMx+eGVQxgfxJ58iPTk1Lpe5c3RgVG1esTFtcW+lBiiPBCYp8IwTnbOS+oyhqB8vy0UN2tQBN86FT8F8Nokjwc5HNd8FTNMUCBAeHDhrWdEmQDRjWeixEfI4cLa1s3lVVppJ5lDLaRXj2Ona8pocdR4UzkuySugNmP7TZGUHd58/ligaKwnS1jDaB5CESrm3r6lRPSxzsyo1CqqsCS4WOM/ocomvHOAnFF/xVcZnqJ7VL71KwEwbJRGVe92ADLB540wXzyCuFY9GEmIc3LkbBwk2qh6IfpHFEBvQfmvcBw7p6TtM3FhsNAGebjAePB1ZFy07gskcyGnzAog5s5aeG6tXtLpJ/KLugR/hg04obMxa0efC2pTKbrTKiO/awX6TygtkaZv/IOcU3zx8Z6k/sb2DoJ0qkEy/FsWwNkBqFOGnQ/HZZQ5PFqoKjmvN94BqxaorXqktleYM2FEVwUrrD3tp9u5YJLhThRvUiLybPj4XqPBGU41EvjfYcBgoB60aV3nDzVpv+4c4xSLfsSkbTf2YHDnKCPb0LHXKd+buQdk5qlQfP96NgjHGTdbJ0vkfGhakS/rOa2P2vUfkJDZ7xyPmr/lgKF7t3oGyWkadltku7EusgT416Kf/bBz6hF6cOYl79o/YqcowcnY4swO078w/ndzqU5TYBY1ukLu1IpN2Lkjn8/GTsPahn3Aeonw07qfzae+BQaSDFIOnJQMrmxnL5L9aOgIqKphxZu9pyuG/K2rGuVSoNUzS8EwgEIsJHAlNbkYJUqysK/HiO8+AAK/oKXXNxD46w96NiNsTKEwHMP8wUbsroAQtPAkw2eR0zZhaYCOUEIKfdlCU+p3eNYuXg4rAV0PSPeMhMY0KxCL7hzhAxzsORQmVCA3f3ULWD9Iohdd2JQ7ZorKtYRP7nGvx0hDvuz3wdNG8oNbK1NkmMYVXHwOY0IBXX7FpM2png3dazcPQCzJtrZdXqM4Dqsx4DhXtZeDRAymqmNhAmdxlUTio5N+McjbvXcRlXtgNpTsoF07G5KfYph4aVTk1c9LqIi1q3e8qxCgnhC3ntn1D0jhV9o+OKwKdON0lGqju93UStWPBaA9j5FOtsBAwR7eb7IKBoAjMJ8FQ3T03OLpSIX1DdmDfnl6Oac2kJVjfbN3oOwg9JOPOi8QJgZZQMzfYcMVYxrfK7IMloq6+fXuJI2IgZ2ymkPS9oACdcs0F8hsYIh205RVClLnShalzfd 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CYWb+SNTHiqDfOezcU4PvPUVD0i3mBWWi06DSZcsqsbMnY2VRHYB9YVUsTXyi80ZxUw9iO5ra4QOBYCpgx/KppTINopmRR8s7HAVniroGEXra4JhfFiB7zI9hPW1cMjGEYPRhz2GZifMAjfEotMpIzSviikClU9msYAAxXhjsNIu7QieVIiUEg89RjYa9fG/pAOLIddkzH5WxAYFStPM93YS8xgdBwjDjXNr6hSpADFNTQErzZHJr/I+9cVtX7fnSBp7Vj2f+KrsmPHZZoR6GUGSKAtDgjGJQt82BE0QxN+zs48HGGV0SfXzml2TgJrzWFYpqod/mKN0rytgBm02+oVFvQoxYPo0ntPH/fw2wmRpzIYCwdqD64+Z1sxNKiRNwsrRiK4aYSSLPPWdhTrsdOByoF9nbegZjqErF1+A9zk2nu1MHuPMFiRIspz6BwlvZTzKl+q9wdrMLgFNFa+0aEXmRoTVpU9T19jD1sKylyHPONduBgb0TPwO1SB6SxQL3NEx4UEFP0CORQRgI78U9zR7nOxJLs5BQxlfbbp7kJq4ZIax+Q8D6mTCZaJH4B2oVwtUPjoU0SdOjUvqrZYYVuROMJMHNfe+egRn/9e3svuYo+BNKuy3BXqHL7EFbHqi6nId94+Om7saK9AioiCg4zbCWSceQ6l+0/LuqbjiOUDbEpi7CgwK2Lu5heL6dC4BakJzcaDH63RteA9Q95wx2RArV9EoPbNn2OKLGh4nDKod/keNMKY9Vk1tKngqMI8s0o5uhjFeMMXzlIZpFZDcSa/9Vf6xvCQBNM9f0/HQYMTbe0lQPUvbnL56rIOjDCNx17foW8ZjKnnAOlY2HvKZuIcEqZDyJrG7kbizJgFaxsRIlozQxBgYsXuXVwPqY6/cA+Vs+mi9juu9Yi9dTPeY+KaHvXpOcoTYzJnUTEtnuzVYsneo8IzcuLmsDrQRkz8YCqblskpAzU9MH0716rioiNmlr3DWfRa2SaKMkSjg/BSC3xLsdMOy/7MYvXHwHhelwSOHUpaodGKDuiUPV+c6PA1nhesSeSA6xlf2TKVQE/LFMkgpqSyZCe1HByQKgoOKuauFK4r85fQ8HBVjYCJKgsN/MjI2a7s41NZkbKenDDSEjEwzvFF2CZ6fPBVFAQD6XOpoVfi5D45HS7ZAGeC6WoYL1Ygy+d5FZcc5zH1MbR/KjGQDF8UbH4r+gfxrchTFUk4S6B9vbJW+OSMXlixyypFjX3JRxp8gfOdK2F//31dFAkH9R70fvZcsHPmO4IhaBhOQr23oJW7hJVOGPYcVya8Jx4d+Eruc/8sN2w/sUT8P+5P09V2iVV/wdoFQeCxSalIpuYfzBJfap1vWZa/+NaBnuVB3GoH7jel7dPT6lrEC9C3EgRe2/T1kD3sekTHC6moiLmjkncViZPN1tCdTbpsJDZftyARtDhzBLVVB9FCNtmxCaZeRyQ3spEgmjuleiCWMH1gY5DdamuLpOJmj3jTzMzTuNYWQfVefaFraBkojKRsWitvjvj3qR1nPW2s7k7ZrtxZf7+pbN/dCV0ZhTzGbDFdCX3U8ugDLOHjr9vjbWsYFdczy9I4tYOx0vWHmaJkfbYV14dPUYQ2hYMWSWQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ybqufgHNztkv0RCHyEVyv3iLRO8tHgBoOq11VNOFU840m7dPcGKd1d+WyaOdEyb41vS9iZ8A0lGlT4VFZu/UkRKCrUshb1ftMlLgM/iPoKEtzZb/3icBgoSAYSB1KwIsBJm6jXSL1SgikiDblOMcOvQAHKW45glsycLE2eMoNf7aAcB745kzETMC+w/bvqIMbYVjZgN567IObDCw7zNbo5svUUIv8XddxtmMS+JRnu5yDZnEaz94qPP3/M1fOxgxYHKwHKabCbyMik8KF/BOM2+n/aFFWzDfGbbvljqGjRm9hOhHRJ37ywMqoyHM4hlZFB6LrMz9RZZfGyNKPCmglbCwxdwQ4lOtx2rM5f267NPGyrve0X5muNkuAgJvc2pyXYRi0ATJtajWou0vk1hiD3EIa+PxrX8LlYbVCN1FImo/rCNaDoTPpqGf1KXFjA1AoWE8gKuOJK+2lKnPHo30vspJXztS2NT9PVH7h2RwxIrycDPB0byQ3afOP0+6VWRM4Erh0/RUGHGHF37qRdqfLC04SD22c8jWPUmQ33bAGmklFcUcUoPrZwbUvV6V2QqZZY+9Ox+dFTnrvCDWM2rVsgXBLSrYenAhQYzNVk4pAVA= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7afdcecc-80c9-438a-2e32-08dd4c364aff X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:02.8445 (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: iMnlh7cNeudYJo6VZ/UEYtqiOVMD2cJarjD4wyapjlPAC9jo3eNrYWKfjU98tGXkKhO/CHioncbzs+WhYw/WOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-ORIG-GUID: dgzsU46Il0Cit7QFCh-70hTTFfhx-ML1 X-Proofpoint-GUID: dgzsU46Il0Cit7QFCh-70hTTFfhx-ML1 Currently the size of atomic write allowed is fixed at the blocksize. To start to lift this restriction, refactor xfs_get_atomic_write_attr() to into a helper - xfs_report_atomic_write() - and use that helper to find the per-inode atomic write limits and check according to that. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 12 +++++------- fs/xfs/xfs_iops.c | 20 +++++++++++++++++--- fs/xfs/xfs_iops.h | 3 +++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index f7a7d89c345e..258c82cbce12 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -853,14 +853,12 @@ xfs_file_write_iter( return xfs_file_dax_write(iocb, from); if (iocb->ki_flags & IOCB_ATOMIC) { - /* - * Currently only atomic writing of a single FS block is - * supported. It would be possible to atomic write smaller than - * a FS block, but there is no requirement to support this. - * Note that iomap also does not support this yet. - */ - if (ocount != ip->i_mount->m_sb.sb_blocksize) + unsigned int unit_min, unit_max; + + xfs_get_atomic_write_attr(ip, &unit_min, &unit_max); + if (ocount < unit_min || ocount > unit_max) return -EINVAL; + ret = generic_atomic_write_valid(iocb, from); if (ret) return ret; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 40289fe6f5b2..ea79fb246e33 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -600,15 +600,29 @@ xfs_report_dioalign( stat->dio_offset_align = stat->dio_read_offset_align; } +void +xfs_get_atomic_write_attr( + struct xfs_inode *ip, + unsigned int *unit_min, + unsigned int *unit_max) +{ + if (!xfs_inode_can_atomicwrite(ip)) { + *unit_min = *unit_max = 0; + return; + } + + *unit_min = *unit_max = ip->i_mount->m_sb.sb_blocksize; +} + static void xfs_report_atomic_write( struct xfs_inode *ip, struct kstat *stat) { - unsigned int unit_min = 0, unit_max = 0; + unsigned int unit_min, unit_max; + + xfs_get_atomic_write_attr(ip, &unit_min, &unit_max); - if (xfs_inode_can_atomicwrite(ip)) - unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize; generic_fill_statx_atomic_writes(stat, unit_min, unit_max); } diff --git a/fs/xfs/xfs_iops.h b/fs/xfs/xfs_iops.h index 3c1a2605ffd2..ce7bdeb9a79c 100644 --- a/fs/xfs/xfs_iops.h +++ b/fs/xfs/xfs_iops.h @@ -19,5 +19,8 @@ int xfs_inode_init_security(struct inode *inode, struct inode *dir, extern void xfs_setup_inode(struct xfs_inode *ip); extern void xfs_setup_iops(struct xfs_inode *ip); extern void xfs_diflags_to_iflags(struct xfs_inode *ip, bool init); +void xfs_get_atomic_write_attr(struct xfs_inode *ip, + unsigned int *unit_min, unsigned int *unit_max); + #endif /* __XFS_IOPS_H__ */ From patchwork Thu Feb 13 13:56: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: 13973305 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 B23862222B2; Thu, 13 Feb 2025 13:57:18 +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=1739455040; cv=fail; b=AQ1dwveyMXqdDTVGK0/i0TYJhz9eCdZuZOOH6jTzC+/gJc/owxsOP9atHcM8rhYJH925LHfEGb7nvysNvJ1w5cTqj81C2n2NZ1IEFK2ffV5ZjPpQp3fOZLPLC7wqa60Kjx4cPpbR4sGOn/SkJa6gmAB5DHMer9gXFj06A33aMRE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455040; c=relaxed/simple; bh=YAnqWcDqzG2kJt67+Pp+GjHnPmUZAzkCzojr1daDHvc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rU84Gj8Z667NVoCTlL7+PD8WsmKeDJZl6vZzLB18LUUPfsppVAEmrWZO0QBRwKkcwhETyN4e1894iGmyOITVC0ahM7bAQkHUtn1A+ce78Oum8aq08dCJbNGgqrxyrU9oPfQaEhxkgwKsITZZP+6I0lWenNpGpm3x9OJZeNId+PQ= 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=FKbB/ow3; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bsFq2tQV; 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="FKbB/ow3"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bsFq2tQV" 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 51D8gF3L027363; Thu, 13 Feb 2025 13:57:08 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=Opy9FI2ztnkx603tMTBOQppxYWeejjNdCg7Va4zdtKU=; b= FKbB/ow3syZbpCkjNzPcJo9sBjmEFqVDbC3VsM5IPziyHFF4/R7UXYuqOXdTg7pT ZuWhw4haID98w3hLFNQdXA3vBg75emrDlAGlowtYBHC0Ydovz9fnFSIF+XcoGrLP iqW9BfcF8hSl7AJ8pTgQ88CzQWvNNQoOSFUARDvQ0I3g5iX4VjcwEZDVLVjBaUVr 0n2R9tWUpD67O7dYUdwq+YujW2n+VfrNqHu2U9niAa6mdSkfR6d1Ia9R8rwMrGOJ 5vqNV9GRqCNt8677Q+b6jXjZQ6le2607ggPWecrLV1ByIDuaLx+Dy9wve9Ya/58j tyjaxSRGCEH2kgO2zHPgSw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0tg9qhj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:07 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DD0iV3009791; Thu, 13 Feb 2025 13:57:06 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2048.outbound.protection.outlook.com [104.47.73.48]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqj1tuw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L+iM4W4AWok+XNT+hLUejvb/jg8F4R9tsorwh/NsnP9jWkmjlAyjDAlECllbLC9ok6+IU6GpLREKeP1RvWREkKz+iGDckOr5mnnAOtEoym0cDpkqp3bpmSquimOmR36GSDkegl43dFIfnMTOChURUEB8Fse4J37QiPYFe9S7yYLVUICfrdV7lPpMlzwxHEbBAFv6gN22o4vsp66we6JopOmhuUspKe5HaxPtxjA1ltki1ppI5DbcaL1c+8LvOOa9euUTPhBXBIqoNuT1C8FV/fLd7JzjXCox1LOPc0yiO8Wq5n+Kh7rGsknY2FlynclSIaLNP0EjMovcU11tm/BMOQ== 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=Opy9FI2ztnkx603tMTBOQppxYWeejjNdCg7Va4zdtKU=; b=zJVjjdRKwmI8DWgPZ78BBH3SxcFM/NXswYK5Iae7F/77rcfkE1BZGLwYmsE1lm11PFnugKxYphsRKyNV1NDo3EuA/L1HivsZbitOS9xZsjMJZMO7Z97aHq6ZwP/PRVlzOz6KkD/9bV0N+joXYucr2MKN+OhJNEBiFAAXWiIJkHqwMCeI5hiImTjBCL29o8X8NU0f7+Kx1SF3ejLgrP28YCV+K5T77kGux2jkpPDrxnjzBqw9ZIwjzRANW7rfGaaC6EKROtpU20eU9UQu+aXBNsGRLPQ1ppy1ideKqCtlGm6vtxKbssW58X5h8VtoRppkEmcMyALhktNTAQKme1FrVw== 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=Opy9FI2ztnkx603tMTBOQppxYWeejjNdCg7Va4zdtKU=; b=bsFq2tQVR+AphWuZUz/V1nEUCiSEdlKcquHRYXY85aZmiNlIkS+Hya0Ov8rZRl7y4kljY4gVvVJSXBqR5ODZ5ym0FgcT91PfWYP8SwYPoKYIVulsjWNqFv3jJwqUlXLW5gaxwh+um91NZfX85a6mwXft1LSokXuJOlZJqzapnGk= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:04 +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.8445.013; Thu, 13 Feb 2025 13:57:04 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 03/11] xfs: Refactor xfs_reflink_end_cow_extent() Date: Thu, 13 Feb 2025 13:56:11 +0000 Message-Id: <20250213135619.1148432-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN0PR02CA0009.namprd02.prod.outlook.com (2603:10b6:208:530::12) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 1b97ae0b-e1d1-498a-f7d5-08dd4c364be2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: CblrAK/+lTkqmi2177btD75kbr/nYr0TqsS3seYDsoNPc78eJHJB1kZw5DYNZM+wjok+9sxfXeTlklE1nK60JAn07NIzThZPWho2DvhUb/PaNtx15zf0lA8T8fAftL13PJvOGB/OtJfamPsoUefV+FYqFfyQxX5VdRNex/HcyO0fNTXtkQPuZ8h28FX4pnthi8YO2RqiAScmq2zlrah4awlRwcvjLPDbi1PX+7OTsPgRB4THlWUIzsLt+XlG3Z3mHHLAtMzCY1pCjeq6naKg5W5iaJWUMOiimrpjC665q8I9oM04vJaRXxuxKAWdt4+KePbIAXygKisviOgL86YFeA/Eux7S5PBZw7p9BDpdeJGRVjqfYLkWTY7rEPWaJF9yfp4n76aXS/naSlgXBCFv1IZUQbNCIKvyoghVHUaoATbeJAqHsFpQ1ylvdCp79NhHnuH9ZNxci1httGAweAaZWWO+AoQCWhSlAYcMrDwUTgRVpJQYNMAjau+MkXW4uycgMDfsLuLVPsm+9PyWgb82k/Rasnp36cLPgU30X1FhvuiXJaQypvZ8pu9/IGlLxrUc2RckLAF9sXQ5nCArx4vMtTh7EONaeChix4fFKo2TDzfMo5DKoqZulU6xw3rRQFtTEYYiRHpfJbWXo8+4HHTT0WKdW52IvCKE7ANg8KUYEBpCxxGaZdswNsfeQQRz9oOuYyCZ6tgDJMA3uMN7wqnnuH6YA/3EZa49v7ukZkc3CknAhJFP+9jI64FexdfY8StrPy023W1BBvdwFywCVQjIObwzb2SvK1emu0cMCtsRySs2csayAVHE1CXG9LygzwNX90aoTc+rahTZGcG+dE90tzSoSFZTaQysjWTLV8MxTllyhp4K/VYdji9Hd/H4fdvfj5QzGlWvwCm/901exfsmdBgiImCnvKUe2I6/WBAZwdzdkFW0Isx4fwOVTRSm9vI9BpdSpnQRe4R8794sAJzVHu9VyF7JY6ny+wjZ3SnjeLYlH+jTZV/cEsDg8UGtY5c7Knpl5m51/Vs99VDIm6AvuUCHwG+zASt5f+minso3pbEulX0CVw5dY2ilh2i6zLYrDwyZofMZzh9nKtCIgCWZDdtH8l5VoP1os90D0XuD67FABUhLQ83DWJ+tSCoF3jakOEzp5SQ23I7jbco7UbofwYGZeTR352pqeNqIa5WGIyZqBUVp2/lsNGzmwgQmU102Td8j+aZ2o8TmNZb8WiB5lwu2yzUfP2HCxZOcK3UgfHgyc2Y/ovruHUldLOjXtc4b9RQjztRKRkJpAlTEYjxFbLFD47YNzVObwPvvG5QR0gtcPvqqS1LXXE2psLOi7qMCVpV6MFFEybS4Et+rZ1Oy4lMU4kO3URZPB/PLEz/KdRC2kzaEj2x/B6PO/mEd6lDO 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KmYJtNJ93Vgxu3+6Qb8w7Egau7Qt9Np+tXcqlguCDGZZJvmM2bxawv+zylXAqfQ/Zu/ety1yFISYIf4g3mjpmbt9VndSDQPInPNyNA6jeWQtxKTGucSNfFXGB7eQvyqN0UUENkZclBlQI+FBczI4s/RGvaVqL1R6/SqIwkQWCvlPa737wiptfgoYvMhJcTygdSZ2PkqK9xMiD7Ub2/+SYz4aVObCImqOAqAhOVQhzO5oOy1EwT8anav6J67BMlWZkNGtEHQNX9Ufo7V02JcL51eiKYR40gFPVcfkkwgE23oJrzNst9TGdrzIX5NG4dp7a0TmKUt39s7uGeF+8ppONCs4sFBb+qojL0++M8ZNISeiu24Q9zIk9eneP1+Ohy+ryP6Ud/d4CTXqcMEmYt2nU1HX4YGtijpqHZWozxROJj1t/+wFx2u1Lr2uPN2Qjp6Ovw7DPAQYJLSD4YbixqSp+Enwoy9RqsCVgK+OsjlvzoGGUZkH5ltPaiT7QnZEU6sOlI8GnWNH7n3pqrfn7WP2iDqZ8kpma629m3N2AmLi+4VVsRTFP7la2tPiOXglXSZuS8PnUtxGMqvFEhpO7f5PVSd9vRy+zJlFVre177vzfDZ9NdNA5XIJ3eu7d4Kg88eD2N9UUXlv7CDvuBYIUdikh0p8JHZ0XTkcD7Bi6J/e7rcU6RwEfT4X6BIqwxNopILBij/GztT3SS1zU1Kn48wfhut+fXbacfYMKNSXHspI3PGT6+Z2CD7Fzmu8PXZK5Dp/bibgEma6lBySSLNw3ThBrb84bc3TzbdVM5ma+qv1LVq9xbGjEusMJc+QSfdH6AZs9AQl7CyFyJ1rlQec/b2FuxtlYzEfawPpWF1NAkvFb1e/yhJN0O/BBGWhBQisX8NA1ySUiDqEsidqCjy4XHQh63SvTMw6GmPR9ZfIkcTxOMLq+6dAFBs/qTIbMv0XwKuCjaHrcLS5Rlm3drvW4ZaBUvAQsH1tCDXOWP6MOKw8UVjEQ8jzW2N4IUU2/HJa1VVix47syucIS32jLqDWcBHrRv6SNSZzn6CH3u5g3a2o9NAozUCQ/YbrbiWXDMKMWKRDWdCaQbUaCUEfoRYbRKUGspZc4I5X7a5bMSLA23O/347M+Nix8EoidXQOkFNmyUVhwOdyNkJutnK0HnvFcjSTy9zmVnbgXTMA6067ocWoWMDmBKLIHkpti/9W/pXjRyvIW3DK/MQQt5gArxe0pqhUr2nm/TyZSCOVNOsO9gFJcOLTzZzh3HBrL/bFgcH1PgaH9siSjr7isE+J0Pt0I/3mOA4UfvQHqkgwFq1X7PIU1AA/7uXbByQE3TygE+NLDSMZcqqRLtOmtSF4+OERa6hZz/hB2WN5DwwMpwYbrQwDYZDW7SG0FkVi4jP/VgvGyzpbOi+LdNyPET6BS6h6AmVDqQOH9qVRQ/gUs83r7rUUakHcwuor6aJd9qMZfCT1qQkOG2P6ecIDzXzLtqfi7gAV1EhI6zpxoBJV+WPx0fhAAYkKMMYZcSYgaLr6ThGAEzKcGF3LFRmD1WN7Nf3CMcSTs272H6MkXHFu90QzTLz84dQkFhJCs5KwQoDzsREDNOeokDYoJsO94ttwGEcU/ucJug== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bF+ea0ZMH+jfGD5bSQXx2+UI2O+6S50IQNFJKe7dt6taexEy7OVpn0wrBuJYFLEyY66L9ooISKScAnOI61mJ71E1X0ogGGx5f+tvZ1rC/1eMWaGwHud5XMGTC3phtsjNvJ09Pc3qDdjk/fYf5qMemHXH2FTwg3ztP65barVmhJ+Ng5mT6wV95XDCg04247+eTp6B8Crt3wpZggfmTk0yo52oy0LKe73EBHaBReNWqiMvdpy4Bq5jBFlZZC4qIYrnmzMqAOgQu2MAcM0e4177KP0vxJymjP6RBg2kWiE/keKAl9RPzB1EoIQL7wLkeHowHpK/26MIUWhzQ0NIGpyrpCRjGkJUTZY3KE16m2KJVvRJupWX3SgV5nvNkkvHNwjut2Vz3CSrhiyUY9YGmrzGbtICvRYb4QlG5UrbkkVOphoH90L1eGnPKf6dI4T3+ZQGlb5MgsXh5qQYzygPe2RKluW5nIpjvifS6PqXlr6ce/antRptewLsyJUuKJ6GgZSK22de9Ae6xn9jTAk7XkEs4fLayOpOL9KNpHm+AX/07N6dcEedHBZXfORaRGHEtT50cwcZJ5HDIkpOZTRmYx8st2Gt2d8Grr4JQ7hrOF7YbkE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b97ae0b-e1d1-498a-f7d5-08dd4c364be2 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:04.3215 (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: 8lXTPSFm7Sn0pS2zG9pPHLoVw4os8I7qx9RUk48iKPwNoEuHt+MQudFEA3LDR9P7cxqfx49SwPdiTUeejnwg6g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: vVW8JBCT_U4qAzfcctNW_YZcWvMZutuc X-Proofpoint-ORIG-GUID: vVW8JBCT_U4qAzfcctNW_YZcWvMZutuc Refactor xfs_reflink_end_cow_extent() into separate parts which process the CoW range and commit the transaction. This refactoring will be used in future for when it is required to commit a range of extents as a single transaction, similar to how it was done pre-commit d6f215f359637. Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 73 ++++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 59f7fc16eb80..8428f7b26ee6 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -786,35 +786,19 @@ xfs_reflink_update_quota( * requirements as low as possible. */ STATIC int -xfs_reflink_end_cow_extent( +xfs_reflink_end_cow_extent_locked( + struct xfs_trans *tp, struct xfs_inode *ip, xfs_fileoff_t *offset_fsb, xfs_fileoff_t end_fsb) { struct xfs_iext_cursor icur; struct xfs_bmbt_irec got, del, data; - struct xfs_mount *mp = ip->i_mount; - struct xfs_trans *tp; struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_COW_FORK); - unsigned int resblks; int nmaps; bool isrt = XFS_IS_REALTIME_INODE(ip); int error; - resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK); - error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, - XFS_TRANS_RESERVE, &tp); - if (error) - return error; - - /* - * Lock the inode. We have to ijoin without automatic unlock because - * the lead transaction is the refcountbt record deletion; the data - * fork update follows as a deferred log item. - */ - xfs_ilock(ip, XFS_ILOCK_EXCL); - xfs_trans_ijoin(tp, ip, 0); - /* * In case of racing, overlapping AIO writes no COW extents might be * left by the time I/O completes for the loser of the race. In that @@ -823,7 +807,7 @@ xfs_reflink_end_cow_extent( if (!xfs_iext_lookup_extent(ip, ifp, *offset_fsb, &icur, &got) || got.br_startoff >= end_fsb) { *offset_fsb = end_fsb; - goto out_cancel; + return 0; } /* @@ -837,7 +821,7 @@ xfs_reflink_end_cow_extent( if (!xfs_iext_next_extent(ifp, &icur, &got) || got.br_startoff >= end_fsb) { *offset_fsb = end_fsb; - goto out_cancel; + return 0; } } del = got; @@ -846,14 +830,14 @@ xfs_reflink_end_cow_extent( error = xfs_iext_count_extend(tp, ip, XFS_DATA_FORK, XFS_IEXT_REFLINK_END_COW_CNT); if (error) - goto out_cancel; + return error; /* Grab the corresponding mapping in the data fork. */ nmaps = 1; error = xfs_bmapi_read(ip, del.br_startoff, del.br_blockcount, &data, &nmaps, 0); if (error) - goto out_cancel; + return error; /* We can only remap the smaller of the two extent sizes. */ data.br_blockcount = min(data.br_blockcount, del.br_blockcount); @@ -882,7 +866,7 @@ xfs_reflink_end_cow_extent( error = xfs_bunmapi(NULL, ip, data.br_startoff, data.br_blockcount, 0, 1, &done); if (error) - goto out_cancel; + return error; ASSERT(done); } @@ -899,17 +883,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 Thu Feb 13 13:56: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: 13973306 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 9D8232222BB; Thu, 13 Feb 2025 13:57: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=1739455041; cv=fail; b=svvPbFTqLsb9NB1jfD1ZPxTICctqKs4NiPTIDTXZHGyL5RqfRQ1ssjDJFqQpahCxJ9oZwVGqKp1F4qWS/jzRfd2bougFUBMzU4ecm+rs0dnZ/Ts4j8G1wm+Jm0+6wL/iuFdmiZE92FDMLqfR7YrdIeq8XoKukjndCVz9AcUElik= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455041; c=relaxed/simple; bh=WP7/f3t9TwAih0x83rp6NsvXttTjrbkh3FXScWfpX14=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Qr3nCLFZ7ccv95Tmh0nKVHShQOcgk355RwUX3IkCHj2IJdwWFej2BpEPAzbROn/dZhJZJ3gUq+XXHR2yh2x1yJrTXVAtf+DTz/lZ+IjoGneM7HY1WoRlAZe4G6IrdESiwIFsRt2xo0vESe/2tljuNw9d4Mt8EI65J6WaEXjlJ8s= 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=lvQnaUOx; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=p+mKzvuD; 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="lvQnaUOx"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="p+mKzvuD" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51D8fVdv022161; Thu, 13 Feb 2025 13:57:09 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=mI3SkHvrxsz1MDYjszzGkm5zZ7e3wl8ZkkvNg8JdNZQ=; b= lvQnaUOxb2WrYWxaBqXEooliuNe0w1ueYhHQQlgHHpUund2tM2YvZD0HmnLY4o8I j1BaKUcZH8CWiaH5G11j+2dULQdM20hh9jxZVRc6PHemjNyu9+sv5m9m2nhdkeZb a5gjTV+/ak5nPaCkkW/eBEQsHD3NzTp3vTGc6Ygh1fmKxzYv3TINwTmD8NqMK/QU 9x6Bq+sqlLS1166kAWMjnrrU2H5w7LRd9/Nih3OZnjqzHOXlnGo8AmeD5+InTKPY yGfdxpxKYq7cTLNL2HkDLyuFTvybWa00KdkyZIrMuJ2uHLREAWCfG9iDDV6oaTuP EnYZZb3p9tVqKW0pGT7HGA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0sq9sk2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:09 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DDY8Ap026949; Thu, 13 Feb 2025 13:57:08 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2041.outbound.protection.outlook.com [104.47.73.41]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbprav-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eVG6P58y7QlY9ScG/nlTDcVu/WHlWKTrEcIO5DR4hNVguFTiYfAfU1wa5mCeNoEx/ak+HBZANcdyJiTwTHM5Al9KYrsrjWkOqdNWBcyGXaZW1jVoM9qqxFi7b0Bp18CGvB4Ttqq0VI6R1J/g7cmaKzFOo8nEyxb6kJAR3rPl+caNmHoxL6cozgY3WdkcgK3RzJFqJT522vuQvjVhtg8HqsKhbrRP+c8TvCaTMG7YmopT8KOHSSVoDsOBM4TGxVvJliM0+QLkT3DqS1AeOVs3hEa3TwlC8wcijeWiAs6TOGe5jXlDTzrFkmjGkHEnHPJTR4LbAkf0zwXFGMkSyjV5mg== 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=mI3SkHvrxsz1MDYjszzGkm5zZ7e3wl8ZkkvNg8JdNZQ=; b=BvzCJqXSNK8yWa/g16uXBVwCcs3BroiyLLe9jOA3EY8Jc7MxK/JOkXQm3XXyA9cWc6K/qoCmPgs7yQKcdQbv3UMO74r+YsRF7+IQa9tyI4dmrEEObksmfbQszblHgPHYRveSbmj0SB69DZIqcIyPeMpP/gVPVETVLabgWRbB1hwVigb0yw+o3pGSJ3GEhMA8FwComm57U0Jj0Dlx8e0CfXjGU3Hcdngl005QIihK9+0ExBsTjzkvug6qffLHbrqpBEux4R2DgI3gJnBA+yhnU7Qy/uKa1TK2IRNjkCO8in8WNoYnRKzi3epuIzamfPnifeRUearKNBPzgTq08UUgZQ== 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=mI3SkHvrxsz1MDYjszzGkm5zZ7e3wl8ZkkvNg8JdNZQ=; b=p+mKzvuDq3dppvBHCWHwqUxi3jAYtSbDGD1tjzigg4HQXLmGd0ZsNScHBePOEdTq7wfc2R2bIBVtz0vpHBknlK+wBqmwo4bB36Cgzz4mmxEEF5/4e2xW8mKJChFQ03pp8KuFzb+2ftSPfo4x/Y5EjEYUXHt6UbsOxeqYKvdZ2yA= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:05 +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.8445.013; Thu, 13 Feb 2025 13:57:05 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 04/11] iomap: Support CoW-based atomic writes Date: Thu, 13 Feb 2025 13:56:12 +0000 Message-Id: <20250213135619.1148432-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR07CA0016.namprd07.prod.outlook.com (2603:10b6:408:141::21) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 5794d828-2e6a-49fb-7699-08dd4c364cce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: tqOgPDzcHQlMW05tixITwOjLwyhcQvGLwuMF+fqertYqE9NzCq2kDh488L/xr0tmiyjEHmU2bwrNfWWjEo7CyJnLHClzjOLc7Nly3z2nLrBY9by7URdLczy/HrI6WBBfoMLYN+ow7wnmW/a3agDCA7IDfHqcJVg6mJnVp/518WCGg9yeiQ1EjMNVHHiafRsqIvZSEIL6HbIf4x+q/JTcAuVVYoIEY5KIzeUvs4EUD8Wa440rR9uH4u6skRl/TpDYvUMv+N6abSIVoK8N2z/hBYHLDtH2+PP7KmFBz0qWoakJAXD2412Oqzl7WgDYXERUSQwtIyu0Xt7HegBlksSlzOXryYY94s139tkDPvG2sF9K4+sKxo+vDpCtdxwOI8iPE3w22mHsJOZPn4n3KPxxqWEnxcibfpnsdeOdOl5Fqc95FRs3SBttthjz23/yE3bR+Jk3U5ByS9JrZDhypiabw3p5+FtMte20IntAYuzMIHKMX29Hn86rZVx2GpMrLv763VSNx2D0kmtC2Bcr92mcbXBkdcm7At1EA3lAOWPbosIyLbsp5nL8KQDmROtHsx4AUxAY6zh8A+cwqfd75N6sfXIE3DSDQHGEQFx9nVF93GijKevrbF4Gxi4fRzKDAm2mMdTZ7oTk7L92vHPg56L0BVis/lBXnG3I62NCid/+yzlBrReE5gMP68S90Flhd+yP8vkzYAx57yq8wd4G+6wK6Ymwh3NgLZ/d5DbjBdkQNoTiup3iTb1P5YwTXYEQh49xj4wKTEoKxwcC5FB1ylSIE9oR/xJDAw89xbr433VKCLs0p4q5wcNXvlzslDWtr4m56WHj7bxqYX5kD6GlbHoAQRrwVE4yTUSNyvcziAEFvvakcbauPOomj5foDmlhWo0rciJEFwLS4aaUdGm/zztBtkIpc8ysElIaN3apD7i6zTbc3sWCgB6MROKoi/VNvPiN1QgFlZJtxWm+zLPlbQsfKdKs3YxTByMQBYs4VFSMqMzQG6J8/0JoGI0fo8oaOQs3ClWIzq0GqFwOVu6Es0LDswvfoUnbvpjUimMpbxZ5r4xlpSHhYwpve58wMgVF9hCeSrypObFiTWG4YUEzlcD7FfZ/sR+PxUXlz4V6wOH6V7HSSS1YjR93z798Ki5SZQugTL2f4IaxlAlOdf0mxVCApbv8ROvNiKkym0R77YrxUzcJ0ovkjrgEMS/UX8Lo5xnQ8/i4UUaTaulj4knQfBv9rzqUOmovZz6aGms/Z6qut/HSdf8M0xnsXK00NrwUbbZCvcMWP42yMhJ4QZoMKjjtHytdx6KdkoA6bhpk3Lb0Zkg3aIO5TiW5GxQQI/U84wpolH0+Fl33cY5bztGQTKu+VZBqj4tYkLnBpcTkiB82lnesjcaiF00BYTAPHAYvkVDE 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rSc6YuqFSTM7EH8VQ4KrrXBcBji99orF7h2QIQmCnT3cEsP7KbtrHzDKPEOISCR6YMSKe3LKHAJDZ9wekQjaC///QNBHtXkkho6KgEVph/yxieKMf5v2IwsoYVUku+YNB9HnMfv44+HEKW8tCrATypJzwozQe5fKtV8JVA3MGJNVhcWPD2oimV+2w93e9ZNWUgtIg5ymE+FuuVQpTXXG1m3A0YSXSJps0t9XqM1J3MTnOPQ4jjQ+gro1T5eHQfcnE8JO1OkW+RLwAv1U7pRFNdIkPxAQxhRjbmC5G3HGeeOf7J1qcxnGfnvJuOvuUAWddu4RRRCPRB81gWyqAjqeF9CMA3r/qBpAon1rENxcdvUf7/T37PlDnohGfQoA4QSpN1WucZAU1GH0RFP0sO+WjyeRumM0jN9YL7N42905sx6/IZobsQCKRxN0j/OsRlSL28RgAGoJoONV0OXPem70XhyaNDXBmqN4WA5FECOW1hs1Tl3oZbc6B/Eu34ZxM5vCpBz21P0Gz+H3LyWguWjdj4h7pZakCqndjmLN81lllq1mLN8yLVCt5tQi0456O0Nzecz8XXYUxQ/6GvBmMb2zoWKLFVkb3DH5YAkbLAkWNJqCyRlNohUz3UC5Z8B3WUB0K/J8xhPOSDOH+ZGqtQJdVM426kw9OUhkEsHFcmvlK/AtJmsGri142XXYaFxnQSustLtovuRfniyx/oNcb0Tp7rRHqSlPbDytmf+h2VCkcCL82uU8cfuYQxTZL/9JoK0z8zJM8bRiTpOJBZZcx7WqCHTuPwW27ygtQ0W/8vTYZuJIBz89WYigtiF+dqce5qVLWzXwHPCx9e2jxqVgdbL30TpbXA0AZcEkVSDiQCwX/c6nsxR4XOsxYxn2anfZj4LNWg+rZCdxXJC8etxerOoFHC9vrE2gbDylQnUGaBVzY6B8eKD4GluAJT9PbTs+nU0lsMhzLXKpssrh1/tW5ETBa3Yeg8ZHQfu8bFWRC8tD3laZJ5tyZOSiC0UvPn7yqKltorYUcIli/np5qDQ68NioZf0dj9HZGHOV2LubImpm4CPnkGdcMp7wHUTUsLcCnsXmEJLRvJUQ8WdwUOg5chKUTmN1kc4QUCzOizGGuTfVt2lmanyGm0KvjNSRAMDlArq72BsaFr3YTOfKV7j5oFNlw8tQ1Lr4NjEzInYkmNUk0HDWaZ2FZnOayfAjv5lDLqmiMxYqsrdVPDaEgXNxF+EWwCXzPfbTeXN1wF3KPRVGtqbseYxYHItT93S9pkAA44nHgxUCo17UgcOAtK9qOaTgxIU4bLlg4C/cV63VlonE6HiA5t7+p7FHEVdJgG71LG8Tyg1vjWQM6nTC0fSmuAJa+wjKVs34P3x43R0gJXjJ/iwAviwFIhfrWtIvP5cM8KjzwpwTzqyaUXv43K21sO4qZQrAv3wNU0rixgngDY6oK0rfdnyMlJVfXqKfrYrol4++kMOTbj5X0WvZ2sAA/ytdiYqBrQff4yQxgWQC5usBttNj4Mee9AwGizM26Fiv5X0WsM1PpbJp+zncMIVRvdhz1ujcZ8dpbruDANnEKMG0bhlfWHMw/+qn++oW/W+vTmyGe5v4RR+0A4dHvLFBdc+XZQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: EIG5YieH9qn9R8w2Nm0UwxdtyQ0OqIW6TdZRrWlHYY2wVUN/QBpf3dkZrUAQnT2071VtS9ghd9QxyNxcdRhdhQ7DNCYgH4wx5SfoEuJrqBr8sFsjhtn6rEZlCaZ5QamRVUk1gXksl9gxAKEnFQVLaWDaMuNqGCs739F5Fu3io8bLtdkg+eX/mqWUXUusdBRbOez1FsUsl7R9qhMpM3Z5H4e27lKKSZjKoYcBMc08tkcrjz4Am+1UwVNZYg7flwYCBAfak0LhbNRGU+fCuVMUPQvBmdQeFexSj+PqphDX48PC4oi51uwBgsAp8yPT/lB/PNj48F+ra8Ex9Sdc9i7VrviBsNwMhOLjseuPuvBTiRG3U34uu58WMW8cOfX5UjBztYN7L8bQiMdeNNqDS+z10aywI+Fg6GZKV5iFlnwSACy384kkLJAyNUXQRnTPafxlJr88qN+eom1wVH2Y1rYZvY4LjRslmEI9eb8nfSuQtKJ1gG2mpC7dD79JLusRrhQysWE5X5dk0zmqF/qMNApjuzv+U16mDSqIgW3yNzlQjj5ZMr8OX0U0pYV1S0vR51gt8x8KnnAcBFRoAsn0WBluHRjk1582v7bC2NB0xNXQris= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5794d828-2e6a-49fb-7699-08dd4c364cce X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:05.8088 (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: mPszwseOkJ9T5+kMOoqIkjEXX3cr8Mvj3Avj7Hz5EwRmi8JbHDydw+J2QNA1MAY/fMqQjfRvrM7BQnSVWOi5WA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-ORIG-GUID: btAnqVpXNOfaYsEusZg8vmVehIPJrhks X-Proofpoint-GUID: btAnqVpXNOfaYsEusZg8vmVehIPJrhks 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 allow deal with the scenario that we are issuing an atomic write over misaligned or discontiguous data blocks larger atomic writes - and raise the atomic write limit - support a CoW-based software emulated atomic write mode. For this special mode, the FS will reserve blocks for that data to be written and then atomically map that data in once the data has been committed to disk. It is the responsibility of the FS to detect discontiguous atomic writes and switch to IOMAP_DIO_ATOMIC_COW mode and retry the write. Signed-off-by: John Garry --- Documentation/filesystems/iomap/operations.rst | 15 +++++++++++++-- fs/iomap/direct-io.c | 4 +++- include/linux/iomap.h | 6 ++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Documentation/filesystems/iomap/operations.rst b/Documentation/filesystems/iomap/operations.rst index 82bfe0e8c08e..d30dddc94ef7 100644 --- a/Documentation/filesystems/iomap/operations.rst +++ b/Documentation/filesystems/iomap/operations.rst @@ -525,8 +525,19 @@ 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_COW``: This write is being issued with torn-write + protection based on CoW support. + All the length, alignment, and single bio restrictions which apply + to IOMAP_ATOMIC_HW do not apply here. + CoW-based atomic writes are intended as a fallback for when + HW-based atomic writes may not be issued, e.g. the range covered in + the atomic write covers multiple extents. + 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 f87c4277e738..076338397daa 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -644,7 +644,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_COW) + iomi.flags |= IOMAP_ATOMIC_COW; + 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 e7aa05503763..1b961895678a 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -183,6 +183,7 @@ struct iomap_folio_ops { #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ #define IOMAP_ATOMIC_HW (1 << 9) /* HW-based torn-write protection */ +#define IOMAP_ATOMIC_COW (1 << 10)/* CoW-based torn-write protection */ struct iomap_ops { /* @@ -434,6 +435,11 @@ struct iomap_dio_ops { */ #define IOMAP_DIO_PARTIAL (1 << 2) +/* + * Use CoW-based software emulated torn-write protection. + */ +#define IOMAP_DIO_ATOMIC_COW (1 << 3) + ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops, const struct iomap_dio_ops *dops, unsigned int dio_flags, void *private, size_t done_before); From patchwork Thu Feb 13 13:56: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: 13973311 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 F33CE26EFE9; Thu, 13 Feb 2025 13:57: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=1739455049; cv=fail; b=TciIFaEyxH07HvrhzjkNlz/e9Ambpu3+7xB46XmTZABX3aU9jiLmm49LItLWr/UnF8gbSIK/ECl7l6y0SV2h+Dm9MB/5jcuvEXDHZYgv8+ej7G1TbI0/ccmePsudwzxnUaa2xztH2F+2eAU3Hg+gG/zQmMKiosniOI5vhPwb7ag= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455049; c=relaxed/simple; bh=yFkdszN+yIIf5ctuiED9NcL0bX3OSn2q1fKpfZuWILE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=jNIYINtEPKY2LRfBBmbGWm5jsQWrnLM9ju2fnenS60ZqMtwbZT+BpkpItyKwKmkXQWcBWuHotQf8XVv/NWLDrLX55qnTE90+XWdQzWChDw69KET/f7zM19CcLbDxxYL7/DJFmV0g++kR39Ecr+IFFC0LrN/7zYjlk1kOhNxWn10= 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=BQ6beFJA; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=FYoB6vq5; 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="BQ6beFJA"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="FYoB6vq5" 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 51D8feIO015121; Thu, 13 Feb 2025 13:57:10 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=UUtsP8WRcUDVXSWlknRGpnfQgEmPdhrVCQYzTK0dFus=; b= BQ6beFJA08HLvKte8tXeaVR5+17LKuS6r9upmh4eltPV61rmBPptXnnEVoXherhu eF25/LyFjBW46Bkr38l/8XQBV52nfGFtpUKH/FJtDrffkh7Kzbc8IugEhXADp7ew KpdPXUhBTwkpQhRJNRxEy4aysczQ5gjLbCtTBUHqan9IDNkbJirOw6oBYK+1Av9w A8hJTVNcmSwGL9K1QaGP7JHfT7PhsqWYq7P9uUFomlx2u+7n/FC5S0zNQuMiptEJ C7rVuG6psEnC0lB7djU3MbQNUgQrMvn9nzF5p36YCWrsVvsjwenEq5uXaRknz7B6 gwnvVFCa5c0xGXw8Je4NzA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0q2hnnu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:09 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DDY8Aq026949; Thu, 13 Feb 2025 13:57:09 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2041.outbound.protection.outlook.com [104.47.73.41]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbprav-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VSd6dbhN4RHqzzWW0exgWIb9ObDwD0VtuO1caJo4yXVt9Q+U/7XeXSEZuczt+1rcveajwk7P83wn79ynOhilqJSZLWp+OCCEKi/NtKg7pUBypkwbcADj8P0tKjXZ6HEbyzkPAgHdRkfsDm+ivLYOEZKbw9VEyTGGmvvfX1WikmTvqccNy2UYjiTYExDW7SB10R0UmmhffFkM9zKRtgx/mFbsv6cN9ymIBOIa7HqUS3RsSfnHG1+36azqWqgODmn79kd88M3DYrdFRLaj5zlVZA4tz+wRHC7sVfP0F/92VKal+EuR060QXpKdFvIxq8nO7JuQAsA4jdOSb3Ixup4ILA== 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=UUtsP8WRcUDVXSWlknRGpnfQgEmPdhrVCQYzTK0dFus=; b=mrhvDjx1+5xbuKSuva0ZAhNH40M1K6bk8K54IGcolIfAmzvwl1rNZTL476FTr03hOEW2RZprWeITD1wQSPo+yGkAs3eYrIpKNu9PAsoMg3tV2EXsuMSB8sDLujtM7QSqRcVh9yQCYxsPo9B2H138m+sSr51Ht4SdjLNKE5FQu4P3LnmX61SKFbHu1j1lkb0FI5gc5iBVk7dCoE8vwAguQgw1lpc8wUb1FJvTW586TQYvVyprShCeNR/8/CIEqBsLmz7k1Qk1xftiztpVwWvzQ5ocQmLaR21P+nVkpCZKXXjh1oY8KSqB9afBXY6LDidEDcNB83GTYrFRj5mWfYh/Rg== 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=UUtsP8WRcUDVXSWlknRGpnfQgEmPdhrVCQYzTK0dFus=; b=FYoB6vq5O9v1pJ3bJLGgXITAgkO9VboeyS5jL9VxuF91qFtoNbzTc0Eu2zDAW0lZwGInrSu+42FRCar4htyCHibNBR3hdiqj1ZW92Smxh3UuGJq1e/hhLTDJd+YdqLfhg/aWVzt/H1bHuOF5R5zX6wt2zmfL+Jhye9QfwGSPvvc= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57: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.8445.013; Thu, 13 Feb 2025 13:57:07 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 05/11] iomap: Lift blocksize restriction on atomic writes Date: Thu, 13 Feb 2025 13:56:13 +0000 Message-Id: <20250213135619.1148432-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0073.namprd04.prod.outlook.com (2603:10b6:408:ea::18) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: c5db8126-4406-4279-6744-08dd4c364da5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: 4U9vKtLan05ts2Qsu2k9EfOKXqjxgViTJ+hVtSbSo1NdAtd1Fr8HypdV1Qaw/v9smD197cMxmDUihn6P+3NdwpNm+Ac54hloMakkzmz7ee6G8Jx87A2RJIslAVxFtjIP6aCMUxBN9mgx/+co/MWfAtHUrK11A/egzwH3uuR5n1gvb+wZUuk8zLx8r5dGWXCokH/acO60C7k/ZTh+7+of1xrFUZhQxB8NJqa8j+/52HJgkYRDQOMqz8cVjzMOaov6NBEJimg+sh17GbijAETQj5PmGglSwCoDcgaBKdz1nlFaHSEHsjxjgIhPmE5hjBfgrPD8yePSe86D3WERIFAY8ng2KPW4g7lqRRswVCbbnYcoCd2+nWRT9d/J9N0d0XGIgHrwER2mQNZqBiAMrdLJ6OJlJMNd5BkkNbxsoh1C2PWgsln2zp7ZZrRcqBChzVmfGCbrTykK6Gi4kGUe0e1GIq9C4M4IWixuM1c59UzHvtd2frn7dx0O45Y0GYcejmiF77o5HO/eF+Du3aj10FpYdgepS3x/GbD+et05RmHtpkfAqYYjTGU3HOdoGRgeJJTvsH8yuTpByQWTOYjy/5e2xgbUBoFFqx5GesNhHQ7w/v8zqLf2fqAvIQFX7yHUR+DetOFiK2kD9hOx1W43iDpSruAVPG3v+8OKX8bkCuy3ZAVzEqCHyye+okEBiq88vr4rZvA+mK20q1EwFPYCLCMK+Bzt0eSv9eG8g55+4ASdv4wsu6bMFB/oLglQb9LM/o91lfINjnj4W90JgwMpBhFxU+B4AnypXX1TMKoLrWI4MN5rUajvm1dLLERnhY0tSAeJkaE73W34CiEgIp5dLDrC/aTXMLv9PIeN0sn6taFfDf+Agmi/aMkzqgPQ7mjCfHkxuL3vHPkYhiZxdaT9m51DNPUpa+TNVY+S0HdAAsTu8vnesC+xbI4Rk/UY6NbeMJYIRYzc0ylQ9LLaCZn1qjjhixp+akb5hjDQXNCAq90F+pOkyk3lAmGkh1pzDgIo267df6FGVgGiZJIbKWQTxF31rwNhngwy5ygbBBsHgTwXmrIAB/VQSazMrpbKqqBV1Pz34oN7IsZM+yB+jEsDVTbesKbpZgvsW0MvFRnhZuFyxqfwRRuIRgFbOz6/HJBBo8QuM8uqT3SBH8PViw2g8qLAtJwCpjrSn14/lB1V2uj1jGV9IxZeV+GCgITITmMSJXiL/S5rzrSWZEQF0Hsds1CDeF7EUrrZ8O9z3wX++WHRRrEYXXbhel7kpuENmEzIlOKc8VHLKn38XuvQBpLUFaI64zOI6gYmNmNX6xzIFJwli2ROYYG4d5CVJnuX7Sht062mNOD0M5M8UHHU+bb9BuKO/7GZbMIbJ0zqjodeJRUazn1krn04PSVQ0REcrwQ+/F9k 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2+TqDqjIniKrtwN8DOl6uprXo8QOpBF5oFq8y4rGno8wRX4yj9GOD5AP/MXcRrU3SIy8HAtk+Yj/5KEec/GOfJbO5z1rwPQxUS/1BK9V8ITHUk8NwkUQhTXgCfRUbaUadyO9Z9oi3KD1++avJ/jW3dHweTBZtQfwGb8st7ymrQ7sxn5bzlkFcnha3a2rtvaKEaLVr05aa46G18EYQ04Bppm92mP5L0qTgGOzXLHNr4LcyRIcEcZgODgd7aAE/GlXyFOGX8bTxT5GPZ34AVQt+0ygDvek0zmuZd01YpPiybnIk0j0y+bpDn4l+LiGaolF0gN2kVbMbiba/5+0juDyZKAgqenjUtRfsNR2PFe9orGsy6lFXBko1MZ/ieZ7vfw4AaS4E7XOh7WYSOhSV2iPR55NKGqeXT03UL9s84sVD/dCH9WjtD/BItmyvj0bfynxpxd1YAjKSe08TD541UhNCVIl1D6MM5dziitYWYr+pLbknlp4hMRjTOtZFfHMemtNXG9XXKhlAQjWGNKsk78tKKsWyCcM41HcJ/S29Np1EngLBI2DSqAd7aQc8yItQMUK1PUx7aGj4aM0RKRLBI3drHzfKccOXMimfVNJfW88EjNtq0chwRc/XKyoxPE5HPI7VwsSloeXEZzBOcRdnOO9g5098dda3gM3dGbiSIBD895Vn9iRYo1ng3KkVZU1ou/wYgdHqQuFkUii6gFkYrrxfLLpjEXRl1/3OHXMSq/7rO1Bqg9Loq4B91ob021soJrzYHloD9jbBCSo9ZUaiR55Ebe2GCaZ8SA3uQ0491nrEU7YdN1j5Ma3MWjFqZZhEkVJU14E4tRAaumqqBvrlSHsUbVBRKaxr7TaPf3cBTs3AraiOAH1+GRpsPPXcTsgQE/1CnW5qt1Vmjq1+MH7OuDdtGq0VMmHh68xAUYwR8MDAUdGqz3XQGR9m6Gu8gaFY7VSLbHmDcqQ3u8BSxG2GfjMGlM+Rcy3FL29vCxvyOhFm4hEIholHMU54RkYgiE4I2qHRyp0mXr3jzEgLSJ8MEzmYBwGy8EXZWko+2gMLvyTqMnn6stq0A+wmC7/qhzOxqTUxAAFWMcxmQgSv9f5Ee7qMY7vbF+eBXTVmA2t9RguUqzwWlyi5SbQqHYqev8aFzinM1CRJIc8liFsb5TpRc/hoEE5pgrvBdyOYfp+NqyN/nUFREP0onJwDXN8jW3gB2E8ybuWxkXY33JWUe6Fbar5/OQLEKi+7foSKIzhM4UACop05Jmrs9tytnHKlTTutfV2y9OGbKKUWUe4aN2aheEMqcDqk8f2mmBT3kkX0VmSWPUjf6jnvNQyk9gTB9z6Cq6JE4hdDUkgDMXCo2L5euDSxz5SSlTgZBxWBQ35MIIzoZsTke4NePToz6YmxdVfJt8r7DM3umz2ZikhfC7jAwzV9H6hLqYavXPZrH2NVDqbMrJIPCph4eGXjthamJtRx6XFIPywJOhYo77ee1jYxJpyT6VT4wnqTxNRgirJuLkUqf/ec6k/bKO1W+E3KNVGtl+fWlbRrVg6F+f11ai1lhfsEAf6BrrJa+Etaq5CruLeXARauYAQif7vle2xoSooRYGwHgFjw4ByFenei6JlxHxmvw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: bN6djErtDwhsdZ4PaTyyQ3CSjgwc4yZL4DCuSzC8ZRJIP9/hBuzHzOYwP5a1U9tMm8qNFYwvIZ3vN6xnDex1iLbxfLehK+eBRSWVbSzS1pTu/j9yiW0UCDw9AlXFC3KD1ZPebr6ZTF/UmLTkiHj026Ksgd6pFgRSul4Acj0dwLG7p4Ucg+l6qbRNZ4S0YMNa98zlMkJDr4pV8N+FbogYFg84rnxYgleMPDEbNFUeufgNfWaQR1vgms6eR/qIu4BBcNUkDIWZgd8Y9mZjEybpFofJPeHklfeQN0fozmOPMB/D/DL1BQZekhSdgtKrjBbMXPW0la3Br0BCcBfT4XvikjjZM1SzWfNPjXCVlwQc70HZfZVZNqk6dLWCZOF/TV5LsXQickJrEvWeWWyR/DAnEdXMQE3K3PADPXndCMnavcQ32mCvtrSqGntoD0hiKjBn0+qVkXDC+jkrAe2VYBk6A4BdCVTz6s8TxlxYUxehK3aYqJyWDlUy98jBPNXQdjck3qSad2ItZ06M0jCiLBme0Gy8LQGtt05yr1iUmrixFpH73O9v2QoEwi76pn16upgeliWPF0RysEurtOpDxHMFEMRgfOC1IsEyDzIn0qKuzvM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5db8126-4406-4279-6744-08dd4c364da5 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:07.2614 (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: CoBCVyjaVR4hCRXxGzghcL0afS5FZost9r42Unk8lYD1o6V9+HgE0qq9f6iy8Yj2UG+cF899aaeeLSp1KS0bNQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: 4XK2YzF1KqIGaLtPDnCDjuOWGIYrUdOD X-Proofpoint-ORIG-GUID: 4XK2YzF1KqIGaLtPDnCDjuOWGIYrUdOD 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 076338397daa..aeee84eccecf 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -306,7 +306,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, size_t 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 Thu Feb 13 13:56: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: 13973309 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 1F49A269811; Thu, 13 Feb 2025 13:57:22 +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=1739455047; cv=fail; b=p4Vd3DlWisHUYmlc94yx3nAMGkg4WGEGmClQFnh4vnQh3Bbo21TR3eBWsuLzagVhetAC509M2ozfN1X2NJy9JxAB0PrfkZD93Ns13v+H8DxowOWcMQhUpnLTvYxKdH8EN1QVKJkweVn+UuGPQipMu+/neWuhRv5MJYNhNS1mX2M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455047; c=relaxed/simple; bh=gDBb9MYt66a2D7yCy++c21isBV3p57d4fcHwulxKnRk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=ayaLX2psUZE7v7vpJd8zKFLu89GIRm8+dCFarsKX2aYu4QQK9Z+LTJnl2HIP7oYilAPoqx0j9ts2xsdF05HJZKhv4aw1twu9q5keLnVZ4Q1RVFPmkn1IrsgPD+DWaznOYAGoN7NynkZTWKnwyQ0x70/tjzxS2CDLoQPrnaAi5dU= 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=R1Kk6Xp+; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Lu6KztvX; 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="R1Kk6Xp+"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Lu6KztvX" 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 51D8gEbV015810; Thu, 13 Feb 2025 13:57:13 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=iFDJ1JOi3dh0g6CYEgXzvF+W7/GH2yOMfbfCh9AQY/E=; b= R1Kk6Xp+Aydpg1rLfsQSixLky9vNQX9YyytLzKKKpbafdLfy9iR6ZXXqNqRECFTl aAluesxcVDO+9uR/bM52jZzFEhR+l0f+4cL7cl1cLvWgTOSRb0zIL+MJ9nzwK+KY D3adQQY2A9fzenUFyUWedWvcst7Tby2FDSbT0YTZZlZH9l1jmkwuySMjwmeyAEqi I2DuGjzoqQyt5aHo5PGKkxCsxHywLtc4XjI9WB8YfdFH/flbggfA27m5K2/KZWR7 n+TkbQNMcA2FXH43z6nwYm7Cxt2l6opdi03U2WHi7BQ3NnA96z+43TYGv5fIb8ph G18h52HmD/v1IkLYGlCOJA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0q2hnny-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:12 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DCwq5k026955; Thu, 13 Feb 2025 13:57:12 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbprcm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sn2Vc89G/UsOy4n4cwjBT5jmjMDfClas+L1+pMuAEuBGFikYlmVCl6TA2GyTS9FMW6HSKNN+R1gdZIFkPZ/4AlOfI/F+QJXlFpJzgS0QuqXvmQz4dHDeswnffgdvO8PjEUxNYh4u6LlLGGa1hJXUxI2zpKcEx/FP1/obJfPeGbTY1cJbdfDnbSrjNCGvGvIb4/0rkG7UYJDXDTrzoJmauovZCxmrzN0q+9jz8uvSEcx2lhFfUyfGqNlMEXYcLJgLVtE0tin2Cxikeo3ZLLrp/AhaF2srcLxZyZ2zRFHWbQgFrAbCrOkGqJlvOLv4DehPOHOZZbVSXj5UAcMWSWZseg== 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=iFDJ1JOi3dh0g6CYEgXzvF+W7/GH2yOMfbfCh9AQY/E=; b=uGnHF+0n819iL1/u+jerjUxVNXporg59z4huftJufWLDvzk8NKCcOK2XW99iCt6PQIrztygOkcNI2UFMIsneCieisw/Ww29YHGfgRvcZbZg47fJa2a9Fyprce9rjeXvegQ3PNj6/BKa1jZ48uheTIkMeSGheBNZT6GwbgmyghtqzrEOW/6xHBIY2evxQy3b+ItHxek5jgsU9t02050tm39qF7BPVO2GinGHXyV2E9ts1vUI2+FPUwrQznIF3Szh53Rz/oZm7DgHvWChRbjKv8btPlYWW8QGtUtvfKjbMAI+dwB+/GY4LpUknUtLqZc+tgc/YpRRP1I1ZmH3RZa01fQ== 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=iFDJ1JOi3dh0g6CYEgXzvF+W7/GH2yOMfbfCh9AQY/E=; b=Lu6KztvXIRgDpLI3/YMHbtHwILift/L67ipA1XBAJB5MlbehCws5FFrq78I07+xr33TggPQap5dfphIuDuHGPwo+ytbz8Zs4OB8GS06Z4np8GTsRnIox9XVdBhirlS66Q9WuwyF0onoFfHmRQc7YprK/8yDsrrt2MxPKG564g6U= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57: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.8445.013; Thu, 13 Feb 2025 13:57:08 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 06/11] xfs: Reflink CoW-based atomic write support Date: Thu, 13 Feb 2025 13:56:14 +0000 Message-Id: <20250213135619.1148432-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL6PEPF00016415.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1004:0:d) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: d5d4aed9-df99-49fa-864c-08dd4c364e96 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: +NSaZ7M83+j1SYeLR7m6bQ5uGY2PrQLkpHiwMb9DQryV0ffDK8pFXsC1YKCRxjBUC5dwqPxiYfwOk197AM/luhWgDS1poByWDsoSSRSWgifeJv9lfG9owJjlhoKW01NC1TLlyJbjXztbV2UQJ5HEewwVIyl06FD9zF8wfJ4qCrAsEx5FgEaHRV35CwiaKcc3jjLRqGDDXw6guxhQGeuvF8misC7xaw6lklayU/L4NJsa+Etw6e4tK46nld2dIE4wqRahaawCLbtqoh1wtYF7RDl1HhBqkB/FQKh0gK53nNywR35ra6XDruqSciNoPK1CQr93oHi0qBhvLrKCHgbNqLf1khkRxW8S8CtkLrKnEj0JcHhbNiwsVPmiO/S8N/90FfQQr+phrDY0fUi9RCp86H2AFyY+CJHWflpxbOio9b8gGCHPk7Ys3DSvE3NKaWE45p2inRg43nqlXa+T/uU3gC9g9CtcLSUR2LhZ8PCG8WL2shlmjd3pIyBfVAbLeFzT2oUuvkupJSncgmKk/LrG9ZLNZIGKa0JaarkEbyHhuetxP8IS/9lPZ2yPsEhxw5EhZ8zhrNw42GmM/ZPmWD9zydAjbNYZdAwZ8e6NAe/le7ajm7cVY3rtMItXR/w99qJTIQL/X5OTchs/su3NDXjt8SMA5taAV4xoawmrLF/ASgLrxPKtOf4WZf7nblCneCkigijroUGMv3vOJE/7ijml1zGRz2V34WMcS9ZrdhgUZiXhmjHkeX8TyPeRYB8r3W0cNh3whYp+NmtwIusJtB/dAiUMqWMyd65Tj6ZuLUuV9F9bAvCYQvL8Mv0zSz3EP11B2MdDU7yhsnFWETyW7c5H12qbh/C4+FKOsIfUropQZUdgr3pGvl6g25L4etaVq+dIxcdixyk2iRJjgbPvOjWDxh7Yc3SZBRcfSmzebRLvpsJfGBLMAJpIhh3Pp9xUgDICgIIJv1Yx5nOliH/OtlAeRbu0YLXBLV9jpWLPIgcg5UzywklFOuhO7jyGFPDOlYQw0ohm8m7/RGnUvsAjrmjoaw8S86QrXzQF9ddml+QsCKl45zaHBaxM7aYHSCgO0+HkxP05FFpTdgluvhKRd+Zx5RvmV2+CdFm2VOfPW8dIfeM5Arzs8+pq7w7MUtOnvYdzLrV137v9pNOcmWGP+f/sQVI/HIXXqoA++CMWd6t2UvAJSGCNYQAN/xqBEKpe73xrKl5Wio+3+HaDj2jvN2iIVZLGf6DvEf8CMNaiA6ariDiVniqx/LkuEbjTlVD0AZAd4ZIXMUH8V33jODI2NfsAjrIXMBDw7yzH+fMxACRMIX7BP0imfqwBdYP5uHKSyRyFReIrageg5x/e9vyWasIYdDVvh8fRLo8wWXYwaYFU5qZzXwKqcDiDuPInJcvFTGh+ 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SDkkfhYUFpg2Bhk7LN8Gwmvb0CanVxIzglNE6MlTz2zufpYJWM8MTGDg44DdkGTlQy9Aw2hz/wA2Y52Dk+8EBPqmFm0yV+kRaZO9i1fxIVnynWii+sltv85a4V+yDUCL85adUqN8fmDhxcV0Cxp7cUnX7KXkut6+owQS1jIEZ4tYnJCEEC91/91t4OWy9DdqbIsE9azjmxqixe5jmKd72R86YRZx4gVeRynDM9meS4Dpy3WtqQP8rOUjJOCseHeFTENnH1TEciE9xHsCXS7WJ517IuGU+mAVGEzJUxw9gr5uaLt1CM+MJE8bVZTVW4nus3DCE6eCq862RWvqPXIDsjmkL5py++09Rm+3wK1UrmkgmLe647UUycauLzkngTn09PfxnwIE5oCBIhVkT08DOd1IAH2RAjVSSPsNgFkpXMmkwcIyE00yY51waj6NXTAFb3oS6XQpKSOZZ95op+IlC9L/PNLdB425xA0U/It9JWW29OLDEtvOINoL4IDA+EhZI/pYSi4jIGwVTVKpgdZiLjxdIXnlgalb4MhEa8lSD4Tkldf3oSYE+g8m3e5UsxfGpFjuRFgcXS0xWwh4q/Afm+aH/GEBnmKuKuKhLWGr5YTvRZcy6clf++Kda+PdqyIxUeO6Wld+7OyTiwIOYTYTNIIdPZhfR+XNvXgJFrEqHq0oo9uXk3Tzz1rC3VBFkcXjCkRcFnRwbam9m449nesW2B9PZhGUUxuUjWrwwTkLOGrVn7exA8fqMx6vmY5Li59xqfCVklNuZ711SvwGJDRAEoeykNqaYmqqH6hUkPia23ls8X8h5HLgX0q+JURDGEaXrwoNnNUNau6dqaiqYdcRwDXvmf1vrVfgByashix3JdT2paEpsHfkLQtG1moSyGBc6DC0GslrC/FG0d0rnf9LwYQTqyoS9f4v7C4Rc5L4cQ+umFJ0aFj9tBkgYImtMESba9rgbrFysoBV1oytGTbPqBbrujq/q/95spN/hE17HML8sgeIb6DVa9JfJjxEZnwwoPTxXcPiCZx3exW76Ie4HLUPCt2bEx5GziYai2xR9WzIOs5DZ+MXYL0v0xYaGkEpEchWwNnLn4EcW/pDK8XGCfgDXydTetDDfPs1rmX1Wwt6d3q45w6IEojFUXWeJb44ZOguComW6fE0Spe/fGqks2phuX08l9gs82KEScOxeNOVEaJro3/zZsoZ3mF3dmjCfx6Qrfnj6kzZe91W+Y9F/2yJv9/szBzA1pW6r+e22V/a+CLLx8AvDCO0hIHdjy3yb/A7/l+e4J4Z+1GBUINp9iX1xhfMDrRgKdybhMI3LhFMdx0IHZUmyLXkXn9IDiYVgRm/s5Ti/LDSHpqtyTkGal5D6LCS9abR/UWeaQYUVkiM/F2lU6mgUXn6GzWs/9b5huoCCx89xBd0Kvq+13SU3SeVoGIwNUV4qCFe46a6yPJaX5mKxEvJyA+5hdw6RHQkMpW6ffootdKWlfWvKl1iqdRNuIC0w9WyVK1m8C1rVzBJQXtpyEPKArwwBM+Wg87RNz30l6zS7lvIsBys6SkN7gLitb69CBmdBLUo7B+egYFlao2ofnqHw7y5sv615kQp5NMXmzxN5ZYx4yYBUNbx/g== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: WNBMTYx6zPvXDzUIpHS2JQIpGkKUt2yfxB2b3YhMUk7lw3GqWmq7JBY44ZcccQu1AjwBCC6U77TXmKXguF77ZaybRBw+eCo69V5bFowdw9qrNhoz6wDvaOkrSGy71QD5x4jL0hcS+QIyN3HYj/6Or2AN/CRio/KfuMkbWQwHOzGcS27J4rm1nXF809IThNjuYIzwI3SaTuCDXtUIjZATE8U44N3p4SNnfGuEmKSLkJE/1/PO8+pXAvSRyp2+jnGKsa4JbiXKE6p0RhHSc1yZM7TIDVthyY16OnA2CdmWrTIIub0DBV4v2ohwPsJoxWuK16y4nUaLjdcfDkpO9zfB6bxtjbfD5QVMSGy8HyqAKxmtcm/pbNaEX6cD2TDsdTohldMYGZbhcBffPxVAcunAs/JLgb+qCeRU1/AyTsv9gnGEbXkWxScuCO+z0SYEKTWM8elnI0XKeXEQsXloLTcDpISSEbLjSk87NteVQ1RgquAKW7mXmqGyDglVrVrfylH8SORtUGbROPpdslJkITH6+HdS+qPWdXiVzaG+TgN2sBfBpyBe24rRf5xXiF7x0TzU6kIoG3LF4lzFYbGEozbuNrj2teKc4RPbr9KKQEvbtR4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5d4aed9-df99-49fa-864c-08dd4c364e96 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:08.8691 (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: N1Et7kMDmKWTsRJruifipvKyvOFEizODi2S4fqMQJu/vQvUeqTjSpkxo4ITHLby5SrLqFL8V7WvY8aDpTrM1vA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: VkdNGPLcwzzzFuK7wgBXYYw2RT_dJDJd X-Proofpoint-ORIG-GUID: VkdNGPLcwzzzFuK7wgBXYYw2RT_dJDJd For CoW-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 is set, we will be passed a CoW fork extent mapping for no error returned. Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 2 +- fs/xfs/xfs_reflink.c | 12 +++++++----- fs/xfs/xfs_reflink.h | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index d61460309a78..ab79f0080288 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -865,7 +865,7 @@ xfs_direct_write_iomap_begin( /* may drop and re-acquire the ilock */ error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, &lockmode, - (flags & IOMAP_DIRECT) || IS_DAX(inode)); + (flags & IOMAP_DIRECT) || IS_DAX(inode), false); if (error) goto out_unlock; if (shared) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 8428f7b26ee6..3dab3ba900a3 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -435,7 +435,8 @@ xfs_reflink_fill_cow_hole( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + bool convert_now, + bool atomic) { struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; @@ -466,7 +467,7 @@ xfs_reflink_fill_cow_hole( *lockmode = XFS_ILOCK_EXCL; error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error || (!*shared && !atomic)) goto out_trans_cancel; if (found) { @@ -566,7 +567,8 @@ xfs_reflink_allocate_cow( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + bool convert_now, + bool atomic) { int error; bool found; @@ -578,7 +580,7 @@ xfs_reflink_allocate_cow( } error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error || (!*shared && !atomic)) return error; /* CoW fork has a real extent */ @@ -592,7 +594,7 @@ xfs_reflink_allocate_cow( */ if (cmap->br_startoff > imap->br_startoff) return xfs_reflink_fill_cow_hole(ip, imap, cmap, shared, - lockmode, convert_now); + lockmode, convert_now, atomic); /* * CoW fork has a delalloc reservation. Replace it with a real extent. diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index cc4e92278279..754d2bb692d3 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -32,7 +32,7 @@ int xfs_bmap_trim_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, int xfs_reflink_allocate_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now); + bool convert_now, bool atomic); extern int xfs_reflink_convert_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); From patchwork Thu Feb 13 13:56: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: 13973308 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 D4C98269809; Thu, 13 Feb 2025 13:57:22 +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=1739455044; cv=fail; b=hz3JRi/N/g6dmH/oqEybcOOU11TjjAPD5a+dWvpfueuWFUhXDzq/ro38sTrfuUmSv88CaMPBbH7RgAWVJY+C1fsEId2n5ER+x+sfRii1VjLcqN0ZWYOZ0Yxhi1b3FBe7UNHnB0abAhgkLWQs2F/qnOWbqzUgbpjlkBhkcrCtpoI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455044; c=relaxed/simple; bh=Xy6yPk6VzfqWA5WmUEgwqoJemkbQRT60E0wCTcwXMTE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=N/McMJOkaakhTBBp7JoFLLT+gvGewkg7yNPwU6TLHf6AnifdjtBBtnnH88H3h284TgSp6WNY3n2FJfzlGD/9r9Ipyj/JnmVNb/hOSCUXAoIBFkpHBku6VyJyPJRmrpfM33miNjAVkakWoG5iMxYSOSe7vVyr7LXnZ0ZmEnI7xMQ= 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=hh/YvuLY; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=pTlNu1G/; 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="hh/YvuLY"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="pTlNu1G/" 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 51D8fkRO026854; Thu, 13 Feb 2025 13:57: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=OcocZYq+Xi6IU2svgf1TfAoJAcmRYgj71DAkmMz5BtY=; b= hh/YvuLYIiI58nItzhSmaspQ7PVE5rPWfoLumube3rl68hB2cJxsi624v40YkyBi XJVAeIG2lL63PR5sPb6Bfc6FAlh9kbxDRTY/LBkxnuNJp4LdbfdcXN0e+FMN0yIX AO+gk+17Ymh8rIsw3jSZlDl7WDI/qodtkmEv4Xy7RgEJ4z6hwO/18d2DtxX5sgbp a/wTCmuqMo1IG/2zwTT0tMOd4QTfLzAD5dR2ILCJ83w7IGcffRixP2OYbK1fpnr9 0/5eGP4T4YMBI0r7PfSmB2qJuZ5wPnn6K8MpE76WJiRbYsuydqoOwaWX2MnXDMr7 AjLRPiSQAQNjHNO0MLTExg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0tg9qhu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:13 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DCwq5n026955; Thu, 13 Feb 2025 13:57:13 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbprcm-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SbAcl4dLNP/fqjOJsLrypKMhngvVlCpZCzQH2ouE8k1O406SA85LSoGSK55FTjBEWzrw2i773JuN+VESu/2UXBfNMRP12X2XOrVmXgQhHUNl3tmmDOqlQ69kElwfMgTK8WOhFtbBMdpkBi97rwNn+tiMMV2dKKvRTYHNSCrUkpn6kMC6U0CejoO018OEMoOUFJpYq440O6jknK5Uo2VbtWndyzrrWM+MXDkG4ImC8ENxnCVk0YW7kcgpWXWVJlNkHSDJDpnRtX5DHf3eyxkzK9zBUiyw81B2jwXHfd07+QuyMbr4Ft77yd4SxQNo35FVvc45JI1hsyN2LrzhbAT5aQ== 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=OcocZYq+Xi6IU2svgf1TfAoJAcmRYgj71DAkmMz5BtY=; b=AnedCN/pFnjb3xhemKlU0zW5J18INFlBt7QzV/De8H7pMIzbSlg4ioXC770KypRxVe4Qu7+yXcMO+jMzNFquJOnnBYtXGst+Nn5yALLmSMdvDbfCZP+MVfP9pgCqNrEDQSrIRfc/eSkGCpN3xBd6sfAgXoeq5bicDqDZv9rJJFpv+7EAYgkffEMnqOH2q68b9ufPnqAKUx7xGIXyhx+OTIW1F4Vnc9cgTiQ9nHKs284PfPNrJVSPYT+IO1k+uwapkIHFHEaWqLk9gVul+22uf1ITrkg0fz9G6SN4/8RQ9YVqVUm9YicuFrtzgEOXBBO3DJYV/CWY622eAKqpwMw/sQ== 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=OcocZYq+Xi6IU2svgf1TfAoJAcmRYgj71DAkmMz5BtY=; b=pTlNu1G/qX5ST2fGutNN2cG6s+AX18DNomUYMlm+6mcJm1zUMYD9wFgP3vcSdAk4TqCnP8Q2tGOgHZ4jPz/RdceYlKMHrA9f/nEn3pQkid14y5TIml1r3rL9htoDgE16kWyEDy7TCkdcUgmQJPCKEIuoGW1aa/4vE6cDCtUdSxE= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:10 +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.8445.013; Thu, 13 Feb 2025 13:57:10 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 07/11] xfs: iomap CoW-based atomic write support Date: Thu, 13 Feb 2025 13:56:15 +0000 Message-Id: <20250213135619.1148432-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0044.namprd04.prod.outlook.com (2603:10b6:408:e8::19) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 538b06f8-5069-40b7-f4e1-08dd4c364f7d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: CdeOm/GTIdBrplb1wB7NCyI7MJ612KNHLGmVOoL2dLwaIoQ5m/VmBjSmzK9BZOT72ccZUbNVprgUU+VCspjDwVoC/KhRa3cbn1/MRDbSpWlNnkox3CMJ9/sYAtifBxyci4Vi/sAFSmMu2I4f8hZ0yDSkp8j8CCjzLtjOOdh3bZMfUEngqqhkjRVjcB3fculQCx6PDBngKIlArQtbYleH0r3QCjKK79ZuQrbz17hfH7iTWIANd2O+xG8/PYaXxNpCjKqLmpLy7LUR2AlSFV65GP2f3ngYc0Du0WCIYV4+k5J1SCL2YbBRCR/PGXwCz0hXWVQy5Remf93Vkl8yykCekCXfbDVneiefgEsxLQd50qDUeTH+FeOu5PQqD/C8OYqAx7CTPvZlJZFDNwielv4zZocECvihniUcDsmlRDhz6UIpfN8lCwwIkll9zesmbelEIK9GHPaP8YWDBhR+hiLgeOiZ62byYUSk+9H/IpuPUUdaJjoHYzOflNnXjBeapJa4uWPEK0mgqI926kRf5J/7fxGSwKBDunlTWbJGg8+KeQsEnu4qd7Mvi6UtNpJNz7xdwiXyYenhhwJChP+AxqhGSnDPSegYg0XityClMEv/891dcKBr2JULLMJOh4UNtK+Eo0B0Fwze3jPXPnpg0wFZEp6aUAETGrN71rtRUpXvjXMKP4plpnVINfqvKrWUmSbk2A5XtxEJd76ojAmtOC8yVr+7WEL1wM/NpIbcBXC8KnGeMdFQ6UQc3X7SPoDrJ2Ph2t+CvmROhIdaHQqtFME5zWVa1BOdyVrT95Y0eqYqKQ3q32Qz5NNNsZkAj6yGR/bbUPQoL4i27adEvIh4uB6rGOOjcSVgyN2YRY8P0du/nnjJqL+LYzFgrj8BnfM+4HVzHaZPlNqBuX+YCG8qSB78h5A8YF6fYDdQh1Oc4pozosOnTc7R964Ju4ZFMXVjGHJkzopJuZYqBkicEv3V7/d0EsNfETZ3bqdZ4PWz4gYTvY2odHTmV/jJJwX/Cs+0mihlNBLcg4e3NCUZHrcdIAO+Af0AuM1gwFNecuTpt7zWqVDyZsfbckDQ0ZsH5fTR9Z9pgmkGQy4EZs16CjUjzc9NM+bTQF8EM7X/WUKgvlV12XcwhmVEuapVq5zcY3moE6ktXOdBqxnfFx78Wu5RL60srPiL5B0ehH6iZJKswGRzqRug1X1MwaxmDta5gLwHrTE2TAvScHCPaDtvHG7L7UuGNo9gByk5aselF6Z2c0Oh34DOxWJ1eBKqzAmSlx1ndnOIu0gsdCmA3iHzYQyIHrpwrHPJQoasFnqxihJCxztK+pi96QO2I7UED7hsMjIcfmiG27scMxvhi4GH2PNzYVuuHPqt8EoFfxCzaOE/OpIKsPYTy9E+F/LvryK679hotkaT 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qSTtG9AGq/LMWvwNodIOxggy9LNFUe4XLc8YtLw3n8+HC1Umm2qHP4K5LK7Px2CdGRFUbDFHKEvVsZxJqE0sqqIjgjlaB8AfW6DPQYOFdaBiUlDZRNBPHbFRxHa80mqociWFouD97K7dd3Fz9LBxhgHNT6SuPCr2wn52M9Ux5jS0zj97/ixABW2uSoBBdBfaMVarq3X1HamXPLHTGZkq2lyGJm3WzCV5kWVSRjAeh31J/IKaBw0bt7+thFA1wy0GxLdwAbbz2WMnZV7VC9pjXXz78lSWGIAxdTRzcOMlJ9j6YFmjqvRywoe25hIHLBVQd0aHRy+2DOxfiRiDXh+OA1g/j+LJmgdjdTRBmd5VKhj0/iMFO55krsKNjJ54sAyXmwFSxgqbarkfWOOJX8vhi+3gmzhZBAMICz2FVK5qrYo5EN1w7Hd4XA3JBJBf3iVkaM7WTwy1GSTVijTyE/v7syNNDHr95Y9yHDWLXXbrnyvxpuD3mKGvyifPSe9KFO7bqyklNWgOLimtwGh/d7B604A7mnE7CLcjxawvlZiggaQ4uiIMb2k0eY++mJvnf0JMo2bqMnKophtwwQ+S2wQQBc93xXkOPOViElfwaQQqopzUV4LhkJgDuvp9uEx0Dmmz/sE7IObvklV4qJDuO6zhwQeXjOUxl9TZx4B1U+2Q51Da/Szfv7c1hKzPJL46ST/GFPO5uNKXcDpfVkNle3ET6GF/lbadr81KOTpOVJtKq/34oOvtvZkmxR0Nai2ymelYTuK9R1cU1cUKqY+BohpXnERTyuKKAMcmaaP5EUYbGmwYgRQgMIkPDmU5B64V/4YyZmdOxDRAD/vP5rJnHficApQzF7ThPmC1FymaTYIUZa52q06uroDBczTsEHieWQ75a8MgU5+A/nTxEBvVlnn+mjn/lrHmRTvA6WYPt3fNO1WviIMxPSWN92uX9NjopgY+kHE7Sd2JIRVoy0mTX33Wk+cPAxgWSOnG/qUsyomjY9JP/AxlcS8ATIGRCuxatCw5+GpknVAwR7rTYzXE/ElM4TtoV6WW9OpixV7psd/FJNUg7Lypypi8zELHTuob9+s0OY+wSUUWJSHd24IpTcTH9aeQBcTF9CLffDKWfUpRnFWJJ5erkFe2gXCGwcOvC+ERScUyXtl95SEGZDfrYrEZecOgmXrYI0Pc27v3OnJEdTbvM4HhEDemAMT76KxftXMbfJkjlcfc6oGrQB4nIIoMgRRSasZtusDTui91Kj8/2INnimgV8Y9J8aaq5EgycXjrvSoS2U21ft7C3YkWHH+wuIAyEkm2IwycPjPpkDABq4ppF6OAQAMs2yQnjcXYm/rq1R55/O8s3n9OwMoChmuODZYUy5NZcX5/p8KXPH6X2GsVSsOv3zaeNkS4+e4ehbVfNYKCOzsG9AR88llNbdgZe8RcCkdYcn8tXrdf33uWEM5+qdHmqZ3tHdQJH4Bz+0FJvnj/tdeHiomXdInzdwox6MBzpRJRp7NOR+MrnIEJHaH4J7AKPjFrWAq9Exh18+8AAt6kWSnb78k/XuAla3g1If/N8cqVr+EmMto/fvhO6wspkEKBhHmqml2wKLTQJAS6rptTZUoTFSQgnNOsRrrqrw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: NsNoyXnFVMXYYIjLUCNgOrrv5ZkBmgPT1VkN9a+ASZ85TnVfF6DL5RYpXbUN7RGtnz1KVvlnI4dhfgtraWApm8qXtrAzInSmq8hr2EgNPzujhxYH3mJRK2DjILcF/WlnYHlNxoQRsKgmzyOlBNE47mYPae9+j8A10d97tdZB8E6BRi5mM+/6VOPqHUizOcMDsFkTbwsCDD/+906paqYaGn39sEQRkbrod9/1tnHwYfFVsjvzF2EoqTQ8yIHiUZA2bDDw/0X0no0Esqc0pv0edbANJpVetTODLynkz2++qh/MeBh0Jf4TpywhPBpFmNfc/QR74Qgs35JGPwtjgA2w7eodJcPgtPLhJAJVn/kFunLe6Q71vce5nl2K1j6tJGFN04y/uC+Ir4fMw8ooXl0ijGdVGmWwdj45t30Wz/Cg+Ztae5zYcLwhV9iNRtWC8Wh/pxMoEFBWrbyWbebecQno0H/MepaEEWdoCM9sU20jZpC/Q5gxW1D5AuovYDiYs6HGP4UCGRLNoIq4N5XHAoiwKcInnQcUBCMjkekB3sCnKobeifLNxEiPMP85zj2XM8BcQJhSqkwp4aFbpFgmd8YOcqYcUfc5Biq0+ZQde9CG504= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 538b06f8-5069-40b7-f4e1-08dd4c364f7d X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:10.3562 (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: JJX47tXa0KuQ5d7VzfV5gn8byVbBfUEpcZeVmrJoy2uE8M6+G0ZVAA7Yt2hd3q54V7WgaRu84/lxNT9HuNo4Zg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: t4dFG-irQCVNXU6XdJEIew8R-7fUON69 X-Proofpoint-ORIG-GUID: t4dFG-irQCVNXU6XdJEIew8R-7fUON69 In cases of an atomic write occurs for misaligned or discontiguous disk blocks, we will use a CoW-based method to issue the atomic write. So, for that case, return -EAGAIN to request that the write be issued in CoW atomic write mode. The dio write path should detect this, similar to how misaligned regalar DIO writes are handled. 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. Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 72 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index ab79f0080288..c5ecfafbba60 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -795,6 +795,23 @@ imap_spans_range( return true; } +static bool +imap_range_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,12 +826,20 @@ xfs_direct_write_iomap_begin( struct xfs_bmbt_irec imap, cmap; xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + bool atomic_cow = flags & IOMAP_ATOMIC_COW; + bool atomic_hw = flags & IOMAP_ATOMIC_HW; int nimaps = 1, error = 0; bool shared = false; u16 iomap_flags = 0; + xfs_fileoff_t orig_offset_fsb; + xfs_fileoff_t orig_end_fsb; + bool needs_alloc; unsigned int lockmode; u64 seq; + orig_offset_fsb = offset_fsb; + orig_end_fsb = end_fsb; + ASSERT(flags & (IOMAP_WRITE | IOMAP_ZERO)); if (xfs_is_shutdown(mp)) @@ -832,7 +857,7 @@ xfs_direct_write_iomap_begin( * COW writes may allocate delalloc space or convert unwritten COW * extents, so we need to make sure to take the lock exclusively here. */ - if (xfs_is_cow_inode(ip)) + if (xfs_is_cow_inode(ip) || atomic_cow) lockmode = XFS_ILOCK_EXCL; else lockmode = XFS_ILOCK_SHARED; @@ -857,6 +882,22 @@ xfs_direct_write_iomap_begin( if (error) goto out_unlock; + if (flags & IOMAP_ATOMIC_COW) { + error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, + &lockmode, + (flags & IOMAP_DIRECT) || IS_DAX(inode), true); + /* + * Don't check @shared. For atomic writes, we should error when + * we don't get a CoW fork. + */ + if (error) + goto out_unlock; + + end_fsb = imap.br_startoff + imap.br_blockcount; + length = XFS_FSB_TO_B(mp, end_fsb) - offset; + goto out_found_cow; + } + if (imap_needs_cow(ip, flags, &imap, nimaps)) { error = -EAGAIN; if (flags & IOMAP_NOWAIT) @@ -868,13 +909,38 @@ xfs_direct_write_iomap_begin( (flags & IOMAP_DIRECT) || IS_DAX(inode), false); if (error) goto out_unlock; - if (shared) + if (shared) { + if (atomic_hw && + !imap_range_valid_for_atomic_write(&cmap, + orig_offset_fsb, orig_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 - orig_offset_fsb > 1) + goto out_unlock; + + if (!imap_range_valid_for_atomic_write(&imap, orig_offset_fsb, + orig_end_fsb)) { + goto out_unlock; + } + } + + if (needs_alloc) goto allocate_blocks; /* From patchwork Thu Feb 13 13:56: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: 13973310 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 AABB226EFE5; Thu, 13 Feb 2025 13:57: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=1739455049; cv=fail; b=u5Q9SEw63R/wlpnnKy90dKfPSzMtfbw9A9rKp/ZMWOnTEbyBai1hBIzOIpRk1OjTnQjJ5SB4BirmILd0ekTZGzyO9sjGbZcBGOuD/tKQAh2siLDhEvtBfvlkD7bjK1IBHa2bPRnLxT7HjrhYGRQw0KPeDVgadHnRZR8itI180IA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455049; c=relaxed/simple; bh=Fa4IDMr7Nec4FlDIhSO4NAT/HCQ1g07b3qKvIA6WNF8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=hjiGyRXsIsoy9QAG5bhvsRIYQQYKT7kz71PSW2nOwGgywPLwam486H4pShG59iao+c1/51M7kUxK7xMGt2fJ/Q/lbrxQUx7/77n+iMT24MhaQNYoBB1cs2wq5cWILlZzhZXsgYsDUYkIZ8zkfJmOxZBUCfBj8n3eipK2rSwsOB8= 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=l4lijmu/; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=LHkiMbJb; 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="l4lijmu/"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="LHkiMbJb" 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 51D8fm8l015190; Thu, 13 Feb 2025 13:57: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=LMKRJTj/3PHWnmcxCVILbZh1p/+4xTMeQ6Vim3Iq9Cw=; b= l4lijmu/flN3/KVEYa8khFJa35eaMSyaPLzzjnfczliZWUHU2sGarqfFIm8gNvNP oYT8p0oFn2gyNA3cywPkn1DINyqZuPgrPBoUvNMK6v7vaPGOCJFbDcvkELxPadLE Z1t26bGQrl8DTXW0Zn0TbAWO1YGXvV7D55fyDqaj1/EJAPccfwNDZj3s8jC7baHd saogPgl1BAFg0diF2p1ICEz7jVpoioRrLT4xJbibC+n7oTCNjRmVdDY3fDYeur3b JooHSUFingDPKyfLJqD7cg3+BCMqwnxdXI2XuZjkyA/2R8M289FF+VN+n33GS1nZ Geg4599FlNPwPlPi51rMUA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0q2hnp3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:15 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DCwq5o026955; Thu, 13 Feb 2025 13:57:15 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2176.outbound.protection.outlook.com [104.47.57.176]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqbprcm-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ubdhxe5v8zljzcHznJnrC4H63u3tEPM3RsC2fJpiKRSqEFndmOXQM46bea/75Fky8VxLV2GLwFZHrw4xNDxdMv1aa68m3AzYusgieTNANsy8RXXQci8L7doU+d8uHpLt3T9XuaELplSj3Y47ZEM8gSoh5PHU1exxGersv1YFiSroS1/hvSCgS04Xq+9ok0IrsyERz5u8cPqe1ouRkq2uD8uTjvWyVdZGOdaL+A5Ae7io5FAwF4Z1ukFM0flbStdwmlMVHscKGvo6DtVWKhU0T77NjrjxA/YV9Jjr9UuCtmrQPhAdL3NMcNVrYN0OzqWUYqM3l+AmR3x8r2+EqoR/Hg== 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=LMKRJTj/3PHWnmcxCVILbZh1p/+4xTMeQ6Vim3Iq9Cw=; b=Y5xuEDV6Oq7mxks+7zaY0vVksA12FVsg9hszvGsuDHssd0Z36O3oxsS/jmwISOflC2TxCZSItN6IGQKt8Ymmt5eMSoSkffZdtAgxR+7sTZRxAdnGw2mPAr2ahYTkQ8jSdfoRRr6NcX19ul6Rqrnupl36yLOKMFBTRi/+iGLlr21hT2qa84Mk1H7OllSTPRcZ7V6n7M2jg6JHA6TQO7R3GpTXjK9ol9jHG/tNe7+zEo007rnDcndMw44u03aiTtn8xR1x/e94L5DqxylVCyyWXkFQkLRInX8nrhsdO836VK+JVcwhWbAlOu4dEnvCekPh3t6r3Ffyso9j2rZtmekQ9w== 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=LMKRJTj/3PHWnmcxCVILbZh1p/+4xTMeQ6Vim3Iq9Cw=; b=LHkiMbJbvy5ygiZc8uEkppr9bWL9anQfNpHkIA+kAkEZBJDa5cW/ao7e7AhXSo3QEz7bE9QjrDMMFpMFUtDDmImeCLXbqNxueSyRlFAJhl2IFp3BJixIjnu9SHVuHOXbvdSVjW50ZyZCIBDKqlrbZ2LbYjEJ+efNP2tz4BHEM9w= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57: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.8445.013; Thu, 13 Feb 2025 13:57:11 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 08/11] xfs: Add xfs_file_dio_write_atomic() Date: Thu, 13 Feb 2025 13:56:16 +0000 Message-Id: <20250213135619.1148432-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0058.namprd04.prod.outlook.com (2603:10b6:408:e8::33) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: ebaed0c6-634f-465b-027b-08dd4c365062 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: VOUhfHDNKnTElcz9k1/5O7hmudZQA0/cDENjws1zXjbtUffl4jNhNOhUKBkKphOgNARYDmA399iMPRYy44S+nrpEfqkQDJKOD16pO0IvHb1jTX2HjVLb3Szsb10aCrDujPjCSjdWvAHyYdlEAghbhjNXLxJZUBNcSHPBH2fAVpgZ4teXVTjwIBuA7vaLzR75idiUteK1jttc3VTtvdp2qazbBqxRo55mtvnQwWAGbpVl0lrqjbpJFWzgXObBhj/LC4lGiceQwRfpsSeBdYkaFb8hHGgh2z4SjoIl9cMWJ6Z8LHGQdhL8h+dP7Y5shEcLAidomtS34ApMcqxPHAzrWZ4fCGWXlD06e23CE+gNW9BJIT1KhUVkjIdHBQ28h1BA5SH/an3WY0RX7nAgjzxOZ6/P/X+6++rMapo64Xc9H+d9CY0uqvQoMDDgz49f+QNQ99Yeelf3aQufdJE6TB6IlE/tqyEl7dyY7zm1+3T3HXAVDhKHuMZGU45BlIz2gm83A/hwmhrgpRoL6q4A+xPpNNpKwOnncN1kK3sy7KfRQHojlZIAx3NCmiWDfwAe/CtDUWU6Za/NZC99VVQ/HnL8WbWaoyCFEkwqx1d6ezL01pFSNzcarLx9kKNXsXEgJp2ME7hGOOUHH/n5jLhLdKm8c5vq62MvCdSh3Ne6FpmzBl8/IJqx4D+KLmEO/SCFLuJJUMuKpH8agTre27GLC9Lc1uSZa7ENxOokcPwX64MlqMTPJwhusJ1Hl4aB4XXZvEGKUmA/Oz+Q2U46Lltz3O5bWMGqSY7kyQlGg4dEB7ehWRxtR+K4j/cTMKLE/4jjjcSgsjceXSryE55/4DCu1Rep34xMEvQW7mYdZ8knQF1Y7aGRiD9Jrg8Qbf3u96EuBlve0ppmKSn3pJOudC/wByBJZ42zsANC3DsYAF8scNtVuq52DBM9J+Lw/S6O4y5hAalWAfUj0/7PLC08hP1eDn8gcTePW4dVoMu23yEQ2acKwrB8BDatx76woI00uu2HI++CGzOPsX0zliPJykMHiDNq1V45ZybCtOmNOyoBOSOeUi7uNuEDOqBn8ajhT43Q45TOrU9Pn73Zkr8m35JTM1iWJzsfplV4Ws8CbeZnOZOJdwdUxeLgQXiVrrDYzV6aCBzN/bB2u2gbQKBR+vUrGqsRWR7Xc02cVdmofK9ULA1AziyxsW3kP/jtnKMTMtigADILGURCPe8Th1+5wuCOB5HOHIij/N2OTVg5Yiw9cumlgNI2EzK6hIwkgvwRYNfukHIC71pVXFdwzA3ghvdY2ZttcHyl33AFSGwSgVYUXYCvT7pyC3AE87AuyP4kLeOZWAYyKDIlki5Yk9L4CvPm3jEJe7sJ82pUF04CP5G2u6r5eXW3lfDcEjKAKBiv4FHWWpBG 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xInkpV5ytYveJMGMzQ/UNASVG9cejA9nWvMyL4LOHw4F6pexaqP69RmiRoW+NFjMl6Q6/w7vjxAcNXrMSMejd1m8TWvwvff1fvsJTMsuSk+9h5ipSnNsm7UDNNpBE0YDjAgG91YqYbuW1E0duVRe2zPzsfyEqScFk9eolS+rrpFy2mBNN8gaLgDWmc5vyFKprG8uDTN0EU4eTq2lDdVqWzmaKw8WWMf7zsN0vaYcuG54nk1DIHdVAoPqT+ZGAnmo7lSVWpaFuttog+/IkIt2RQgnvCxJV3Gm0PicD/+Nw5jIn5Y9VAfa56P3B7N4l7cSZjvCE2hNQW0IlmbTZjZ/B7SybrEYFhoj3TbfsS7nBCzHhMStUQvA24Vzra3ADq3Jvp6HJjZmX7HU8J5ND/rNTc56/9Yuk9+MZ6Kntt7npWK54QsRXZioSry6/sCxaRf26XMAMfPU1vOoB1HwuCvJep7R1ANQbUKtnfnKe9Gcpihg4sIRBuOlxhg987R3ppVCSwBcwV4WKOPpZ9/fJIzj/XJ08poSn+z1unVrunUtSX8XGj0w+Gg8C+xtRVTdLWhviEKOmet0mTjxT4qfNUiQS0avPzeobDczdX/8FnMKhyv4sBPTP+MxBHLxXv4AFMC9PVcQJnGVlPCsupN+jgvfHjj9ETUMPh4X+GyRct1hpUSWW/Hzy0eaEW6iBGbm7SY/nfS2ON/n1MZHFDkZvFtXsXW653l5OuO5hf8/PEwiy5P4GwaFg5eeb+5kjSWCcXIQQSNKPU/lbdc6B1LEE8XGByekfuKLOY3mkqzYQEnD13FWg6wcT7rjMaCjkvDfOFEZjWGNj41vjrHc/N80xb41sa27mgGa5ajfsY7DZ92xSEb16lcA5kCGK9B9GDA3L7XBcYvE6UagsdWh2cDtxeiEoXLP0lza4m0dZW6EbxDX3Yi9tedOjf13tuTdCfwsf19kbmke1yVEz5SHXijHh5RsI1k6hA4SYc3UEtf9121/OL5L+vqWXWJPE1jarIU42aCsXHGj8RsPz5mgMx6qSbmzUWsQiqBaL7KCUHB0GQFmPmQcLdaTjhKsDKZixUrEGD4wXV9lMlMzmyrpEol9oVH5GLPfaPV8h9HwsrTEXHocEb5fmdnOkaSd2Kafl/t8Vp0Or5lJWBnPD3B2FBIVJukeJkN3Tj00Y18dPxdxKFdGuQ/mrELNbcA5Oqdh4ElCHNkyp9UFrHvJjRYavBUVu4wR2BeWrdIoTZSmPMZ08kHou2haFQ/LnM5h/pmbr1f3GCgtlWLpRBsVASg/FPNIAZ4JPPB0E/Oi9eY3L+m4cUtB+Rn1jPc74sRvyzAb4xABpwmKmIEyLM0PSGZ9RhdQw8gk+Nph2E/URWrYbpy+6Gp1c2BSO/7kMB3y3D/J2hmfdIW6qCzgKwKHYdUhdXUlF/qcYSHUB5oZM4eAIG7PJNrHXxbmAlOSdaaB3t3e+SeuyleKw8wbVgWLg/EKlJlzG7InC2+3CfGc1V+UdCTJJI01IU9EpRaN22G4G+MD2avioGtW12yjJU60cLG1WKjvfphOIBib2zORJkbHBE6FhEXbCSyeFw2f9SzuBHVQmrPg6MGz6ANC+8WgOeL28qTlNwy+iw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 5yoMoWiuzlxIGEjYDYaJzEN2h8K+V0TXpJVQIyrRxpI9NQt0DADrGErkFA09/vG/aONJTSOxgzjj6YbS0E7eBMLfUWMPpwUJfBUqbE+rl7lX6Hiwmw+t7mTEnV5aPCoFX/N2Nwg3wtsXqSxmeIWH23NGQxIVl6wM3deKz9jVEG35YzEQYZ31kn4ivUEQA565ng9qZaP43rHiNF7LQkhxhRuIdoYmsQSppnX3oAT4iq+eIS/nPmj4V2IOT0G0nbEZAI4mn6+xE5zLvrubPcE4HJtLeNcPqHawlhbUwEjI+l52Tqa1FnPMptRI/THya7Tr45NMD8lyQ4UEqUkCSLGlxC1s9vaxL55SnhgRXxcUcVa/gwAjOEtkOlhjUsqnc73j0BTSd4iRT+XEsWoLK/7yR9KItzpMFo8iDFyt+s45k6vUYHNiTJx0rzd2US2S7vfNip96UIdt6sNX+Sdt+0C/Ri+EThG/AjToic0RlMRRHbpy5fAMRlH+PG1FvURe0GJLGoMccCk/K6slQMsL1YEXwsxE96OP7FQ3IOpx9Uq2yUTejxxaqjDw/ySaXeHvvskSdJdJy0j41GIOrvMrIhuLlz7NnTqtV4lwZ6WzAEKzvdA= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ebaed0c6-634f-465b-027b-08dd4c365062 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:11.8739 (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: K7s+/TULKJlMNSI2oRwFmeI+KRtlEADRo9AnNea4XMhQCe1ky88f+XMzsebRdi9sQi82F5dOlho3k66yvfcKOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: kzg6AXxd8-TYo8CyGFTrZ7SLrC2tgcoQ X-Proofpoint-ORIG-GUID: kzg6AXxd8-TYo8CyGFTrZ7SLrC2tgcoQ 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. 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 258c82cbce12..9762fa503a41 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_direct_write_iomap_ops, + &xfs_dio_write_ops, dio_flags, NULL, 0); + + if (ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT) && + !(dio_flags & IOMAP_DIO_ATOMIC_COW)) { + xfs_iunlock(ip, iolock); + dio_flags = IOMAP_DIO_ATOMIC_COW | 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 Thu Feb 13 13:56: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: 13973314 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 E2EB12659E8; Thu, 13 Feb 2025 13:59:29 +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=1739455172; cv=fail; b=tgFWZPgp0ZP3YYrT2bD9EmLFm53y/KSrmYcV5AOd4l8fnVZniRDxe8RUuTkgKw2qlLCTyINH9Hv/7xhUJhz9mHezO5ID3UUWIWGAQWV5OoQE/xfSCCMw0d8SitfTpS60Vf3NPB5xRI+E+WsKscPWSOk13J6LzDIkBUJqnweuW7E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455172; c=relaxed/simple; bh=Hg3E5RDUi8XSuwJFbI9aUTC2UvkFSH8RNuzLj+2uB50=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=WqPvFGJVanHmDd8Qd4UwsoFpu9lWNKhEWbTf4uiVvaS6Uv/pYdrbCWpnIBuC/IdtI6qr44K+f0tfHVcUhL/K1Mv9v9e5Ve9mEettSI92iBO4RjlYP9xmNoGctHiXl0TdTpe/pTzi0NCs4njIthBDGwo7W6qLkiregN3UzGMsWLA= 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=Uj/Jpiha; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=TzghFqwK; 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="Uj/Jpiha"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="TzghFqwK" 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 51D8fhEZ022452; Thu, 13 Feb 2025 13:57: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=42aOc8c8O/+sEmVC3yfUGvyJcnVa34F6YaCkxEOsdIY=; b= Uj/JpihabXgLpUQ6PQgJcFeLdd10rjNy448Ippv9sfEHlxDjGNN6eOHcYQgnJiz5 U+anp9bNUTfCeAzZ5ZNiiZqEqnljWToUWIRZZUaEuWNzy3Y2HztK8NYh2LGMXCCM /d2APb8B2TtfJZrNmi+6Ps9WDxJJNtOURL8K0V1Z/YmLMGQhTwFJ4dT+tKq+ZIza zrdy3ql5u16d6sM4Bs1GktBNmcuy4pBD1GS8gPpLYPWgDufhQv/bBa0kGVL/+Obj eR5z4OSiFLM6X7jrbsQWXe3JmA7zFEEsQXEH3vNz76EJz6I9v/sWjItKObBRBq4z OKTcGVyFEOa/6q2xWkORVQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0s41mcq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:18 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DDWqmr009852; Thu, 13 Feb 2025 13:57:16 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqj1u15-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Nz2bcQo/IAzyvCkkaFYfOXyUylEB7NPiNWuRuOcgk4wjmiIuDSVSGGr3U5403dQfPkO+vbm0WEkH9HV7wq82T0uDr+gNpQWSUkneTogdxv0ILsUg9Tr0KGehKljwKdoZcIMz+w1Yn8AplWiYrROzrvAmwIt61Pe9Nuyu8+4NqWD5QWrVHAn0yGyW+y/NyFQ3wCwnlgNWtIfCbEMQ/1iYPj3Zp9yJ2nrLtYiAQ4J/jFNjqmdgf9/bOaBheQb02g+XdVobTeYQdWUtWvYNt7H9Q7LcBGth+Tx4b8UiYv+GQ/YHkeS3hKdZYNyZi6Xi55KauqvOdRypHjnUJiGvRq4FsQ== 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=42aOc8c8O/+sEmVC3yfUGvyJcnVa34F6YaCkxEOsdIY=; b=XrYfSqaNDB0uA3b0Ser7WiE53t3leYxpo/ku/IpyWq8Gb+q7a9RdFLOrjIXbWh4fA5xrRZJutMNyQ6N6Y1OlD28imLsKGbLoXmOZC739PGNsq/KWnp+5eKjiLEQa+43xPUVrjOWxtiQheZ7JkUnKNTNJzJMEEsu9OucxMGWykVhSgrw22cHapwoksSqVVY175GBWSLOmZqehyr7abhjLd/dG5qwxx5jzBiK6uuLgg13Ht569GvMbJalC1mhVGS2BVMSgYX5PvWjuBjwF/un/+VHaI55wExjhRELU5Ww40vCvjWxgU19wVbvU47DSaow1/sGCLFrgxTnGns6LJvPqvg== 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=42aOc8c8O/+sEmVC3yfUGvyJcnVa34F6YaCkxEOsdIY=; b=TzghFqwK5I0BQF+eBwrjActPjCq4wgMNcbPzfaBIDU0IHbQnLWRUGMvUrKPZw7JepgO9e2yhHb3Tn7jGVmIgDpNdz2/tgXhg4vDYwMfgGuLHXhEQwAQi+8T1pE7S6LsaCPxQS+ZENEbxPxMt910IkITYSS5kgbA9YcVmy6icER8= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:14 +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.8445.013; Thu, 13 Feb 2025 13:57:13 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 09/11] xfs: Commit CoW-based atomic writes atomically Date: Thu, 13 Feb 2025 13:56:17 +0000 Message-Id: <20250213135619.1148432-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL6PEPF00016413.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1004:0:b) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 11262d57-3124-4204-f941-08dd4c365134 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: Dz8RYzObx6L4UHdkgL4oBT+6AUTCMg5rnHQmuliufDLABUmlrRjDiQUXd8L75HPhhGTPpBAUYU8gBsH0MkeiEEkEBn0vczgPVgXBoM7sewsOn7lxnt6PVPCtwdI/K6IW8QkuxcYpMQUh1VVVdZk+hDw7d+xt0UnN667UImpitfB8NrtbIKqvKPPpk0lJ/JyHWvGHi718UEGDQH6l58WvqTeM9OEcICD0ESTSEVJkNUY/yWdcYFf6ehCZhDFtYY/gMcaUhlg77NDTUlpBy10drUQ9vm1sQqA5rSVu4/GxiYj4Nffmv1MvsnvIsd65KB9q0YdM/ZzdaicqBm8+pgxpjeCu+VZKMbb2xZa4lB7H/8wCarHFCojLwejTbYp81cKb+lKSEIuJ6TADkcgXK20TxKK3/EwgEQI3jx2WarLulhW5NZ63zHJXV2c2P2xTmot6cWbwcvav70HYAEQEJX6WyXQdBb9b75/4emk++3ZZ3qIrwFnJ8EFzKZnHgXJK8TO9sOqydySJTMA85WSZTrJYetOrQt03gjRUCl0QBQRH+C9YKDFp3qFcKRnYTsdXzs1EzFAOJKsd8IAwUukd56F6t4bySXYU2CkMAiBfwDwosMpdoWpFwTdTTJ3AtEfLj5oTsHPO05uDIcrEo4z3HFgXKrz1876oHUYLtDEEbiNzs0EG2+52QIZAvJET58XNDXagr0/EHaz+thGRNsccs+w5WxK5zTDxIIDAXmZVwSj1xU4dmPFMI3O9TUl53dqjU3kdaL9nx20GtU+3J6AAl7F16/UfNuoI4hsA3t2SSz12O6ZSL8meHEbH7P4nrt1osWEVYPCilqBrm+jv+CFBN+/GNJwiU9v1Fh504/+nv/tftsLS+q0H4xeG3SpBWrQRpJhxscGnCZAIG4MjRkXvAatr7bSDLdtkPPmHJCceqGi/io6ItmCh+0i8BAk1MGJzaC5GdXsILGWR9Dyd/zba0/1ONh4sdNPQ+MBGRhfbKFEpAiYb1PN0k5LAaNkcAEuL2WpBlrJyD64v48KVjWgi19RbgT0uaUSaJRZjQ5F7aRDRBWRARIDkllaLa+smDy+/VD90y0cThrAcY793CJfCNtpbea7oMvj3dYT4MHjaqJUY46D+OmD290ehcSdeJkX4BbFO+jZAISosrIXliUPprDQnEp44AwFuGiNIOOJiZuiHOEpAV0U0I1wta+vWyRpF9oLwwzIfaMghjEx+udLng8fg7F8LzurMC+PQmbrmPBkWKi9JrCNLh7IzcUU+Q303lhWmHlm+YP18AKEJZ1/GqgSDPwmLSfrj6DZh3JqnhrN1YBCQX/YmjGGOl1JAlr2H7U92tz3Ib5N3Duzc4H3Cb0hGb/YqtaXmW5sMgTAlb21rseXI8culWrLFs0QKFvN8QKE1 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PM3pFystvImxcIJ6YXwRK6wp6co4erYQQXjFfUV1TU0OSBxtSMNjlhKbJS/G7T6oFcShbxM+cN25o3f08oUbTKZox2FrNR42WFB/cAlgXmXEAt0l8nwQRkrGSZCHWdCxUmJCd4GFL3de3sNmaK31JzuXMEqP4QofYpbQiUxfDF1dGXZw2G643Jm/33GYtvwjvFVQO44ZvLzuWbf6q+Avh67VyzlUrunkRYphmbsR5zsdYH9TM2bJ7qr+PsxhqGbbvV4gHYgzB8f1uxJG9Hnur8jZKCWsKkjFWLzNKqxlEKOHYSvd8AW6Rw6dQHYaDsjnPjA8FJ6/wL0FjvTUpYpr9Vf61LCAVvEeGeiwAD5AmOWKmq5blVVNM3UCoV8CFTjXpQhYa/JHUKpxH7ISIvUHI3WU1MBdDnAUx6FgsIsRvNnJc0hsV1FkNxHgtaKTmpImDdUXJoweeV3ctuQ8yD1BIGGfieT9Q9P9ihXODSsJcocbF9JRG+faNWcKjraA7ddvGllNN2l1D91qBxJzw6lfpTuc1L60zI8cVmUI3m0L3ofRufnrWx7A/aS9Rq9Uk3pTZHWJDpHr/acfO8ZSI1QVx62kLgPryg7O843AEvbtrTWUrtlxaosFLCZwfW3YiWtsuU0Y5CrHyzEdSdcuJvPO8t/49H6Nr1Kx1LI7f9gOmeQBtHVV/R/c4xLUNMLqaD7vPygHJ8yVMmM6eLO0M1qn5TIUS3n4j9gsGRYBFqTyQ4IMcqNuBs6w03jNND0xnZHB4NVtYjBeSfu65yzkqg54GwX4Zuh6FKB6SINxYK9GKTD4ML7ATAELkyfedyk4HPtSa1x8Ivg97Tg4EI00K7Actqrgrv5SAs85Df56aUDn3nl7kLlEM0nLUKNNJXDK0o/UpLSZCuZ0xqCtv9xJ1mey2vilalar8QZQNbMEmeNmt+8QViwPUVoPPNXb4jCOFk/W+ir6kcADwiTaCHQo2lVC16ATd2zms4/7kWidZ0QC6T3EO3VqEYTr1iD/dI7rkYCejjzIxOaDXbqLcHykWK2eEqe2rkV2sBpZOSN1nAmXZLZzmbAa5XzvHa5D2roFnozy+EwosnQDoCNpIrCMi6YpWp0H7QfFU0yQVMqGrWMjLEBzTJwJs5HnT9AwV6MBcL+U8q/fa7q7w6opnt+uYDodBNrk8lHcVbe/sLVLydLf5t6J3iTVGLB69HxXbVh5Z34r2GjXNKaOtQPhD9ibx1y71+rdQR3Ms9XWe6YYPOTRRf2oIHPEsdyVdWZooyua2DkxzX3dTl3DVWGchW+6I8TA5IcAM7RUUNjRaZgMx3INXA4ABIoIFOy83Sa+jYwsMILGrh+ApJNPDFzi6ti/l8rn0t+dVbjwWKmSXiGY91yPuYDZjnGXbF5u53BFDYZ68LQFqHwcVwLfRDh2MwiC0h1TyZ33dlCx2RaVxwEBEcEEc1tBbwu+rvbFjDnaEzi10ONC8aGgFnXDlYYzpPt3jxaE0rQa5MWmFxdMnWnoYpt7/EqheRMMLO6teOJV3CIXL+Un7ebHL5N7sG0ccozJZJn8sXQd0ssvK17/kMoy7c3V97+aH0hNk64FA8j1aii1XJd+UNMGgMKnCZZkmEXBsj1BBg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: FQECZHk63VjoDeYfzoHX1AF7LyfJ8upCdVlQCU3+2mRDAUoiXnaq0dGMAYhcv7GqQOCsgbdkKHXjTvvxsSOTjM8k5iktJCOGuQ7qp46Y281YYFYKjDRf6cYRebxUE5DneL9pJCFsdApv05CjA6s/5Qoxv6FpxfrJU+niblqgYmbrNHYU/0Korb5pAr26eUxbAyjX4JoOB9+IThc+7GltGH34DFzrR/BC3A8H3mUzZGIUyB5uWPgehqLU7L3/5GUJaZgStLzVjQGP7v7msfVVm2jgboxRsSUyL0bEvHWbb5HODOP/vH3vb5/S2mNRZ7GJ+Tvn9PnjrghNPu1G0SOiCJGAl2tVQ9KfQkhKSE03pTxcppXTo0YpHj2JOoaY49FKnpAAWf1u1LkVh8HDSx27y9WUBWvfNUbwhOz1E7YL47/7pSr4yQwlBJCplGgIJVa7YfEcjIhtpz7TRQLmIV5YyGRsYy9CY8VuzCckY0CARHUsMAzLnuDReX4Yjn5V7qC3loLQ0Sns+mIlFVJu1zdiZuMPuhX+GSopl5Ice5qniCI3cDTUcGXSrBDqmZ6GC+lTMD9Cub9P/ayoiIcADJEwIJeQWfCZEAFwlSQa36RIxaI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11262d57-3124-4204-f941-08dd4c365134 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:13.2654 (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: 2Y3W8Qa6/gqqAZuTw+juH/Fd5bpkttTT61fOwk11agUxbaOcZojk9ekv5/P71a0EXGlw4XIfHO/efMOkyRG5Qw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-GUID: T5vJzB_VEIgubyjC2fOpcafD8FPDkS3W X-Proofpoint-ORIG-GUID: T5vJzB_VEIgubyjC2fOpcafD8FPDkS3W When completing a CoW-based write, each extent range mapping update is covered by a separate transaction. For a CoW-based atomic write, all mappings must be changed at once, so change to use a single transaction. Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 5 ++++- fs/xfs/xfs_reflink.c | 45 ++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 3 +++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 9762fa503a41..243640fe4874 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 3dab3ba900a3..d097d33dc000 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -986,6 +986,51 @@ 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(ip->i_mount, offset); + end_fsb = XFS_B_TO_FSB(ip->i_mount, offset + count); + + 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 0; +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 754d2bb692d3..ca945d98e823 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -43,6 +43,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 Thu Feb 13 13:56: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: 13973313 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 A908C274266; Thu, 13 Feb 2025 13:57:33 +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=1739455055; cv=fail; b=XzGhYRfrxnoYG9bv3rLWLhv4EB+cQ8dDPtc/8W5SVQaclsfRVX/k9/iM/MrswneeMJouJftytB6poqUPwhHAO9ipAfSXVB6cb+LebABaNn7Uqpp0VEsbqsTg+VaS+PKEXHd60DwCf7MuuKaeCLV7wfC/UaCarlV4+v8sThmIEEM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455055; c=relaxed/simple; bh=udfSgw0HPGWFcjKpv3qyE7q3gNDV6aAYOhRv+ukV2gc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Oh7krUI0iEy7PhJZDklWd9pvhT43CrY7/MV8CEcBRfS/3V87c0COQH2ts/Kuuk1Z70g7xogG1di23zDnxboCC6KRM3Pz4cXt5oCObH8Yirl6bHzrQJW7Hn6eB5WB8mWZEMrUQf1N8EEY3HcUTziX/3q8XgpabC2ahjDgaea3STk= 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=FLsdwLeD; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=N3I7eRLO; 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="FLsdwLeD"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="N3I7eRLO" 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 51D8fgK7021984; Thu, 13 Feb 2025 13:57:19 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=KAXcineZukjzC8i4FlaiksfVssNZ1DdMG03wi5ZumPU=; b= FLsdwLeDtXXPzJ2VMukDF+IOQvsOlMeXKNJ0lhOhZQ763nZmIkPif7UwKP3QSAuJ QqbLgU5dEEmhQxuHCiuUz8VBchPXWkdys9H1AELLPxtsq5HCt9DOGoz4I0C1F7VW s4DOEzr3kKTT12o6ckJCsSU+sWNlNK1HSbjKqJV39ddTbVx4JWKjbwMkN0nWYokE IN411wZZONii0gBrr7R98l+UONVIFqEkNK4a/yEEc94ZDWepf8IGPECpYe9aouMd PCUVIpJdJhkayBDyX+DNKExm/KzcV5CQJcbV6ugnvhkXEWEhFGA+b1M3QW+Qd86s X37stUZ2cUT64uebXXQEpQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0t49jhn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:18 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DDWqms009852; Thu, 13 Feb 2025 13:57:17 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqj1u15-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QOlKM1EhPLk9R/AEQZEfhyGSTMMDwe2bhItCEMIQT5SCVaQIQj/Z1W4DLwAC36geTSpiNMa+lgp+NpZl/t2j2L9VYbcqA+FuWJApp1S+gkqtZe5wXruR4zrXdhjwUeAj9r40WS8ZNPKhryG5ggFeL19g7Ae3/unae2br6cuXE/DgxPzGSnZFweudv+RLioc3+mQzXMbCWJ1je9xXRVw1NEWGlb64TZw/K6An84zvFbtW3VUPbbSYSACNxRmeiSI5PkGDaVAGsGesVUEE7BokO7bFIuY+l9DHhUIu0EzDDTixwluLzlpmZJVC3eQgEPwXfYZ6ykFGaqZwm07OPlgkog== 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=KAXcineZukjzC8i4FlaiksfVssNZ1DdMG03wi5ZumPU=; b=Pb1q9jB5UnCvVaJ/KPreG/zGvZOxNd69ZjTdCp2j4LdqOaK0WRF6kbF/w1zFLqHrqjgCkOJeU05MbAQrxlUZZG/xc9wFHo6KBIIaOX4HTG8vOL3w60tKK6095Q3lz6V5v11GtLrnBymvk8WPKooN/XVqraBWmUBR+3K0Wtpvw2Xg3r1lI9KZqOIjlGLnMmxlKhPBKTEfwexyhM5lyZO/8QLDtf3xn0GmXgGIA3SCxChI+DRlJ9GidcJcb5KAZqLQ7UTv+b9AeOISZpEe+hmhAQV97WxLCITFtxfj2LBvnRMQ+7QpZCCc477oFTrNfDPVxPgF21k2jG7JwybQzsndIg== 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=KAXcineZukjzC8i4FlaiksfVssNZ1DdMG03wi5ZumPU=; b=N3I7eRLOkWw/X+/HTPU7l9HLCiWj3s82LyGplonD7vt6S8T3KQCqrXUFqByeL+y/idCZK8O4oUDeVoYJisKrzS1AbAUNPzLcXJdG5V83J6CR5KTDAlvGHXkkNsSAQVV1d0CyQSAoyy+q3mu67RRlXl1/9/zENZawS5nEnP1jYL4= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57:14 +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.8445.013; Thu, 13 Feb 2025 13:57:14 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 10/11] xfs: Update atomic write max size Date: Thu, 13 Feb 2025 13:56:18 +0000 Message-Id: <20250213135619.1148432-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0085.namprd04.prod.outlook.com (2603:10b6:408:ea::30) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 230f719e-8afe-48da-c65d-08dd4c3651e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: EnNRaYcOSS+nq7feT06dhW9OIBd2yeXw3OQmTWH4JjHwa0qgNJD85SimgBjQGP3WYfi1wqYmXDB467/j9eUfYG6TRQPvBAA1FDocUKS1rCWG4mOCEz511gTwLt741k7HR3Ayy4331j5WHlYRoYp7HH/Rtblt3S1diPS0SHVwGNOZWIBwgT4EAIx6fdLOJ1GMQRvWRfpT/nhNuYEZBRRimlZKFav61o8sVPFl/z7rLLh98L8tG4RMKW3bY2/+L1K5B3foxb09aZKNXUcct1oQ8RRR3lpdC3yXP/GsWJbqjmizlS1ar3OJS3M92pdhJSCLrfappW9IJkSpTQtsyYdkWI/SnryOSHFQrs24g1tLEI3UPkI3ZSWPTM881P1Wl5SvxdNUh58E9hGV+QrUm5f3dzPhD1XZgjPFPQX2DQKOj+geEio2RVvvQZ81cluetX68jfLInFHtbEuFuKPy+hDqVZeQUzoTnkWmfsqPccHWR1O1MPTtIBZ4bqmvSDeS9Wtn0ANDrHBloGK3zObGQRLaP3WQpdCQiq/61bdiyRREBekV4h83R0hZr9qEbcdqchxI3Q3qryi2xPf2mNbiu1eWdTQubJ6/S6/GVNZ9ow27PQHOj+FU2iKOxxW7bq6tWdipnS7a5wVZ9G+9NyCPG8Tv+QLhaxtgkGCDilpVO+3l54Heh79Kv7//sAC2rIxKHtI/wuRmgUARbKj2Lge/0FEUaD0U4Kdrjwsa4YFcY1DfTyXu0q1WO9ZdOa7+iBxUQiFtfO4/vU0/3Jlt+4I90nnyQxEog8If4/XlEY1ZZv3nCtWf68swaCOZNKJkYo831xjMPvBGsQ+BDZVgTYqKr1Bq/sX3YLIjciF8S9Mc2M2dAu+rMmfwkCPGQXwet7tkw4rv/xfd0KE8D4n53fHk7F+9WBq+PJZi3TmMnZnd2Y6HWGsnaa66y3UZsTFe+4gxPY4qSfLeqAwEA8bIxoCDu+ZwaKoRGw9MLBNYAOvqQxrCDPck2T/s6vlmrEmhPzHzRVPJHWZhUdstx4H9vMI47ds05fWUQhDAvhoRGyJoFLQIEO5Z/ylpOLdAthlFHSQCNawyMW90FIZDm4rANIvi5sfaQkchr2heRSD2tGuCrb0Gt32vQuREmXInR48dvmTdDwAXpR8dS0+mvB1zKxwwR8f2y0tee0bO5SR0ny2uwYHxjbetupJ+7rJDt2ur5MLbd424HJD46RaeiKFcGOJwIPtktXSZX3iCJsRSQneEk0NP8TlgdAFIgI1iKDWZHJCGP/blfT/+F5KASNLqs3lkZmO8Us/s+KeT4K+pXnhZTku4Yv8b2T79E7JokakWUTvP9UeXB2SI9D1uzLfLeMcQee6UFcI4DRSJU7IoG/76urbMU7lX1Ht52wtydzi1V7m870bt 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q3q8SPs8TLlruh1Lwa3ocfLmLTUxHuIaEWUVHvVsPl30ShRyKtiFXLEdomROgF4PEVBA6J77cEykOrJo9AAkqnLnmXxRUtrt3B7iOeJk/093ADOyG0m8Dyob2sYeN/121J+9lBjndZcYBDygCcsLyGmim7y5aZKQLgMcvK0O033GBr/pI+tPFVhAfV3hj/H/TmY93nM2Y+2l4ftNphbd4CxcEm4yeoU2U94pZd2+9TidTPKpZMmIoEU2K1mzYVtr8URPoSaREY736Wu/UiolK0CQm2Ko2FlzrZlg+euxKX218Zk+HdMoaQz4Kx9BaQ4sRmf3XwMQB7l6JXP81gLW1IwiDBikNoBAOZlVfGmcgVyNcXYdNC3lDx0+yxfYu48TA9q5vQKY29c0l+YsCxoWQMFRN6/kvD1F74uPrrcXgIPbBVRDskj4/hiQ1OOjzTjq41Sv0c1O/vW9FxWI0X+7XGsiYbtnvz/Sd3BKhrge3+5lCmk7k5barKYx4PMj7YrGaLtdvhdhrabuF2Lh5oRKBSKjjBNZJG4puO9NojsqQQE6RNcoh18XU9IrOz1beBf68pRYoqcsx7hxdoGCn34mt+adZAmyAuqFoZjv1Le5SphcvLAEusl0H8CUgqVNVsDBurGmCga5N0ok8LVJiORb2telqOXpLgyUXe9LwG+B7FDgtIV3IHPa77axBoVC3vOjff6zJyTNRHp+5kP2MDFyPdIqdiE1wbfkGsZrCOU/Q2dcYZFklEpJcwJdg9nDyewdPD2SjBxXNg3DmZN9Ku6myXoGinoNpJSVfQz69YHkExl/CUCsu1AZX9Q88VWrkPWqUCYwrpSuLtBLRKNRJyA4BI7udlploldwoxyGTVgaYCWOmbHE/WZJtWvIDA+HKcXkGWOs45RJDyj4bpDdeA+/VAUOQ+hBaOXqZhgTeCTPMkuCjwe7hTBw72w/OQHMA8PsSkaHkEci5t1crbtCgfCmtV/unj4Mm0+v6z9MYEDn7XkAbgwxKS5S69hU/vus9x8qyR3D4mYGhfWCwxFd3zDq+k7y7xbwnLmuNca+AOCKnps8c7uHwRPt6nDhD/GgQPLAXrMS6UQt1GSaTmwmx7F5H7QucJek3q5ssXn3MQkO13gQtBpcnDxKxSD75vaItpzJgw0lqAMV+/0HAj27a6YS9iRC19utgzUhK45AJA6hM4MY3+A/DR4UqJYRoPp860InSAKq4N9IszXhK+73NFr6bAmk5D9HlvXG44jy0785NuYsACJ5QDGNfx/bfKeFhlWMjVFse42qMck5w1g6xVy7Yj3FZxYGXOgxCSiTOR8Me6XCT9Mp70LoNXQVePXDibhQXk8+bI5lXqVFbyTakHyJRHxFKAhD0qa40esMF0ly9+yOnJiVXCsLAYfltxzq2uX4dqH3LfAx27I6Sw54PgjqnZJZzW7EuzkVrZm0UXHNoV/gJ6h9ZW8dkVRvwKQ7erWtF7a3nkPE3GTmwYa4PCuijQX90kpIJ8VFotfGPi9/WnT5GkoYqQuG2+MgoT+FRR1Nflouk9cYBIGPRM6pUOaMTX4MKw2DVlxaRclPAxlyhEtjh1pPstUem91UIXLRd8fhJLDGbJfQSYjOeqXNHziM6A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 8o+berehSSx9knrDA+oLucPdzUembzYTV/hcy2iKIN4JdWyRSQlWlFgPwXm0m5GA7aMjPpolYZIM8krbotV4fCAahixrj9f+/vdvfvNwGAOFy68Qp2Ilae3hTD5AAITLma1IWuVm9D8oUBMNXULy0WLp9dHjFJa0RmdfC/u3DkKJUnejLG1KU0kAv8dwaPwP+z4wkauaP3JFtIPbshc6rvWU9d90LO/NGg7WmQuXsfdZZvF0XEJvrMbuYKJqXKyAi2DNFS6EHQ1QsufihT+UQ4jYIpZ1RIAC9ijXT4oVw+e89KirRIlnjQmXhow/q/rD3cWRmCOzsVKsOpn2+L08VyTSkax5KtdmCp6mqpKCJzQQzdhmAqZeMJV02Z3apfHxJq84Yz9RdkLXq1dkP04v1riFIaVaUPG7pk300Wap2QB7jAAWgALQeBwljNLeg6FjRcmRCKwr1GNBhe99G9FpVoLAdUx71QfA/zNs5Jj/t7W2G9WqM5kBMD/pVrt/j6ezUsyzCe306/gmLKy14QzI0DGfV6p0XkIiksDpxCbBCdT+0eC5G10TsKHZWd+7FlsQtHMaM9x96kDfS9dn7QajaQU533UAWYYPkhM6ArHLhm4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 230f719e-8afe-48da-c65d-08dd4c3651e9 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:14.4265 (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: UsWB7pV+xXr7J56YVCiBoit8RR8QPtatUlXoBfXx9T5sB1SeGP3khqXQMRxuCs2/0bJkMvFgCad/3c+4i9fhpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-ORIG-GUID: EH5wIuRUkuoLImZfL9-1W4xjAfB3xDiO X-Proofpoint-GUID: EH5wIuRUkuoLImZfL9-1W4xjAfB3xDiO 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. Signed-off-by: John Garry --- fs/xfs/xfs_iops.c | 13 ++++++++++++- fs/xfs/xfs_iops.h | 1 - fs/xfs/xfs_mount.c | 28 ++++++++++++++++++++++++++++ fs/xfs/xfs_mount.h | 1 + 4 files changed, 41 insertions(+), 2 deletions(-) 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_iops.h b/fs/xfs/xfs_iops.h index ce7bdeb9a79c..d95a543f3ab0 100644 --- a/fs/xfs/xfs_iops.h +++ b/fs/xfs/xfs_iops.h @@ -22,5 +22,4 @@ 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__ */ diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 477c5262cf91..af3ed135be4d 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -651,6 +651,32 @@ xfs_agbtree_compute_maxlevels( levels = max(levels, mp->m_rmap_maxlevels); mp->m_agbtree_maxlevels = max(levels, mp->m_refc_maxlevels); } +static inline void +xfs_compute_awu_max( + struct xfs_mount *mp) +{ + xfs_agblock_t agsize = mp->m_sb.sb_agblocks; + xfs_agblock_t awu_max; + + if (!xfs_has_reflink(mp)) { + mp->awu_max = 1; + return; + } + + /* + * Find highest power-of-2 evenly divisible into agsize and which + * also fits into an unsigned int field. + */ + awu_max = 1; + while (1) { + if (agsize % (awu_max * 2)) + break; + if (XFS_FSB_TO_B(mp, awu_max * 2) > UINT_MAX) + break; + awu_max *= 2; + } + mp->awu_max = awu_max; +} /* Compute maximum possible height for realtime btree types for this fs. */ static inline void @@ -736,6 +762,8 @@ xfs_mountfs( xfs_agbtree_compute_maxlevels(mp); xfs_rtbtree_compute_maxlevels(mp); + xfs_compute_awu_max(mp); + /* * Check if sb_agblocks is aligned at stripe boundary. If sb_agblocks * is NOT aligned turn off m_dalign since allocator alignment is within diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index fbed172d6770..34286c87ac4a 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -198,6 +198,7 @@ typedef struct xfs_mount { bool m_fail_unmount; bool m_finobt_nores; /* no per-AG finobt resv. */ bool m_update_sb; /* sb needs update in mount */ + xfs_extlen_t awu_max; /* max atomic write */ /* * Bitsets of per-fs metadata that have been checked and/or are sick. From patchwork Thu Feb 13 13:56: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: 13973312 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 2491727129E; Thu, 13 Feb 2025 13:57:30 +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=1739455052; cv=fail; b=ZQ0hTaEeedlLxTnSJYKOoMikmWmAcJ5cPxeMTleLizg7F/y7TS81zjbWfxDI52xm9yyrHv5sFrxpkOQVf7COtSCedvzPZiQhhu3Um1Mii2MMXSQ46qGzbNMBbKkgdVGChoG6RB4+Jca1HZP1fZHCp75aWiQewRgttGize5plnnU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739455052; c=relaxed/simple; bh=b62au7gM/3UaNnpgBcSicz4+ph+erw0KtdH2QBYU0Zc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=gQCgQPhh0f6REGN1DvB7ax2BvG9JDUOtkXrhZCv6S3IRqDfnfryNKfOIJtO5ZPTSZtLJvgC75GLwobj52aJDlEweSpN6sRHdQQ4WlMMkuPG7boGFfQb6mlRmKYsVW/d35OuSIDKoRXGwB3m4Go6aWYNfs1GSAr64PwE1C0UV0W8= 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=TKOfS/jm; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=qax1h8Uy; 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="TKOfS/jm"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="qax1h8Uy" 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 51D8fgkm021994; Thu, 13 Feb 2025 13:57:19 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=cbsfhwIoN6UOoNYU4jj0NZhQTrfD3MciMudVxKNxmUY=; b= TKOfS/jmxlbeUkCtHxwvAPwMqdQCZ2J0TuWQwGDrmQTphc6w2wyD2a+FmYx1bGuI cdEdjR6Hi5XiVTaRzhKHynLewLVbcu5UnUIrLkxCcIdbs0hFPam7UriNzu7PkqaC R8/ojTRa12/MhlGiIUDQgBpv/VpCMsZKJL0EEqTStQZ6Miocgkpq2V3jrMVXMQvX XJfM5MbQXCPR8Pt5nKMvlP0zlFM4HU6W5SPw5TzhFgi4v1IX6dQACtke/vZvjDl8 /r0PT+TRQ8tuf7DZzWkGNreIPcQEaYMp3JF/9GKw/zXZ57pJupYxbxHmJ364a7K5 ZgQbehSJ3/UxBdKyOOsvpA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44p0t49jhp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:19 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 51DDWqmt009852; Thu, 13 Feb 2025 13:57:17 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2174.outbound.protection.outlook.com [104.47.57.174]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44nwqj1u15-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Feb 2025 13:57:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x7MyrRT9rvN6m84AmovLEj8E9ldQtQ5Nk/673+8C5zr/yy+8/qQgvx5z6HT27k4JL5O/QnbhxHUZJQ6SrAfQp/GzOiJvzUd3zISToYVyQBUTznITw1Sqj7lZvIeefxGL5iHw/o1Heuim57yCw47lowYmutFlpNAvYELctnOZ2ONdQhX41VoBrM6+Bn2sQiSFKo7n5J50zARUUqxxyu1OJgnfsm+y92k/dx634DvnxWSmyVkesvaoieb1F9zGHtbuTcz9+plGWKZ1ZypLX+Wwpeneg7SO1RnXlNjTqMu+3HyQEVJjfQh2HDvkj13h8oOAjOj/VhbfV91x8n2y7AzLdA== 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=cbsfhwIoN6UOoNYU4jj0NZhQTrfD3MciMudVxKNxmUY=; b=qyF/+Rwmn9UZ+p2NfnnvS2p68blIpcYq4Gt0RgplMGPbq7RuZxUq6s1frgdVvswA3V7vFD6ebvgdXeTDVKhPEDQjYVJE23nAb5Cp0eAM+wZ6Qgzkpz+rMuLQ9czoSpj2rG7YX8Bf5tRRTm/Mx4FB+AYAKbFqVXnWDsvylTrFhZJexVHMDxVRLewfmBAQALhPp4w81ZhtzYVfDPmsnU8Oh1eq7ks7UyFJfk0+OENPHdvgZZAcy0itWocoIdp9fMVjgecAPxueRTmPbdcxgkmqkGQboP31Roj9nET2MWNgNSQuUKMaKVkmbUdjgqIt+HUeGmtUL/QvBH4GsLV83XXrqg== 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=cbsfhwIoN6UOoNYU4jj0NZhQTrfD3MciMudVxKNxmUY=; b=qax1h8UyiwSPKYQxLjupOSahQCqeOFQE/bAeJApngFS/VwaePHH1mQ5ANM7JOLe3ZQrplEACANBwJ2cLPBtS0lfV5/g8dYO61wdLpJ3K52JlIpMoGjEQczX4rooILjC/bPB3Tff6I2KI4DPU73Sh2+JVvRrLNEZL1TKgU3sUeL4= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by DS0PR10MB7125.namprd10.prod.outlook.com (2603:10b6:8:f0::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Thu, 13 Feb 2025 13:57: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.8445.013; Thu, 13 Feb 2025 13:57:15 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry Subject: [PATCH v2 11/11] xfs: Allow block allocator to take an alignment hint Date: Thu, 13 Feb 2025 13:56:19 +0000 Message-Id: <20250213135619.1148432-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250213135619.1148432-1-john.g.garry@oracle.com> References: <20250213135619.1148432-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL6PEPF0001641A.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1004:0:6) 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_|DS0PR10MB7125:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f3c28fa-16b8-479a-04ba-08dd4c3652c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: IkWQdFbtxcWY8ykNiMXkuIJY2jsjBj8YRglCLp1K6suan9V717aKsGZMtSYkvVBuusgvTlUdlBUugwkFA+cjdcevyiE7EHrfM3jAFeteRIZT6OCeU37f9Mo7tbh7qrqErQ8gehqB194oHvC63dXGN4D/M+60QbFKab6oc6tehgZ0pwY+5/7+8wrsrFQL+73tVDqUeq5qYTZw5R7/ffKH6IZZQHDjuZ5sqZVcitUoNj6I3MZWRlI294xouFw/IFIWi31R3r+gdkjNC4SvRpYeimEWmd7l6QFTHaLNovoq2iJIvrtf+Yx7YIplkf3QcGf1rg0Wf8+wY/53aoPIVh6U1mu6GJjOIX8AT9raQbYK3Kg9HMREXwfQN914sGFPc6J5bgGrrKpzEU0kVCUpMIzcamnZVxvjqVj7973szmkPcJKAfHT1Plj1kbjdEnP0ea4QMF5DtSjR1eHPElOjxnvQ8lwXZ8r+TjV9AcqF+Piyb+0o9i87TOcZJKo8lwUj0MXr9TbT1mZ9gXW8YW3L2znJPajfPvHJTTfEBo330sPwn6tDSw/6o1V8KO0BOttRO1RUj/phBWFeFmc6iUT0WLf+7PQaaaEXl56q+DDPTrU7Wi47M7fzUZ5GXFQeTH7vBSnW/PnZv9pUh07RRYao2NoPpx7u2ATcYLrP5nUVyoToORr1/VPhNDH+M8FiJ98vsm0lyar1HFKaaANxs0v3zEG6e0BCdFZi0tLgLbarmJ8NOivG0ZhVIgL7Huc7ocTmCwn+vfkOfogji+wWO0eEBnhTE25W2YQCa7HTSXzBI03KVdYa2QFOgWBq8XeqHeZcf3APvse/aeSPONCrztwMEOJdTRE+zd36qN4yw6a3aGslDgSC4pd2kBiL/KmhmNRrKlXjD7xO1C7A6yul7yAU9XRJk5Nva047Q5hDV4x/Opv4Wdkh4nfx0ZFjEmCLKGVWciAivztCQwtuf8tNIhLEIJWwsCTo6qiPkI3mROIdKW42cq3ePGyVSTdFOawzSpG3gXO9llCBb9UrPq6GYYCHabMHmQbFpy0/M5dr+fHjRAAj838LN5U4IiSjo9Y526SV6NF3vGVj++gIZYlfTRRJhIYMb2vEdMmjTHHVN/ebo5uaY01vJr9PExre/mH4Ve5Qa/uqB9H5/slajjHU+CEfChXg3xbh2HA6vOXKsNtUVMQOQ3jCxe6xboeVN4vJM4cegpwvcQcKU7QuFPF+JeW+nFYz+sUqZHLxxnY1Vv0BUhM7cPe9Ppjz0XBHSclh+YHQuDcNnmkWxN4A2KlQMb1sS6hL6aEXcvWs1FsvacsUWGAq8DQvqBxZN3/JRR283/DpDREtwRQyPa03iAamtQtTQFagjfjZ+csullpCEipx3T7lCBe+cMZnQxzWKQGgXiC9dpvR 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)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Dyd9yWJMyIEN8/OJ/VY9u0OybM1Ie44XwKjH8/bIphdzsFlJbO8v9D1g9PDZnDuMTIuZS17UnLsy/3l/qAp7hNUrJOBnhD/UOsBd8XVzQ50IKHaSBtd+bubEKYU04+GXwOjdJ7Pr4eYHf4NbrSZP0E2B/2MjtIzSQEyaar0w4eaRrGwq+QiWzmkEWuBh+cMkPLmfWsjazMl9YDT4RRdU/X83eMMg/GL0neHApVno1IieCvEfL/+JF8Aqhdf8M5ZzZ1XRt3mG+Tz89bLUzUhXlfATqIGJJAaHVr2brLdyMQkgKX86pyURILBSUoY2KbbkaKSMab/d+bdQHd7QWCyUIajIg+Tl8+lbBjOYQMxrglFr1HzzKXLmchzKVA40fk9CaEA+iddSluEm0cfh+HYxTItDkp5jjrWD/QuWJJ1grU4EGrj+Zstj3c5a7Z3GHCQ9fVK6FZZRGOxZR4WQKECzI6I+rz0dXiWADdbayXt7BcNiARzQhnsahKHz7NnDa0ispOhnpTeyNkTiF2xfVcgQOYnjhyNcDiNmu7aEZE2JfR2msCfJ53Nh6UCIjpb1/DceTDXwsAt5V7/KAVIiv3YwI1XwCDHziCVLSDkdJBxAUxN/iKguLuXu+CWXZ8IZ8zxq6H2IJxfV+kHRAXqdygKTY3oOfvZj7044bbxOSpxrNZydKAvDZzgSyBcsrk2IFV3bUY+QR8JrgLfUEoYXebNtqfc02PyDFiJglqgY0Mu7n5Z9vcoAgpsh2NODPZOSd/B8ZNaLIKYS8VfKpheIhcCsALg0IUCkiclH1tj+YtpmxFg5tmF9Tu2simA7J+u5ga5kmSx5IpD05cuPgcqXEP98GED88ojv+tF8rJctcAonc/LkeVhKs5gxnTkHLXzSMDrzHTTeaypO8jDpG9/c9wMn9FNFt/Mau63ewfA1aCrfOyGOEhuIuud6KR/VWCUSPcKMn2EqMbikxlZFemwXOc7xc89vnRQBxph6yZyrcn1ljRswMJxX3MhBQ+7PBJSNzauieMOExsSWIGaetmuZqX0FAsjuZCfEX4uuBM7npVUDrhhmae/+1UCuI5xyrkMYMobI/oRtxctJzQe4eXMKXL6tO7oS990zwKXmyTgu2InUBchLd0txzu2x66aBnl/AGcO4QdFhDrlv/U8IhBbABd3faW3EwxcXVV91k00hgFlzwaXFqfptC3ZL5VA4AJF1UpedeFuTTosEMbvSiWN66pdi+XLGNYOATYjFCl1YM4HsSFufRLphPxkCWQ36n73hp2/jXU/luKNz3GqlRrgLqaTElELZtZTNlZyDK7lsU1KIiBHVOPJa1ZrM7RBw3sxhnjbBJrcuCirP4QeJCQshYaDwm6Nx3SMMorvbNAKmc0t1/K9EJ83tndIVqQF7pR2ILvaiUQTzi6JnkIXtTo3qVoYwvaUmZZJNInYt2Kv2jqM90Kt/yxPWmFhFaG1dUlfR3Bier6qCW7/5tOjF9r/8gQa/E6er4eYnQ9OZxMacFu2FhjkzC9MvXNJsrV3xJqEk0bsX0YbMBM0jVzuhBwdHKIX5mDorn4OKv/NamWUIVJc06LKJCo/F29J4zb2bLNSRfW2QN0QraZshKN9cyC1DJrjlMw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: AIJCZ0lVLbSi+yvmuMCn5dgxEHvXUIPYkAkG+ag7E7rk98c9rZf/6zotQQJHAV9n0yuqYlvjEOs6AopWQsP0ChgzoGMi1aOVh2INyvTODFW+s5R6ZKUqtaJMTM+HY2xdTsa1Ni/QxbggR7FjOq8dYjqIhg6UDPfL4DP3rCyMDEXoJtPl8nblxiejXHgEKh5+eXGQdxq9pr9DvDqePYDAxMCROwyAexTYDyRZSfD7L67vpnUN8J8JkIr+whkT5Ds/iouxl1utH+WwyecUDXI0GrledxUrELgLGqr4MhGFSxuzU8DXakGCIS+shwTEDyPCPaKHKnVzb/6YSk24fxSkjm/17sf73OncMieqd0nOUPSk55P3v6x5xpBQAsNAzo9A6JPBNnrhNcKlGZkmlOXhANzL8MEIl8DFpzidkFSsz8KsJwKWUzJlgi/CPCjtAdHnGH2sK//z+cf/B75KGPcUXsKim4wZTnilVN5kpbW76neKvx0rPnzi/HCfqcs7AEu3dtYO2RK/h58tqR8C6ghQqZ5Ytkcn6uA57Pp09jVj29LfQbbK/R3AGzFt1m5EFYvslE5LuHVNniAF4QIomaNR8aqlfVOIbgz9aRAxIt36sIc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f3c28fa-16b8-479a-04ba-08dd4c3652c5 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 13:57:15.8335 (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: Z4MnshxYdKTOOG49jpyJtADNXGOonXhwn0ou2vjeDaBrsbdrW31ffPlb8Qj7DPH1x8NuvSOXqhiFEBHQ9GGa9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR10MB7125 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-13_06,2025-02-13_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 suspectscore=0 malwarescore=0 adultscore=0 bulkscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2502130106 X-Proofpoint-ORIG-GUID: WAKu-5YCBrqDA02RuL9WuRue2RVy9PwU X-Proofpoint-GUID: WAKu-5YCBrqDA02RuL9WuRue2RVy9PwU When issuing an atomic write by the CoW method, give the block allocator a hint to naturally align the data blocks. This means that we have a better chance to issuing the atomic write via HW offload next time. Signed-off-by: John Garry --- fs/xfs/libxfs/xfs_bmap.c | 7 ++++++- fs/xfs/libxfs/xfs_bmap.h | 6 +++++- fs/xfs/xfs_reflink.c | 8 ++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 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..7a31697331dc 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -87,6 +87,9 @@ struct xfs_bmalloca { /* Do not update the rmap btree. Used for reconstructing bmbt from rmapbt. */ #define XFS_BMAPI_NORMAP (1u << 10) +/* Try to naturally align allocations to extsz 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 d097d33dc000..033dff86ecf0 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -445,6 +445,11 @@ xfs_reflink_fill_cow_hole( int nimaps; int error; bool found; + uint32_t bmapi_flags = XFS_BMAPI_COWFORK | + XFS_BMAPI_PREALLOC; + + if (atomic) + bmapi_flags |= XFS_BMAPI_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;