From patchwork Thu Mar 13 17:12:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015521 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 D860D26A0BF; Thu, 13 Mar 2025 17:13:39 +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=1741886024; cv=fail; b=me6QXUtdXysHC2E+zxKHS3TrNR4qH4SIiXqOP5KKbLa5FvfTt6klbIfd1LPQOUCTEZdoQ4nZPaDO0o58bbGXOdqaiUQ0L/WJnDIaBMrUUtWhWiU1ANEE4mBGhevt1w7gpHLSY4A6nSdCz3gklCRXlpRLw15XkkFh7ej8TrKXxSM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886024; c=relaxed/simple; bh=n1AfahaoZTcAu2gCznC/2LtcnNiHpaWV5DPvjO2Tlro=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Lk3f/HD0NH73LIsE4xhB1tMBn/+shzUp4oX2C9TO/dY/YbuIwJ38H3QKlopOGt5131ynEZl5WdiQvRQVb3qm5g3GB8iX9uSMIWuskLGb0GLxmYqikVyn5PaajExmJLK2JAu75gNKgffciPN+Zzzwgrlql0ie229zgAEFr8gE5+U= 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=j0e4+K9E; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=ttQhBHuY; 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="j0e4+K9E"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="ttQhBHuY" 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 52DGtr6O007035; Thu, 13 Mar 2025 17:13:28 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=CqQZl7iIlfTH+uWs9VjezTYQ9vIX/S7YbyM9AJhXhys=; b= j0e4+K9ET6RMkYaMy5G8st3RKVJBZRgdgTfY1FYQOg2D3frpIMiUSCbJmsxUquFQ Um3lclwMCe7HEJl4/uWuYNRZjNnxJSguE5TpeJBOrZAT/eXQQieDeM7ngRjLvniX dexh66DNCYlWNWiMIUyHBD7VSfk6I1vtqqVAzQmObTwMdgdbw1ay/6I00alKdPt3 AfVMCQfG4d9M0tu5PlVuT6h66TZUARpkZkiFC6Kkawc/dA3vUdokD35yDHgnH2Qn hvPk2zcHL0WIOeEc1csIQczv7+olzdczvfsW7bylloSuvD3IzZk0ZGuBG+xTcZje HcLrEwozcCLsk4mGEpbgxA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dmrsb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:28 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGTRUk019319; Thu, 13 Mar 2025 17:13:27 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2044.outbound.protection.outlook.com [104.47.56.44]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn26mh6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A1hMuUM3P6qgaeX4/DVBswvoh8opRV9u7jdEeBA3W7FCOiip77EW7CqbyrfOq94p3n2GwiLUYV6qiATS+FfkqkchkolUaHMhGKD3Eso/x/UywiewT5B5k6EsWAK+WwZohMqkPkM1VxpSnQotgp1yFnDSVkKnmldEAG7ukf/y2KJQCSV1rQ7l9A5yE30hWq9b0Kj5GaS2qdnMUIiSFr9/B31T9R2oHBwOcanS8hLfI2jMGtxSAoZG89uRueoWxDIl5P1yk/vhkmVTUFKUWqVvt9kXTLXc6H0vVpzNHbF2iuwqH8zwR6J8tYCnzXFuR5e6Bx5eKvTWjMVAGrQZpD+e+g== 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=CqQZl7iIlfTH+uWs9VjezTYQ9vIX/S7YbyM9AJhXhys=; b=q64KH5rj5P5J746LKYo70ecjVghVeyEDGiNw5ZHmI6fBgi24svT8BOp33M+1DKUlc+XewFyAgyMZXSBYlQVEe9M+Z64SNvIAYKO+NkZJszJx8ffhcm43YIghc2u68y/g2EDT0GILaP0/Koipwc/uC69CZMPaH78+DJLJsAH42tIILGHdxU9LCyxKbIIQYo2cBbsFP/DbJSbI9ynzXQjkZ1AUVVhVGQhFK/EZFG2h6gvnrEtSS8sh+rbMrkqvzBcW8VYP/lw4QKXrFl6KxsJ+bGGF3/T0AyraDUUKQkMXXJ7YhJxjRGawu5KkabnB1oowkNuNfS9akknxFZhhFOSRRQ== 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=CqQZl7iIlfTH+uWs9VjezTYQ9vIX/S7YbyM9AJhXhys=; b=ttQhBHuY64AJpSjQmiOs8Ucen3p7Za29NJa2W1ljfg2xleaQXqzM8famWZj5+5wD0BegVOBhfmYPsZF5PoBT/dgatwNvGGDolew+jnPc+BdRe0dwiIULNqfrHRPvW9RwQSrFAUI7veHAUMOZaPmjxO4wRzI6qFoYJoNegh6Z58M= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by BLAPR10MB5011.namprd10.prod.outlook.com (2603:10b6:208:333::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.28; Thu, 13 Mar 2025 17:13:25 +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.8511.026; Thu, 13 Mar 2025 17:13:25 +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 v6 01/13] iomap: inline iomap_dio_bio_opflags() Date: Thu, 13 Mar 2025 17:12:58 +0000 Message-Id: <20250313171310.1886394-2-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0464.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1aa::19) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|BLAPR10MB5011:EE_ X-MS-Office365-Filtering-Correlation-Id: b420c126-918d-40ed-a40e-08dd62525d86 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 9YQUkEey6Ir20q8hlddZo2u+fo1ztqY6TI43R7IIppp3BPlrvUfLoLmW8n9DLmE3mImE+ixbjk2xDoXLkY0pHs6kdIB//IdP4rtvpRhbgdgnuWpvEVcA1U90PhMH8/c25Ii0NHaEgGAGEq1MoYrG5YniFwu7DieXNkxa/3moqXQNB5QsWiI/KQw75I3VEcOD6O145+gijB6o+nUSA/dd1ksBlubWEwJoJJXd/IDBjHYVjlWnCw7RgNDrjNsILB6sz5I7ShsBVatnBADZST6Zh9Tb5sSKh+B9AZpx6g2UKUDzTjRYk3AOvvteyroLmtGPDTvP0nRGQVw77V+qgKnlT5WGr8GWRDKg8kRIJWSbVZ+b31HBtGHxAN7p5UFfg4P9jOffNaxeEIi1fR3p20RqBGpYKXcc4uqfyhx6sxrZmZzNAspvrV/Q/xnxTNGCyTEfjXVG3g93+CkRudmzX3Sj2San4SM0kJKd/GZ5Z2VM0vjSKCCXdEoDe0RdV5RWwL1o7zBjj1JhOaXAU6xAMFJ6ev+smIgbK2gc9Zc8W8DWi4gG3kiSe3n3ezqvuWiud77zp0a4i/Snb/GiXHFfZzJJd1CMC9HAEwiRKHz1K5u8kJqLYJ/UqRDwpctpot248SmlOCHeOp9qxTkyeC23gt/WSNqgeSjDbKqWdTG9ibZFoQNsjcvic2+F1mRronxfbwSOkCVA04p4dMyMJpYhFM0JOYnUrzf8a21/WWo2MnQZOBEFoea66vDLr7Zyh/4du4ZtySTb4bszo+SvhEiSI5uyGhg2ETAxzc/Rl8prfWLQbTZBvMJH6Pwy9C+Wp00176EXqDvVTcx/uM+tSMJW/TIjkWrfwhErF2L8DYfNK30EDW1seDdBGR7aDe1SSuatm0ihYRgsbi4rTL+ZiQCafswz6D6e8pyWElNTRP4kaf4Xugo9TuDLsidzGl77lgqBrs2rLwgwaGxV6by8BNpVbDLKW6IWxt5fg6UNCUTkxZ+k92wuwVlnS3kTaJdG5sim279wts1z70M39viWz5PT4+rp+U8Z33ljJCZsukKRddoD1FIzmhA1VTRf9KT3iU0Vr4UkQGkOw1ciH1qRfLhbHBywLdFVEbWGNBxc3rGsp/mvTHaXdVzkyWZl4+tg3sasd64+HHY3OdPrhBQtGW2PpPkADY97v70tzjaY1bXKWhHkDij5FxknNYyalliquotPH3h2+ZGSrsEoH6Pfkgp7ADG65Vs1wJmqlA4Zxtj0lJWlcNlmR1EBK3Gxbv0O9RFUglLA5EyeICjovjy5uu5uhyVkE9EXxm7eSoH8Y2rDmu8qBtK/nBOpZZMHrY1o6XViR3eI9elsQSIX3wFQNjWU9Lb9OVQUncylrvGh/FaGBuFB7WOWBhimeUYI/w1hdQxaYrZ1 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Bp/UMcOkAlOqqHUTrcacpKeVDqtUJwOuidP25A0t2a4Nj9GRlPraXn4XmGC25WHFknp1u4tF9A9MTJwaviKN+smu97Msv7Yfzezc5JMC9y4baxUfoI+ZaRWNxovyxO9RgBF8uo2VfsUiNFB3AlNZLZi+ZfBWTPgjc9RHhFu7CacCI6yBGO4O3L3mK3MeByI83YEdqmN+u86Ne8HWkLUkraQJOf0wt3vDUrVw9iVyjtZfvZam5IPDWXvXycjsjHl6x1ty+ygyi4MJ9j8K1U0oLqx7w+X0sPFYpIwVjKTdasn0Y+wQujuLReOS+QgW+FGvaZZFgHxe2oGl34O/tAecrPSJ/39LUnRnPlrI8/OD0q0uBG/oBlivBrMvKCteKj4cwlF0d8obNzVzPYVrhWAyIp4qn4qhSQIQrUdL7qg6wZcPFFelFoa1oPP01Z52sOp3IKuydKQ0TvzY7+TJYvNG7qJrpE5VwkSJGzEwS4E9HZs4bO65Faxo7jxtXMpXwYtgJ2zye89JzpwGFvFUEGlc+UMw5TtlRRqFUmlfri8AtTZuslPbOhl4WaTWPNwRKcIhyrdiF/lv7TBEWHh57Zffiz6qV43PO+ZGY2pefORTRrrytliFwK3ZVxfRe/c8ofrQPYE5ROr1gWAIvK3GEoATaYoPrUF8nReHqMA9xZFmeJPFcabkXp75GjDFfY7l+uzk7o0QMpCepSrW9IaB4fx9gBtcpYuxagjkwGix3aDkcMDoEmhAVtXY0YTiWZ4RPxeJfZuaPQQOedhsaV5Ulse5Mu/7t0paDIP8tIFHj35wse9+vzDnTvxtxpfhn0zgJxmSjdlc6tE/aVaKz0lKyFRS4otuU/f0oqHWOl4+H2Z+RL8y/cc8BwRWORszS8IuFkzeKIh6ubLiHo+Je0Q6HI5QhKyDw5lxm/NdgbYzn8ikjMP2oY8VOuM+XnxRT6OYceBQwGagUDj7X39MFqEmPkWcdiZcMi8Ps1e54xJCA8V9rEHdCYrTY0/6cQm8vqDRGP3E5bCxxB0AVNuUhUJm+kqqKHcVejVpJf+35HHF/rUzKpvbzcSyiF8eLVV0RmsvU0lywvXAlSU0IT1YM/XPxut6nZw0x/FPZUL1+n6PPCpTbVGYwcj7o3g39V3XyndFuErE7/Amwmrk6ZSmSfKyHAWF1SbmlUQ3UzA5s9oSkRYHXaeiH3X9v1x/FDawtqtnX7N1Sz8hrctqiN5mrCFNHq6qpx/uopu+8YKy+jPVKf2JsyyYynYWlCpR49r/uwbgotH+rHJiXIYBRw2XpsEnoCBYPg4aX33hhEDJO4OUGoqDom4QzgXIgDjxCcVER+xHVxQGfnGKRe6RdqKDZO9wr627ilNKHCycQwp25VDKD6+5JO7OquXFtBGqFKOMXuVfWXsjibheFKY/X5/l3q+zLx6MBwSXqBEYs/gvwtHUulcodHaY1SbxWDp4C/n8vRRDQsHWgelujx2VNhLK9OQO7vbj8t9XvzhV1TQrf4SfIba5+/uRO9m8FzxCh4lLGZhj/0QH+1YTvMhERhNdWilFPUy+Yx2zH5IjIDJs6B7bFYprfkfTR80zcXwejVKzObCtZTTVmmpSyZGg1LJdS73WSWpfQA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: U98LzASKD38V+xjEkdAVOJ5F1p+uZr2GB6tjuXtx7QWzyn9VjDzt/43R3Q3TZNIAOSYutFTdf0P3rgifXuDFmF+STqQfEAi3Nm0VhNAnbIhrh2fjqJsMuRBMdVEgnnbxy2HhHIRtOVqlIdFYtJAEQmIzyfX3dpbUxUu8QGnX3iwxHJZ/63fb5Yy5k3Tm2xDxYIz5IwtGn5oGv2jzsomxEoJMYlPJCm8tEYCROCGmj6p6NoOc8iFXzwbW5ora5XnbKJg+w8I0w5NcOIlgRu4Gfw8glKpTd7nQGx1JNFikcjxB2S7cJ9cTvhsd06HPKPYbKdjHOpnm6sCL6h8BWOOhEVEw1NItMZkbe3vbt2DtGN7+XaRxecXZoNbxM1YUESr42iOVNN2Qiy87s2QXtE1px5eSgVHntFnAUk1vwTolK6dNVChjVJPXbUt04usvac/n9WPaVCvN8f9y0GPaQGGVcLpeKRVGFVxBn6KNwdwz+EL/m2Ujwnne29hdeWJg3NQ8Boyaqf99HKzRFfAMal0ODsgzXAJc0au6uSSM4FU1y6Y4X4XXDO9oHa4sA/YVAHYqrcKYaILG3faKdCty5v/GmIAMBZUX7rsFgqhcmguvHrk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b420c126-918d-40ed-a40e-08dd62525d86 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:25.4394 (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: zFIMAsHamNml31akdlyl1fc+ceXIfuMfoMpXWPGc4qAhoyLiymzzVq5M31s9JNvYLsmRDnUiwO9JE54+zPWs5w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5011 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: iCP-Gr_QIxVH4OalZmtaKdi74BLg85HP X-Proofpoint-ORIG-GUID: iCP-Gr_QIxVH4OalZmtaKdi74BLg85HP It is neater to build blk_opf_t fully in one place, so inline iomap_dio_bio_opflags() in iomap_dio_bio_iter(). Also tidy up the logic in dealing with IOMAP_DIO_CALLER_COMP, in generally separate the logic in dealing with flags associated with reads and writes. Originally-from: Christoph Hellwig Signed-off-by: John Garry Reviewed-by: Ritesh Harjani (IBM) --- Should I change author? fs/iomap/direct-io.c | 112 +++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 63 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 5299f70428ef..8c1bec473586 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -312,27 +312,20 @@ static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, } /* - * Figure out the bio's operation flags from the dio request, the - * mapping, and whether or not we want FUA. Note that we can end up - * clearing the WRITE_THROUGH flag in the dio request. + * Use a FUA write if we need datasync semantics and this is a pure data I/O + * that doesn't require any metadata updates (including after I/O completion + * such as unwritten extent conversion) and the underlying device either + * doesn't have a volatile write cache or supports FUA. + * This allows us to avoid cache flushes on I/O completion. */ -static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, - const struct iomap *iomap, bool use_fua, bool atomic_hw) +static inline bool iomap_dio_can_use_fua(const struct iomap *iomap, + struct iomap_dio *dio) { - blk_opf_t opflags = REQ_SYNC | REQ_IDLE; - - if (!(dio->flags & IOMAP_DIO_WRITE)) - return REQ_OP_READ; - - opflags |= REQ_OP_WRITE; - if (use_fua) - opflags |= REQ_FUA; - else - dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; - if (atomic_hw) - opflags |= REQ_ATOMIC; - - return opflags; + if (iomap->flags & (IOMAP_F_SHARED | IOMAP_F_DIRTY)) + return false; + if (!(dio->flags & IOMAP_DIO_WRITE_THROUGH)) + return false; + return !bdev_write_cache(iomap->bdev) || bdev_fua(iomap->bdev); } static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) @@ -340,52 +333,59 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) const struct iomap *iomap = &iter->iomap; struct inode *inode = iter->inode; unsigned int fs_block_size = i_blocksize(inode), pad; - bool atomic_hw = iter->flags & IOMAP_ATOMIC_HW; const loff_t length = iomap_length(iter); loff_t pos = iter->pos; - blk_opf_t bio_opf; + blk_opf_t bio_opf = REQ_SYNC | REQ_IDLE; struct bio *bio; bool need_zeroout = false; - bool use_fua = false; int nr_pages, ret = 0; u64 copied = 0; size_t orig_count; - if (atomic_hw && length != iter->len) - return -EINVAL; - if ((pos | length) & (bdev_logical_block_size(iomap->bdev) - 1) || !bdev_iter_is_aligned(iomap->bdev, dio->submit.iter)) return -EINVAL; - if (iomap->type == IOMAP_UNWRITTEN) { - dio->flags |= IOMAP_DIO_UNWRITTEN; - need_zeroout = true; - } + if (dio->flags & IOMAP_DIO_WRITE) { + bio_opf |= REQ_OP_WRITE; + + if (iter->flags & IOMAP_ATOMIC_HW) { + if (length != iter->len) + return -EINVAL; + bio_opf |= REQ_ATOMIC; + } + + if (iomap->type == IOMAP_UNWRITTEN) { + dio->flags |= IOMAP_DIO_UNWRITTEN; + need_zeroout = true; + } - if (iomap->flags & IOMAP_F_SHARED) - dio->flags |= IOMAP_DIO_COW; + if (iomap->flags & IOMAP_F_SHARED) + dio->flags |= IOMAP_DIO_COW; + + if (iomap->flags & IOMAP_F_NEW) { + need_zeroout = true; + } else if (iomap->type == IOMAP_MAPPED) { + if (iomap_dio_can_use_fua(iomap, dio)) + bio_opf |= REQ_FUA; + else + dio->flags &= ~IOMAP_DIO_WRITE_THROUGH; + } - if (iomap->flags & IOMAP_F_NEW) { - need_zeroout = true; - } else if (iomap->type == IOMAP_MAPPED) { /* - * Use a FUA write if we need datasync semantics, this is a pure - * data IO that doesn't require any metadata updates (including - * after IO completion such as unwritten extent conversion) and - * the underlying device either supports FUA or doesn't have - * a volatile write cache. This allows us to avoid cache flushes - * on IO completion. If we can't use writethrough and need to - * sync, disable in-task completions as dio completion will - * need to call generic_write_sync() which will do a blocking - * fsync / cache flush call. + * We can only do deferred completion for pure overwrites that + * don't require additional I/O at completion time. + * + * This rules out writes that need zeroing or extent conversion, + * extend the file size, or issue metadata I/O or cache flushes + * during completion processing. */ - if (!(iomap->flags & (IOMAP_F_SHARED|IOMAP_F_DIRTY)) && - (dio->flags & IOMAP_DIO_WRITE_THROUGH) && - (bdev_fua(iomap->bdev) || !bdev_write_cache(iomap->bdev))) - use_fua = true; - else if (dio->flags & IOMAP_DIO_NEED_SYNC) + if (need_zeroout || (pos >= i_size_read(inode)) || + ((dio->flags & IOMAP_DIO_NEED_SYNC) && + !(bio_opf & REQ_FUA))) dio->flags &= ~IOMAP_DIO_CALLER_COMP; + } else { + bio_opf |= REQ_OP_READ; } /* @@ -399,18 +399,6 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) if (!iov_iter_count(dio->submit.iter)) goto out; - /* - * We can only do deferred completion for pure overwrites that - * don't require additional IO at completion. This rules out - * writes that need zeroing or extent conversion, extend - * the file size, or issue journal IO or cache flushes - * during completion processing. - */ - if (need_zeroout || - ((dio->flags & IOMAP_DIO_NEED_SYNC) && !use_fua) || - ((dio->flags & IOMAP_DIO_WRITE) && pos >= i_size_read(inode))) - dio->flags &= ~IOMAP_DIO_CALLER_COMP; - /* * The rules for polled IO completions follow the guidelines as the * ones we set for inline and deferred completions. If none of those @@ -428,8 +416,6 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) goto out; } - bio_opf = iomap_dio_bio_opflags(dio, iomap, use_fua, atomic_hw); - nr_pages = bio_iov_vecs_to_alloc(dio->submit.iter, BIO_MAX_VECS); do { size_t n; @@ -461,7 +447,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) } n = bio->bi_iter.bi_size; - if (WARN_ON_ONCE(atomic_hw && n != length)) { + if (WARN_ON_ONCE((bio_opf & REQ_ATOMIC) && n != length)) { /* * This bio should have covered the complete length, * which it doesn't, so error. We may need to zero out From patchwork Thu Mar 13 17:12:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015522 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 6D75026A0DF; Thu, 13 Mar 2025 17:13:44 +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=1741886026; cv=fail; b=WhpYWZa8lJ8PidXruvrYxH+TK7eTDFEtuLPWpT4tY5XOR05q0nc/MO++mqa4K7+nq53ob8zWb2LGXpKHKSPUh/BOgjovN31RDXl0AP/qTsZjQHxyO4E9O/e/1Kx+P/7srtJOu1AaeVLoyFqtYgEam7YlOXXUX4GFfDYST2RAf78= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886026; c=relaxed/simple; bh=vV6Kl5b3BUXlhiiruF3MW0lRr4GiMmTSPTgbggHIWr8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Upav/P0n+0O11cfQ15DEn5I6XsTlQMhDfbboXoZxn/ck7NIFphJA7QMtjTSVdqMy12rdkz4q6Hut93cqjrQEItKROGPNn2b5FU30Ug+PjH0/AOGhEroYkC+KImlkuf3gwQbxwcqWDSQ1NrdLSyOlvybcSClzYzuJzk3e7hduWpk= 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=La1itkLz; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=zalei3FR; 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="La1itkLz"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="zalei3FR" 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 52DGtnUo031899; Thu, 13 Mar 2025 17:13:32 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=6yjabLRQQFPrG6RS8LR4dvsaZaxTptqpFHA/zqEtTEI=; b= La1itkLz/RJWjuKj/xFxBw2nK1tPoxEvLFXD5QzCDY/sQg0nGLLqFu7eGSITtgwh XhSscP+u+EhLW87du0utiovS63VTb6zydHzzVQ5eQ6ppSQVYt32o1KXehQcO8B0c sC4W9gUY4aLoTUuLUcpQmmJE9uuw52vqTXZyrhQDqjlWN5etBuCKV0XQlkbLmrwv W1dMLM6IflzQdMqlRb5c8xDjAeywvAMgU+U+lGKWVhwq/0wpvAxWM9tJbRsfH4IP NdcU3JXxwEmg5OgHRmkt09w8WGBwOpqvsHDb2Q+IK1gG69pkB0n4gRc3U/ut/zrL S2uXsk4NBH/L83wivgrWaw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4hcsdu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:31 +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 52DGhBS4022290; Thu, 13 Mar 2025 17:13:30 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2044.outbound.protection.outlook.com [104.47.56.44]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atmwwrhy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tcTs2oeJGUfpvgPFPc52LH9+5oPSE1TInQ+FJ/H8nE61kqlh3s6NJhm6hNai9OeMihQd+yao8Xld/kYqCa8ojq6YSWw+xiZhfgNZbAjWJFp8XBsRx1049l3CDao1QtBBz73kPQEtimseI3otC1KFsGCSvA8O8uUL/c1fNS39tY129vPlXSHbLthsdq51K4/3Gusm2WLdSMrNsbcXQrgsaaq0rCaCfiTrcgE+Qjkb+6Q96G9zkxuZ0eHoBCC6IQ9KPJwo6P++MXlJmPvGYVZiJJix/4PdCs++ZelitKHYmooyNixAcF2albIj8tc4Y6VhMWqewD8q+dswkOEHkttBfQ== 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=6yjabLRQQFPrG6RS8LR4dvsaZaxTptqpFHA/zqEtTEI=; b=A/eojDDADH5xx0TMocQwBSFeC5qwSXfFVzFYjDIix4d/xZI9Jm1KNCGUfgJk7Ce4fM1F1jrveXygP/9GqigSbCECYz+RzClKkL9EI+iRlH5tMN4ptJeF/OQvqrSQGN1Bk6PIbw4dUhFMfob7OV4GDtVvjTPAqoQ3Csz5XfmXxUzyWIENnJL+kjvBhPkZvptE8lQqyY949+BN23qNmtW7OrFtvJj4y+RT7l4mvjr93jzX3SeW+F4COU5B2tZ7kTaDC2vh26e24+IZbsAI8saiZeo42YWHNhjV5ir0i6vNoj2fK2KcGNHBfPKMrdP1/kpyoDZbGKmxwoEsxMtCZhU4YQ== 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=6yjabLRQQFPrG6RS8LR4dvsaZaxTptqpFHA/zqEtTEI=; b=zalei3FRZ0aViqATjlSl2DI8KI2V+1NbYQMeSIDXuUhcNbQTSR8DPbKV1w8kvTsXL+0S6PzWrgu4sQlTDVV9l2G+kVv2zP7PE2it0lw9JDnXXOuOqussvKT4nypeE4dCXLf6lHR+n/l5UYgracZmIikQCpeE9jyxPD6iDnD/Xyo= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by BLAPR10MB5011.namprd10.prod.outlook.com (2603:10b6:208:333::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.28; Thu, 13 Mar 2025 17:13:28 +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.8511.026; Thu, 13 Mar 2025 17:13:28 +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 v6 02/13] iomap: comment on atomic write checks in iomap_dio_bio_iter() Date: Thu, 13 Mar 2025 17:12:59 +0000 Message-Id: <20250313171310.1886394-3-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: LO4P123CA0358.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18d::21) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|BLAPR10MB5011:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ddecaec-d936-4b4c-6412-08dd62525f34 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: hpepQq6lKt9gpt5HDqjxBxea4swUTwG3Fj/Vl2PsbTgoC+z3MPe0zSTrpyBsOxYEZopXdcaCvMx0Y3VZzvy/qZkLuMVXywldj/WVip4tODGFPMIMuW6pfeIisxGu07CWyauPoxPJXn+VFychKtX9ybSqoVEpqNyJwG5JvDeGP4tXyWbz5lDBZBFpD49+Iyi3yIO4cVmlIPZiY7aqAP4irVSjP1s6fNRhrMKgKlf2kqqiJWKgM7wIrMOephqfUCduEPFW7itEy5cpuS/30jjrs/HyuDA3GpiLBpemi7G/37IShTTXxUCqGTlhU9vS34UVu4TVDBOAVOW3nek1ULkqs/iWlsNzqD8IHqwecv2x5cTI8mvdwERB8gDccL4hPveUh60CyGbuZKReMmuPAWAEJMzir/1Sk816kAI6iqPb00SaoAhh/yh3EX049Wf2ztQX+u6ELyTe17KtLsa4/rwNQP7UR47+FGFjjuuWsQj910TIaCCQ47QNNYLEQRohFyS8a/ghpnmk+Wp+cnNP8rpntr8/G45BN3RZwPS1NHbhcf6Z7h97PX5R9/HuI50CsO/LFEN1BeOinB71OQYuiVwt88zualvw8dwKHJEO+sCrSmETOtQX25+KpZ4A8fmfiGGF3WEzSh5U3TfltQl9k0zjYxKEk8jLDqvWg6vAid/eN35p7EU2RxTXCjrYkRGtMKv1KWxvNzIMjF565PB6imXTzt/37gXQxQZR1+2yo424rrFhIt7nPo/I617g1CeCBZunN1JVZinegGeGm/XrVBGxtyZpj2TP1IPl1xZEzq/8maxfh4OvGFNoz5G9EJjwkhO27XXoq6KyXyz7XZ5PwPdyNT5C1NDEo13hFK7WM+9dEBzJjtf+8ZGDJ+k5RRYp0db1iqO1nSx2oicvSbqK+jw2IkyHXwiDu9ef5AWmAcS/u9/1sGpFSg3BD+4gOFp2L/M+Aub8a3szGA6NdDgb7jSK6Z1hLhSJ/idNaDPvnX+T8WO6+YiXP7axHJarpd9bict8fTZMk0g8sDmJO0IjihdLFtexGplhEuhesm77V+9HVBi1+677ARgV7rWOUv7v2mSxpYjoSjBYaNzSyxQwttTGNp2DRW+z/ZMagZ76rbxMG9YgUTXvbm2tAkoBYMxR7RmiU7gPz1hZ5kub5NgPpbPihIgiue09g9LXtzn9jKMlJls5Fr9IpUAmDAt5qXDCPKnXDglX4C8kaKUSEcBRAwRg7pzvGieM3SlpdtrrdTnba0OBHhjbhhmEfpeGeayXJ+8wbt+qgyfXY4h6UzlpjR4KN2n9ci8K1Sr9+ONgqdCJWSa9rU5DvzjPO59ENzhxhyxOffc+pReL8PrABQKtaTQG0I0eT8OGoFFTJxcjvb6Pr3JD3HzHYdqedMWAfcM2qmce X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UdLaPMkMdIFZHPr0y9Xq+YVQ731u25wWE7wIFcExWZgjoPN/bRogHvRsa7l8h8JQlR8GjIPrQePvjGh3bw6aHrFbyr9jeuyriWWcHvtbmrgMzqXzhaELpGtM72m21llL6Xr746iVsU48tpIEiN7xXobwggO/GUdf7aox8fRhcBB+qYNERZtx75M8K8aZ1FYMApJiCQKoWEEkrQu+uzuwAjWq/LCxRyL2pCiSO6mlw4hbeJyvMSKVqvWEC45PwzvPIpbUcfrJw0OfxVgHPuaSElKRwLddSpSYfi+otzJD7SuqQQKiD4p/SaTRxUmfAUpBCcurPAFX6HS/qht9+zKNvFjJ1LmnomGkhDTj+sC2DjNa49A4LH/NLkbHndaXYNvaS3sp8biVUjv/3dxbkgdgcpe6bV6jJEKQmMblDEgkbXlCn5J8XRL5hrv25KKikRNDmJkCIA+n3Cms1fmWGjkON3iRd38ZtClHepbwYzzaiIGMnHByxuJIfjA3hLsPHinCYwAuAfZtUJyAvNHFDXkQTyQca6yhiyq/ZjPEt/lxuzTHINqmAGUpLoZm7AN35yi052QrgQqXYKHcvsKLjUNpv6Yb6kffAVMPX+MbP74tzt8CkZILahLanwuLM2pERj87RimE96YGexOEjQfEg3cuxs1KLmV1cM5MMpC5ATpxou9+5XCpTC4VjhbTSjrR5DGSArigzQwAf3AWLljqwtVy63BekNwfnycUGLsrkd8q/JZP6L0xOkvtGfBzGYaYuOG/W4fCpV4wcbHabWcYbqeKTmSvGnL1u1MLsA1lWqK8jvvWZ9F3W1I/U0lffn6ZArlmdyfThPwMm2lNeJGDU/R8f1RFpujBz6Ywaf8M4gsRRdtB+OB7z2NTKDffR1AtN/9D4hs6Wgr7utr58kNLGz7t6mg5kyeFx/W9oCO7RHs0d7tKUfRgiEkXkhccJXZOmIeoPRqzTI8vaPjXyNncwgzwwAYbFzHFv+aNNLxFOzkEb531Zt/KfjZjePh0dfRWPcqaAsosyHTLT9pD4tqTAmijJ+wQ9TpGaQz5ZSuwtrODCk0SgwPAeKvg8LCavVQlkL4DMxV3o30aNdZPLv9tjeKeq+QGrlzHdevmTxhN6CB+uiUtqXj0ujLNrwGZlweIovv45Hf8FTQWjMjOQf77Qydnnrkmw69Ss5Pou0d6LPNr6791yYBzNRwXq6GQ58Fq9Y0oHdIV00ZflbX6tyTEM8BIJOm1cBl8mVMXADFTh8ey/GQA9Tg1gwN8P0/PtjJAoiv6vZy5ULGNnny2Pmj+8E+JsLtUIqhh6b7PTTBXggdcP7dUX5NoTyaMdKY9eAzzkr5jrult/j+wJ57weLrW2Vb5Hd2MqVpoYNMf0hWgHrleG9l0zndr3K6NNnTNWKtQUr0Kz5KBe2ET/JiYxH4lIO6VteR7g+lo3NJcVZ6ePKw2qHmMxplF3hjd2D7uQ0vGr1Y1jcXvuw5kOJgsturxdMRCyQaLt3R8Qb1zWgKcVq9r3XOb1O5utikqcPulh96sNTfk2OAySflxTI0QE8/NcwCcrOUT24rnu2h6J51ZIeCLZb20SoS5nANWBr3q+aW91CkpthY1IF8ecByEmlJFwsawRA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 8zcr25nZP2pe78vPAM6+SoP3fcHJANFqh9qq56ZZ43rH/gtPJkT88uVzSKLZQkf3o6rPpxReJENNLEmV8fG/eCRpQj0SWpjYvsM+UIABDFuPE/JpBmRpCSMRypZJr+nnWJph48K3DOPWf//3j+kwJEB04QFAMZGU8nUtuHaw27X+JSAtvWgTbcLUuNWGsw0F9p3ZaraZ0zeVG71MODGnV3stSX4nW4+UZem3Vr70Bw8VRKNVhne7fQLaBRkvyRBPKa2odioMaoGtQsUuO+IROALjUFIi+oCKl1cErXs7paG0seWl3riyrjlyBpMgI2MQdH8tWRU5BXpYr3E9q1NZFGqqFYKYUeYnLbfjCYDHizHI4bNonnbD5g4MiTsON2bOBYfSqDL5EhEx8/ITMzet6xSrwjNCCPqUkw4SAjhP5/o1ZDfRGXibOssXPmW2i8ON9QJOuI87kBeMHlOH18guROKOodS9Jgps9gp5pEAGt9a/384er3/G3DgFbuPCCBcKNXJCRB+24S+mneHhhgReLd76zxoU80FDYW3mIPOUvJz6Shyk/nII7+l8Dd2F1h1Kjh1/y6ZcXBntrBt0nVtfU3yjnYk/kH4wmU1UqrV7stA= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ddecaec-d936-4b4c-6412-08dd62525f34 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:28.2642 (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: u8cbfzQYse4SyHrBvL/76xJsF8X897ejwXuT+00kHbjwhJTTXv9iq/D1JXzmFuk/6TNgnpwuajkX3HakA3m9Aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5011 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: L1jtJZvSG884QIiXZ-zD2wdtBAQfzCJ8 X-Proofpoint-ORIG-GUID: L1jtJZvSG884QIiXZ-zD2wdtBAQfzCJ8 Help explain the code. Also clarify the comment for bio size check. Signed-off-by: John Garry --- fs/iomap/direct-io.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 8c1bec473586..9d72b99cb447 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -350,6 +350,11 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) bio_opf |= REQ_OP_WRITE; if (iter->flags & IOMAP_ATOMIC_HW) { + /* + * Ensure that the mapping covers the full write length, + * otherwise we will submit multiple BIOs, which is + * disallowed. + */ if (length != iter->len) return -EINVAL; bio_opf |= REQ_ATOMIC; @@ -449,7 +454,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) n = bio->bi_iter.bi_size; if (WARN_ON_ONCE((bio_opf & REQ_ATOMIC) && n != length)) { /* - * This bio should have covered the complete length, + * An atomic write bio must cover the complete length, * which it doesn't, so error. We may need to zero out * the tail (complete FS block), similar to when * bio_iov_iter_get_pages() returns an error, above. From patchwork Thu Mar 13 17:13:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015528 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 A039726BDBB; Thu, 13 Mar 2025 17:13:55 +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=1741886037; cv=fail; b=RpC1N9SeBpNwIxM8kw6wIsMAGGqtjP7AYUbdS2SZ1DI6A+5nPNW3KmCDZyvH31NvGTcwA9hBAwot5cROLjHGbsLkK6mDET/B9gcTQNfBDTw1cwnJx+FMpZg1OEKoKQ1dDORv185X9wLD1M+yrXeRbTvj7SfZ1npo1pemBdrjiXs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886037; c=relaxed/simple; bh=amwXJLE1vGPzSSDw8sOJpWQ9heOydSwj/IPv7/GMp8k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rmbwFOufzMdYxCx0hRaiSS1pfT62ZtqWGfqo9MuE4NQm5F04DOD7KUTi1/aXkfu3a33u2h7r4LopOdHY8GEwEm0LB0Z6aWe2NiIzxH8fNCMNmRXUf0rQj6nFRCSN9upVdpDJvu5AjrSLJEcqh7QqqZSqrtLbtwJE5+m0mem9560= 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=n51o5sz5; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=eECLHDvL; 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="n51o5sz5"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="eECLHDvL" 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 52DGtsKO020731; Thu, 13 Mar 2025 17:13:32 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=BIB5CSopTiqGInIb046kLe7A7DB/mOltCKjOsRDD9gU=; b= n51o5sz5Tjkggm2kBkUJAB6846vqGx4CCxv+6v40vOgTmt7bFErMBj/3ld5F1hLC 7dU/sxRFX3/hdwryPzJB445WeOmIdj27ONGtWWo085V8Y2gdh2TsB6D10TPLqSvk jRcDPq0R9ZGh+gQ1ZfDYVJNITqeNTsFUXhmLULqSPooxEFfkVbROkdjyM2xOUyor nVDmOhep4frCg5oUaNqiD8WRKMPo+Hp1vYvGZoRKPoAURRRFP+b/fmuDjIAI1jEL ZPeWEPa0jgEWRPxQtXvXw5LozfygKd0HFZHCiXsIetcvHUau/yin+7BTXvwCP94g EvWm1qYT2tMjX5XSJUDb/Q== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dvpwq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:32 +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 52DGhBS5022290; Thu, 13 Mar 2025 17:13:31 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2044.outbound.protection.outlook.com [104.47.56.44]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atmwwrhy-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KSM3pEa9ln+v+AezMkKLjEJiV8WwjZzbcmkqMKpFzjo64l4Sr2tp//xGGDD6xVhs3TNE9O0fTBwt5mFFSiYyBfCjgb8KkGe9orx2sPYa/7JNjra73esq9hH0ma/9XvI/tGmsHFtEUNqmlq9gTI3TNI5AO6nEsCiKdti8MIh/PM7veqCj8/imCPq9QbuzDvVrtL0wknqHd22i/7Y88wNqUAVk5ccIvgrhyhlrujl9AdkNO1tUxXDXE8ll1F9wVQ00iWmzDXWTcekKmLdXfgHyiiSF1U/4QyRefJu3zYaPcVK/c/e4jP67oqvKwfB8jUjXs1RcPtSpuTksCGRivHtfNA== 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=BIB5CSopTiqGInIb046kLe7A7DB/mOltCKjOsRDD9gU=; b=FtZ+3ujKDMgd96VLT/ANO2CDbYEINzNU9JxbwkEc811QxK/RL6IV2kIL3w5N54ASMU32jEZ/k+ULzj+g/TUy+W32DNBEaMLQDRAs3xqT7A9ehRBlW3+s2vhZXz28oZXKrsuDtf8eNCKeOjvZCmT09dQwj/rWfq7DsqpPWQLIfEaOYv37ZngWXyBCWQuF5ZYeL7PQu4Da9lXNyS7I+ncLF25hGSgmX6nNRRU9cKwJIWBuqfN1t1RqYAh/oxeE7BdfZk88NijuEihhzjvSrWZCONSgVUlwpLdo0sgXasEle6A9fbbfdj/yZ5Pyf7TQkIIBZ2PV1zuEVjKoJGRyRl4vNw== 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=BIB5CSopTiqGInIb046kLe7A7DB/mOltCKjOsRDD9gU=; b=eECLHDvLOzsnEan/0b5YytgZeH1EzZvr20hiQ6ZXI5AAyKNulIvTFnVufsJXeg05SLfHY82DHOd5iEuXJ8gPM8n+e1WQ6ypROMrBBsgeePS3MhsV0cDoLTJy6N5Npqe6CRcanuC7M/RzKBMX58q4gx8+57qEHaXhgfdevgjDNnE= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by BLAPR10MB5011.namprd10.prod.outlook.com (2603:10b6:208:333::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.28; Thu, 13 Mar 2025 17:13:29 +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.8511.026; Thu, 13 Mar 2025 17:13:29 +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 v6 03/13] iomap: rework IOMAP atomic flags Date: Thu, 13 Mar 2025 17:13:00 +0000 Message-Id: <20250313171310.1886394-4-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BL1PR13CA0421.namprd13.prod.outlook.com (2603:10b6:208:2c3::6) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|BLAPR10MB5011:EE_ X-MS-Office365-Filtering-Correlation-Id: a6d2dc58-ad6d-46b9-cbb1-08dd62526019 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: sDscj3nXAVakQjvVxc7YSS7/gNPn10CkzIkS/xGvwEtmt6opJAij0UEZFtU4l0r9cb0DT0uaFj5iGDhYu5SMjfN4pmGeKbh+DyjOPLO4waQZjYYcxW2VJuUvsod0L2JiPzwicpl1R1kIesd0qRAPrUaeYCpa8wafYvwIZ5vBktdGAWZC31SmgdhGZvv/rfjreMsIv8dTYVcCWf2XQwS9TwFUeWO1bzNBnmPT5uf1YoWcEJxlFnyPETtAkeo0BPTdvXqdyoNVeNoumIM2/jwlDlBEW2pOJLzD2F76CHwtosiyORkCfyxBAv35JCjRzG6J+tVSfNU+BApAaJIPbARiIf1NoGO79+GSl16/x4qWrSoLFADNbKMKnW3/vB+CmSqix7DErA9bVrknbcM0SjCzJbtJfTNORTANBx2XfQpqyl52xIGmvMw1ZdMLyjCo66W/oi37FzRbgzD66rL7vrYBMGu2/OhU5wraVA1ZSGWwQ+BQt/c42fW+ShZFRUNsSFNlV8r6gvdFi+ajUZQ5LZIL1t+T5vvLsE+0qw4MtfLYhvH+LvhcPq/XphBPcanejFurZeef5KWAcREJlBmYZu827GSuEwYU1spNluqeKHAHkD6RZnRsO9IqDK6+VlhE4hvwIAiYhJgCNp8TaIvPJep/ZAp7TGK0f9XnfKVRTOBwBqvGgQt+2e5x9oDpNptR9QcYXh4HG/asqtFFBiXg7ai0EDnI9cBnc2/3spOsLl9wGedz1nW90CiWuDgtDidNmAhprFAHJNu7lwFARm0Ln9p+sQKnMq/LSFrc1oB9l42wnQzdWHL4M9o/fNYIVbx4K4tFKUTQDx1yxIlAxi5FbrL4fARUZpvhWeXCiad5ggI28r+fVQwQKEdzeaFJeuuj5PxhYDSw3ckZUSToT4f4qBgVMklBtVGzOh6YwtRpFM2TCm9oSuNBhM0Y70ztVAwo3su6mZwu6AMAEUnBR/Jh4GXF9PfS3idPEatIyNSpO/F8ljk1Zw2IU4/DaxGhUnYdbEvhxLM1HPFm2CV6z1EPuk1i/dO+gGd/WoxU0Jk03Xcs9nlZtVSiDp5ngxJdmvXH7lRiW5HmoMgqdVe4OBaNfVmgIq30uZ3W+KkPLdRuHBYwWlh0uCNq7ODxH5i3SqjPfKjNMSWo5e9TmZl4izhAJHDzW9T2xfMdNzfnCVeLP4908QMLXDBUNzV6bUuJc11n0ibwH9nFAc7wl1HDQvfzblR2ftXONUPtdaXPYA1XuEmvBz84JH+8MYpEAUNp49V2HBoWpmwlnG1VSHeLpY9zLc/x/1BjnEqS3119dCuiXLNKoA5OlgUa/+wi+L1nwTKAlpx/NkhSGU7kDfcpUvzDHdjXLV/sYAAn8VtdScum6wsnjs9yl8/WNExM1sy8ks868oRR X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: V40YtanU7uNbcjYOK3jvH6bS7E+rdahp9g90iAGjBh/fpo9paHYuvXxLa1u6TeteuiEp3pqEngMKtalF6P9QTfK8z9U5G47qLbGyHCD/+LhkAmV+kpMWs+2AQn/h296UbtCQsAsg+pVOY31C1t5pQEq/pS2IRziK2Tfwo4nP0PCZ5wuDSnPjiNR7aUsCyo7OLHrLRXh6TcZurK6nkdAb65hGK/9Ftj5K3CKoYj+NhSq1x3o6XPhylcxq8fNItK6PvGAeM4+sMAXMW6LA0HhNEErCDAlFnkg4bfcDR2ts3+HWI9NRWYaHbO+1xFlL0lEJLnTgwShhbCsY6zIJU1pwcKB3qJVZY/5pOxfyE2LBrCfJ2zpPAMB3jjMqGpfhR6MUfLgKGzBWrjeoEUujJC7rTxyKGNMhA2Re4hlOydhv5BdInVBEPsVNyJ+jf5PJjCId8VqsTza8VlPxDpMnWXEnepaHYAxszU7uTQuq1Wn1kTbGFgvmvy0Gu+8Nu2YirNZgldJlrYBdrfU8OGNlzsH/urHtEWFqbQrtkPCJ5h8zLxbpWUQvFXC1dQvDABlMmVexVwZ286x+dhyWnqk2rFEKvVkJVi4UjVJdhNnDTCO+s7g2JPY4QdpLUVFVGmRwOiWXZk41GsQogFw6ZiKs7tO8HIJI59buI5o/djhDisoXBunGx6tUgp7hbOZ2R4U3WqX1f/BBqr5SudavvXrps8QLX8/21IJfWhOndHMjTfslnwMFptska88SBS9eSNYVjm6CMg7XrJlVs4a8JdcMNv0lgQK5v/q6zzlelVtubb+J8DGdKgDf3N1m2ctzjdQ3KYEVJhc0jWZtb1g6aDboFxLYv0OavjgPJvimQ6/Q/tvv72BxCcNPAE1WrD8K/NNx2Pu+ByHMbJPCxnWjgnu7TZ52UzWOZqUupGnBkU6Zdx4xFug+nkzyUnk4BGuZiKQbjOhj58imxzkA1SSR44Fp9/HBITCZ9YPiIA9OVBFFuU8V10SYY3PPTDnzeMXUU/iN3UWSQtE5u9DCKaQeR7hG/0de0EnoMdiJjScFjiVOgYLFkyAWEY1kJhyxlCDr1csveUpjP/2SOeOwi9TGCxJ7kq8i2+BI/SqToVqXa7v+gbfzlo5SVENeISrrfuYX6GD2CPiTsoGif56Kv67GyjHChG7/2SXm2tAJSbpaI+sZL47u4YcWqKYLEmQLr48tw7s9+NtCwA4ppumSlMwtHXwJ7AEVYnToj7NuVLxT+7jLQD+JRtvsr5K8FU7bZZWjMNOqeUYBWf19p/tMzKA59rZbuCvibEgIOcAMEtb2ltfN99ydJIY1j5H58Ye621GHl5xeDx4kPj0eGQ1gBRKR5CP4RTvOpybOCdy2QTebYRNkyKe84AAtnWT5c0vfSdWiF8w96mQE3ME9hQC0jUls7rE1JbXYEn5ay7yYJFXhyP7hKlEYW68hQLlVEBHZCi//RNaWsV0gTO1Z7+P/Hu1v193mRxh71R7oG2IpA++zXaUulW15GE8zUcm4Ze6ot1u0BJBA9B4oTgVewCpiMRUyncsYB12NkxN+Qe5+CN+F9kPuAxBpr7gz5JSKc4VObijxhSGILN8JYxETks2hW7Timn1eLbL9Og== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: pI+8nvidveBfH/l959VyjB3PDx7wxt36Q1+gKghSPhU/9mKSZIF+1Xwb9LrT2VEhswCNT5BICwWAqVnBo/mtHhb5L9NCkQd6AjP8KS7TcA2iFrgCVM0muzjckou1Nw7l0MDbwNS7YkTpTW44LCweoxcQg2Wye5TckkbzRGQqQFhlXztbKe8mWBpdNZfNcDuut3ZqUNfjuIEGseGmepFpTt+A1tU4fE6f7Y0bnxOtleVQyzXSk0go1XGDPV48WGnJO53wkYS62G6j8C74doUARQjhFW4NXcMkY28HZ1ebagAoipY8MdHa2kXDF8AneRwQReIhrcLvmiFm+PARJKWLMn3ppYmcnje25w4dCTt9/0SOhQTxXEbHrO43hxtHvvs+vQ2tCJYsfhhSG8bR5GMtELyiIepGIJWpR1przhya/Vcfpu69r3tjEH84/QFao5RSUGYVfHGRd7Zk4mj39+GymKEJhDniygMhvJvWtu8ZkaIGFvZqBJI8X/QjNxxqJLmjgdn517g8+p5Pta50Qqi8lle1FMGBRzl7XrvGNRd66rS3SnwcubWa79xpPhNka5vz+Yirw3ndZ+cDdBJqXj+v/xODhK79irUEUC2LX7s/6Bw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6d2dc58-ad6d-46b9-cbb1-08dd62526019 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:29.6776 (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: WIFfuelLh6LXenJfxcQXU1CdNrIV8mTWOCYvfE6RGFAJHv/8RIWhoYEXjR2Qypn7jPoyokaFFRzK7Petnoxlvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5011 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: XakM119iMDJrPg8xoOPd00FREIsDVXSG X-Proofpoint-ORIG-GUID: XakM119iMDJrPg8xoOPd00FREIsDVXSG Flag IOMAP_ATOMIC_SW is not really required. The idea of having this flag is that the FS ->iomap_begin callback could check if this flag is set to decide whether to do a SW (FS-based) atomic write. But the FS can set which ->iomap_begin callback it wants when deciding to do a FS-based atomic write. Furthermore, it was thought that IOMAP_ATOMIC_HW is not a proper name, as the block driver can use SW-methods to emulate an atomic write. So change back to IOMAP_ATOMIC. The ->iomap_begin callback needs though to indicate to iomap core that REQ_ATOMIC needs to be set, so add IOMAP_F_ATOMIC_BIO for that. These changes were suggested by Christoph Hellwig and Dave Chinner. Signed-off-by: John Garry --- fs/ext4/inode.c | 5 ++++- fs/iomap/direct-io.c | 8 +++----- fs/iomap/trace.h | 2 +- fs/xfs/xfs_iomap.c | 3 +++ include/linux/iomap.h | 12 +++++------- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index ba2f1e3db7c7..949d74d34926 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3290,6 +3290,9 @@ static void ext4_set_iomap(struct inode *inode, struct iomap *iomap, if (map->m_flags & EXT4_MAP_NEW) iomap->flags |= IOMAP_F_NEW; + if (flags & IOMAP_ATOMIC) + iomap->flags |= IOMAP_F_ATOMIC_BIO; + if (flags & IOMAP_DAX) iomap->dax_dev = EXT4_SB(inode->i_sb)->s_daxdev; else @@ -3467,7 +3470,7 @@ static inline bool ext4_want_directio_fallback(unsigned flags, ssize_t written) return false; /* atomic writes are all-or-nothing */ - if (flags & IOMAP_ATOMIC_HW) + if (flags & IOMAP_ATOMIC) return false; /* can only try again if we wrote nothing */ diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 9d72b99cb447..c28685fd3362 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -349,7 +349,7 @@ static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) if (dio->flags & IOMAP_DIO_WRITE) { bio_opf |= REQ_OP_WRITE; - if (iter->flags & IOMAP_ATOMIC_HW) { + if (iomap->flags & IOMAP_F_ATOMIC_BIO) { /* * Ensure that the mapping covers the full write length, * otherwise we will submit multiple BIOs, which is @@ -677,10 +677,8 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, iomi.flags |= IOMAP_OVERWRITE_ONLY; } - if (dio_flags & IOMAP_DIO_ATOMIC_SW) - iomi.flags |= IOMAP_ATOMIC_SW; - else if (iocb->ki_flags & IOCB_ATOMIC) - iomi.flags |= IOMAP_ATOMIC_HW; + if (iocb->ki_flags & IOCB_ATOMIC) + iomi.flags |= IOMAP_ATOMIC; /* for data sync or sync, we need sync completion processing */ if (iocb_is_dsync(iocb)) { diff --git a/fs/iomap/trace.h b/fs/iomap/trace.h index 69af89044ebd..9eab2c8ac3c5 100644 --- a/fs/iomap/trace.h +++ b/fs/iomap/trace.h @@ -99,7 +99,7 @@ DEFINE_RANGE_EVENT(iomap_dio_rw_queued); { IOMAP_FAULT, "FAULT" }, \ { IOMAP_DIRECT, "DIRECT" }, \ { IOMAP_NOWAIT, "NOWAIT" }, \ - { IOMAP_ATOMIC_HW, "ATOMIC_HW" } + { IOMAP_ATOMIC, "ATOMIC" } #define IOMAP_F_FLAGS_STRINGS \ { IOMAP_F_NEW, "NEW" }, \ diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 30e257f683bb..9a22ecd794eb 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -831,6 +831,9 @@ xfs_direct_write_iomap_begin( if (offset + length > i_size_read(inode)) iomap_flags |= IOMAP_F_DIRTY; + if (flags & IOMAP_ATOMIC) + iomap_flags |= IOMAP_F_ATOMIC_BIO; + /* * COW writes may allocate delalloc space or convert unwritten COW * extents, so we need to make sure to take the lock exclusively here. diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 9cd93530013c..51f4c13bd17a 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -60,6 +60,9 @@ struct vm_fault; * IOMAP_F_ANON_WRITE indicates that (write) I/O does not have a target block * assigned to it yet and the file system will do that in the bio submission * handler, splitting the I/O as needed. + * + * IOMAP_F_ATOMIC_BIO indicates that (write) I/O needs to be issued as an + * atomic bio, i.e. set REQ_ATOMIC. */ #define IOMAP_F_NEW (1U << 0) #define IOMAP_F_DIRTY (1U << 1) @@ -73,6 +76,7 @@ struct vm_fault; #define IOMAP_F_XATTR (1U << 5) #define IOMAP_F_BOUNDARY (1U << 6) #define IOMAP_F_ANON_WRITE (1U << 7) +#define IOMAP_F_ATOMIC_BIO (1U << 8) /* * Flags set by the core iomap code during operations: @@ -189,9 +193,8 @@ struct iomap_folio_ops { #else #define IOMAP_DAX 0 #endif /* CONFIG_FS_DAX */ -#define IOMAP_ATOMIC_HW (1 << 9) /* HW-based torn-write protection */ +#define IOMAP_ATOMIC (1 << 9) /* torn-write protection */ #define IOMAP_DONTCACHE (1 << 10) -#define IOMAP_ATOMIC_SW (1 << 11)/* SW-based torn-write protection */ struct iomap_ops { /* @@ -503,11 +506,6 @@ struct iomap_dio_ops { */ #define IOMAP_DIO_PARTIAL (1 << 2) -/* - * Use software-based torn-write protection. - */ -#define IOMAP_DIO_ATOMIC_SW (1 << 3) - ssize_t iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops, const struct iomap_dio_ops *dops, unsigned int dio_flags, void *private, size_t done_before); From patchwork Thu Mar 13 17:13:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015530 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 865EB26A084; Thu, 13 Mar 2025 17:14:45 +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=1741886087; cv=fail; b=OYk88o5zq46k2SOapIHPOUq1ISjM2+tpJV1VGG6i/cpw9wp/oIkFbEJxsdVpC1hf5AsBWT1+8+CtCEif034NR8h3Jappb7vm6/en+ZdCZbyLNCrKCIvW3sLpTZGhVPvwQ4sz3RQbPmbEPbt8p5XZD1JaUb6HRC2sKn8TUOOX/EM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886087; c=relaxed/simple; bh=RWn/YcrMSdBZzOSoQaz7fYqD0H0WZYD1Maor6ej2v2U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=QT/ywuGRW2ianz15ysq0wL096w1aC2e9pLgty5cQMd8dAFPUvXbUOU5JTAvHWr1w7+gQ8DhN5suRKvg2cX73e6PaotTiHQ9AU3wLKEOiwyqX0VCW2WWvBgAFOCBwEwdM71bngxzz7Dige+GdJvUr8bf1EGZG/QWDnrKClG+QfFs= 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=l0glbY/r; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=zeWDuPog; 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="l0glbY/r"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="zeWDuPog" 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 52DGtqgb020671; Thu, 13 Mar 2025 17:13:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=FKkE8L4KaOILDepGJCHjg9oa7qgVeuAWEGi3gPeAbeY=; b= l0glbY/r63v6J1nbLRfwYerxr/DdVl0BZ5/Z4BJbAkJxkP65y8qIAbmlzJeKln5o DB5O11irUXEHgHlXjgDJTDXGGVuubSnlMAv6Q0+f1xy3V+6DiXb3B6I1KFqIKcsa EYTNEal2Y7fpnmWXkvmpV5DXcDQdc/Zj9nxyw93U/UCwkBDdcARc36/QC/iW9EQA WKoZOaY2OcWmrxGMV/VpdVONWHBCV6LwhvJrt9NEk7TkxGlEnGCD9gKMg9oSPY+B RWIkr+p/TxZeUsVzFjDttWm9BPi1ldGiojKPrS/GyBq/D4LEnhMOBnK158vLjDl6 PdxM0LMuHcZTOs0tZiAUCg== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dvpwu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:34 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DH6LLU008673; Thu, 13 Mar 2025 17:13:32 GMT Received: from nam02-bn1-obe.outbound.protection.outlook.com (mail-bn1nam02lp2042.outbound.protection.outlook.com [104.47.51.42]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45atn505gm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dKrF4iG0lwviwicEFHlpdkQluTlY4PnkA7XaB4RAvhxtsZjx9TJVvnhu3Ya2IPBZyH6upzqX5+EZ219JMN+YDbJz3zemqFXQRxhdrM1r/xKSXGLJKogJ+OG3XQ5tPaDMP/N5bCkNk7VcigjlCCOyGLT8ShJlG/lBwO6BaBo+4mSysCWqtFoG/t3fr8Bq+Psjj0sqRwqrJJ6GalH2uTk0RatLUU3l2yySi9+yi09sUZ6ZOvRK0qX0gJ41B+KHb2XuWmzqF5wjhezZTD1D4Ng9TrBl2cp6lc1qtuC16VJgVv/Ps/ahZsGyGTfs+Uw1cHcwx1bizjwTQ7HuekqqRZuDoA== 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=FKkE8L4KaOILDepGJCHjg9oa7qgVeuAWEGi3gPeAbeY=; b=PVQlheP0+9cRtpAEhZqpw2n0TH1T3cFyge7Zm1u6oHgXFib/72Su/X982cvfTlo1FJxyZHc4rFjK7DRpMVd327qBbmJ6SDmVywmdgam52375IUGYCdE7cekEmo0EmpPsv1SBim/qMFaZCmJUIuRRA5z07BtOvoxST5922J2MmF2h7D8Ba336OiL37D8P0kbFaN2aYll07e3eIGsSdlHBO/EugclX7XxRMylFrMiSwKqaz3UipTsdOSCSKG1fpxHGKwWThKzioV3x54cCW824F5oOV6eV9L1/huVym0GlOCgjzHTDvKTmiWOopEmbHBBvTmx6sNmt5a+TYaCSDiItIw== 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=FKkE8L4KaOILDepGJCHjg9oa7qgVeuAWEGi3gPeAbeY=; b=zeWDuPogbm7jykrYROndch0RLp4u0KfMZcpkmk8Is8Cs+Ul/JdkkOVVa3//3Y6hTpn/rK8RPHmQWBBi9dFgCpOc3HhK/5xlP/RQr/WgiLOtEO/MTMc3xdxnsEq07xlkTxDkhg+XW4/RurH5PRkdbtUqE66BCcRe4wMomJEwMHnw= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by BLAPR10MB5011.namprd10.prod.outlook.com (2603:10b6:208:333::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.28; Thu, 13 Mar 2025 17:13:31 +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.8511.026; Thu, 13 Mar 2025 17:13:31 +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 v6 04/13] xfs: pass flags to xfs_reflink_allocate_cow() Date: Thu, 13 Mar 2025 17:13:01 +0000 Message-Id: <20250313171310.1886394-5-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN9PR03CA0368.namprd03.prod.outlook.com (2603:10b6:408:f7::13) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|BLAPR10MB5011:EE_ X-MS-Office365-Filtering-Correlation-Id: 2b8c7cbb-af9d-47ba-1630-08dd625260fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: K9YQmVECz2RgBM0PWIa2MLGuzLbm0xC9o/0p5nGxSPC1hyDzEDQALyC65DqwbZ6Ich0Gede9lXuK+JLP3Y/wQUsX9c2hqpsRrKPkuR82lnij+w2dOcely+Q4V8W1J0lVA9KkejRPYIWIuAmDitO57onDiJrlkr35nnsQXjWXd7B2OTBMK28hlARxl8g+kz22rpp0HQg+DG+h2kni8buqtq6/3YIlmqZm5yDYYufVHgYuAEETu4vOkT09koe6yQQ37D68ZdJm1+nwZWf36GeOgrY1j0tniT7PrjPT/KZ6TU9t5mVLzDg+203IHBAdSxTLCKAhx8EoFUHB95QccNOvmfe1ajxdoa7UNXY8JfqgEPf+I1cG9fnlDDKSvhZ1r4mutF+fZJIDXQ2wl2QUGCXKv3QNHgCE6W1B8CuK51L4ok+LkLhEhM11caXc1QPONrEYlXZKgsRlq9XrsM+2xoib414L/qm4tNoDe6N3TNBqq87K3fpEl7m/ZSt8Wvi5jrTIKP8g4UeljNw6mqKzcVJwXTftde4Pz+bMvRwn3OF1/2DHIgNEb0hbAkoVnzzIvDeix49v5yFGTjgmn/FrbGLbF3qI3YA4qrReOydx0KRajlEUJrpbQj0Sb46PGNDCn4usu1F7qnjSE0TBXJ+lB2zBy0ze9F9OEp2ZHuNF5xFtR+qF1vuKABvsFK6E2mSE5t1VfzhIlbu6AAnZgMxsywjqzkXR40RVpGzgXK9AW32CO1Nuwk6ynpCDx8bePcL2DRFHrVhB5O6KM6Hwp87nYO+I4TFS0h4jQJvax2/IzzVa4nUhBWSz2FKEf3BytFe9gTeznLIObRDBw/D2M24asMOKeSpWyFjv7ugVmBEaFar+7+OX1CPa87sukR3ccyVAhMxRY0BwnB/3WONeGEqmO4vMJzkYV9tjNuuGmkGTu+sLyUcilWQG3U6wdHiio3+8eEfomz5i2DBTOo83GLAkeSXMTOI8zQtl7XroUAJr+rMQwEvfh0ZUcDSECCEtauM5YPPs7j7645UmNpatKdzmTidcnsb7hqmUo4rHrIefyUWUppTYNwnFB/gauOli/M8hwaDNqlVWqarDG9Bd385liHB+5h0l7JUtG6AdioCbrQJsm1AS+O4mVkxZiS0AevNHWXSfy8W/j+gplFFtx7eObIpGEUTKxpOOOkgaTsxScDg0+FkB1SaDBgZI58dTuOjGc8k/cQPYW6K+5mTZ9TH16E1np31Icj3Mg/OWkMrodpwcx5seTdpv/sKRjtOahSijjUAeux3QvIEREoVwHh1VvuRhIUEOVtBhO2CQU6PF/v9zRcLADVK8dv5YzJMZp7JXB84ze8pDYZxnMj/D0AAJKO3V1hg/cdspTinnXcqwjggbyIT5SUk4YZwMOZnR/51u9bWC X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VWSjcnILRAZNPnYgDHPkKWWi1EkLPPy3ra5i2kQ+5j8V5hJkRsn9lpep2L2ysfNyi/SBHf8g3oEdIrxFIAp0R5M8T4S/XA/WFWfTNMrlnZZyZusZjrV6bVgIryvlzLUrxgOTmLx46B9xkYX6RbOOUeuQp9xcUls0C85esbjbKnvprVmvNeAaatw75YLJlsQsnbhWMiM0AUUICn8lSv8Su8AxzyyBfkjT827gS1u+88dWdoCDLe6nKs58BZiBo4BBfrn2FMF0qnTjwbQ4er4JyrnWBl+8yoS3GWN2tli1qsEQnBV1qNg+8V9ngHpBD9Sx/r48ryIy9j5ikeCWyc1e2CC9zS5V6+T0jgNdIYNkupcSEaHVnExjW/1r7Nr/K0/n3gL9TwAvpTq1YcXm3CqeoVZNnW3loGS3gqDgT4QV50LdgiJj4gcnvpMHmF2YPDnHAO6b6GNdHqeUwZOSXIl4s1DC5BapKEOI/CeKyNNXHp1x7k+WRND2D21ijD/aDRrO4BMkDM4LDbzdqXmiDxbZABGMm/TcFq9xnWR34K0HHxSrBhfM73v8OWTbRMWz6NRhXWw6p9VBLr8GVC4lRkuVylIm8CDMI/+b1oESGgJKFhUh+JFNJWcbLxW5NFlu3K4btsdGjqqAMTFlshDS/4q+nuo224R2obgDwsoEIwnTWTUqwdT57jnBhk934mQKbwQRZWQzDdGnyf0HD21/dCIy1fGUrgDtVXLubFk6dPmI7tAyVS/D8zpKrDUET6SbCzs5nld85IHPnuHYq64w00WDrmHUlSEmBMgx0oe5iAPbfLmIFgpgDy3QgwImnc/GeJ4RDlsi+MZnwih2eAIjr3xqImTaHuEAcya9fr2DHGsp2b/1uAxJL8WyuD9jtT++5p22iC/z1fnEOXhaLNAkAf4WjyBJ0axPhf+9649PZWfg6FVFOhorVJcVC4g3r78SHZ+kgVTVct4ulk4kFTilpNCs1pbm1SVz4j4pRX3xfCE9N2y+bGyYBQfUipgG4MfV+R6rY11+eAIq25AFtEsUWXAS7+EKaN+drw6K+BCEaLNzEWeyu1bhuzwSxCvLPtgYkrkZ5SmL/29W3Y1LHn9bjISmW49dnJ3mLNSxEVF1LdG8Pfmm0LvzEs8rTpQJSzVejpOgxVbooEjlq9UdZuoDl/KcQmCkPnMCzc00RBv/1+B8Thrd3FJ3HWMNMlGC3DgNz4ag5AQxSxeOEy9rin2T1CDasYHMriSjGy0eKMN6ELjMknd9Hc1lYrLRZFsgIF/UHM6J6/PkUdqpSMaAt1fDigs4ixkMgKAJCYv3LhmE2HEQmNLtTQZyWQe/sXldDcIaFUOweGTCxT97FZL/oiJjjCdweUVAT7LTjRk9mTQ/GOGc68oJK+ex94IByaIRExqtHSFFs4OSTUgY1djvQ4Lt+0jjX41f/wxdxbBToerG0q0gUZ90yjz5d0x+UsMFhYoKsLZXSYtTKj6jHaueI+vjNmZNM+h40563mTebugbyx9pqu9xoLa1ckoqM0/4fh/YXoIKzw5OENdRNn5tuAtqXn0PrwclyH1zf5zuksogYFulvbwLVgsM7NR2l9Vc54OZbONW6ROubf16mPxZYLxBrNh7w5A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Nhk6aygiTDkf6ICj5/r7vO8VVcJAuwShKo+nUK3EP+umgMY4OJGVyBrNJWDv2tkOxtYyn6AaeQp9fWWlEnPustbqdJ3XpZJdQgiH+1xg3a9nISKl82gGULBlfMk13BtpCPe1QyqU06nnbshir77FLON/5IACik7a+sX8rXZIqO3Ze5/h8X3nnyetRpBoktwIxYLXOnynSdj+5h/GIFgU1DNcgeX698PgRDK35IUAfV02b0tV9rpBsJqfCZ3f2ReL5QK+6yTS3sqKmYK6AaEM7UDl0OsSBtziUVoLBPA58Vyj9swddbTCuU3aGdR3VZpf+o7k34aAS8qql+9GCPdaiP+4gPT1ABWuaOUeydmAImgIzhfeCNTQcAb7ASck/XhcrQS3kL/51UT9Ob6a16KnFBamrwF4/zhW0DwcwLEmWbOxJsT3TmuuJ2rB2/IKwz+uJPOmGX0gnkcUDgwH4qn+f/vrjjshDTNk2qPW5iLZ0AsN/w0XaD+S9PTC9ki9ZS64JXUyhzMUSuHUAmUXkK7wz1hHvo/72cQYbrUBqijww+lnmwJ2Ow6n0BBKsEQWM3aGt2ziwLhzUARixdcWBzqkMN0wCxO8l/g46qXrm1hvBSs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b8c7cbb-af9d-47ba-1630-08dd625260fe X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:31.1762 (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: annl/syJQ2aM5WMa6si5CMURyeTpn6rwSnMEeZ/y0orhpPwGrSZyj0t85MSIkSmb3+2Iz7R8YFif6eRlQuKr7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5011 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 mlxlogscore=999 mlxscore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: nvu4UxBhQDF9R8QBiBlKF2xSWTVSbp9y X-Proofpoint-ORIG-GUID: nvu4UxBhQDF9R8QBiBlKF2xSWTVSbp9y In future we will want more boolean options for xfs_reflink_allocate_cow(), so just prepare for this by passing a flags arg for @convert_now. Suggested-by: Darrick J. Wong Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 7 +++++-- fs/xfs/xfs_reflink.c | 12 ++++++++---- fs/xfs/xfs_reflink.h | 8 +++++++- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 9a22ecd794eb..8196e66b099b 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -813,6 +813,7 @@ xfs_direct_write_iomap_begin( xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); int nimaps = 1, error = 0; + unsigned int reflink_flags = 0; bool shared = false; u16 iomap_flags = 0; unsigned int lockmode; @@ -823,6 +824,9 @@ xfs_direct_write_iomap_begin( if (xfs_is_shutdown(mp)) return -EIO; + if (flags & IOMAP_DIRECT || IS_DAX(inode)) + reflink_flags |= XFS_REFLINK_CONVERT_UNWRITTEN; + /* * Writes that span EOF might trigger an IO size update on completion, * so consider them to be dirty for the purposes of O_DSYNC even if @@ -870,8 +874,7 @@ xfs_direct_write_iomap_begin( /* may drop and re-acquire the ilock */ error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, - &lockmode, - (flags & IOMAP_DIRECT) || IS_DAX(inode)); + &lockmode, reflink_flags); if (error) goto out_unlock; if (shared) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index cc3b4df88110..f8363c6b0f39 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -435,7 +435,7 @@ xfs_reflink_fill_cow_hole( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + unsigned int flags) { struct xfs_mount *mp = ip->i_mount; struct xfs_trans *tp; @@ -488,7 +488,8 @@ xfs_reflink_fill_cow_hole( return error; convert: - return xfs_reflink_convert_unwritten(ip, imap, cmap, convert_now); + return xfs_reflink_convert_unwritten(ip, imap, cmap, + flags & XFS_REFLINK_CONVERT_UNWRITTEN); out_trans_cancel: xfs_trans_cancel(tp); @@ -566,10 +567,13 @@ xfs_reflink_allocate_cow( struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now) + unsigned int flags) { int error; bool found; + bool convert_now; + + convert_now = flags & XFS_REFLINK_CONVERT_UNWRITTEN; xfs_assert_ilocked(ip, XFS_ILOCK_EXCL); if (!ip->i_cowfp) { @@ -592,7 +596,7 @@ xfs_reflink_allocate_cow( */ if (cmap->br_startoff > imap->br_startoff) return xfs_reflink_fill_cow_hole(ip, imap, cmap, shared, - lockmode, convert_now); + lockmode, flags); /* * CoW fork has a delalloc reservation. Replace it with a real extent. diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index cc4e92278279..18f9624017cd 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -6,6 +6,12 @@ #ifndef __XFS_REFLINK_H #define __XFS_REFLINK_H 1 +/* + * Flags for xfs_reflink_allocate_cow() and callees + */ +/* convert unwritten extents now */ +#define XFS_REFLINK_CONVERT_UNWRITTEN (1u << 0) + /* * Check whether it is safe to free COW fork blocks from an inode. It is unsafe * to do so when an inode has dirty cache or I/O in-flight, even if no shared @@ -32,7 +38,7 @@ int xfs_bmap_trim_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, int xfs_reflink_allocate_cow(struct xfs_inode *ip, struct xfs_bmbt_irec *imap, struct xfs_bmbt_irec *cmap, bool *shared, uint *lockmode, - bool convert_now); + unsigned int flags); extern int xfs_reflink_convert_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); From patchwork Thu Mar 13 17:13:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015523 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 B65A126A1C9; Thu, 13 Mar 2025 17:13:47 +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=1741886029; cv=fail; b=bLIcudxS66zIfNXUHHB/+Qg1NrX8ghGekCe5sTgyPKtfIuPbSffbF2cAvVN7Wvwys8bKPsFH0ZJAaFiD0r7/DS4/7dN90N04M6EvwbHS1Ax1AhKTlqt1Cj/2mkdYWJfqOBeVJoByTB9+Fm1RLDZFLtl11TP71+XDipt3aLjToSE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886029; c=relaxed/simple; bh=Q7KykwLAEuLmYP2Up71J9UeWb6tqK9n6j4BVsDRVR/U=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=U4fKaHbvmOyzK/5Zs8QpVuevWHOOta47BCfIwZjjR8ZCLkAQzPs+bHuv5i2S5lkau0x2hshd8ySf+BARRtcCRt3DDEFWLj6U3MGGkEOYgNJcap+aRZPcGl+XqwRvVJlxlE8UwZlqhSRijlaUD2FzDtxnwq3ouLZpZ1GhVU50gX0= 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=kKUbULgr; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=bPU07LUh; 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="kKUbULgr"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="bPU07LUh" 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 52DGtnvk013910; Thu, 13 Mar 2025 17:13:36 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=OTQGt5M0E2ksDnv254NYw0B+QnOglruFPrPRM+BPiG0=; b= kKUbULgr8YHbJuZmd+KOA2MK7+PpHslNQnG+nXaxE8SQuqN3VkplupSk3RNZOZ91 +I4IhhMCHqqojMc2nUL71c9KdWQTEeaxm/wnmHOL2dVGRviG5/h8v5yhQJ5aMYoH jSN/Igwgwj1suXpv0yecnkVef1kzlw3fSxVZeOKwyXpRE1SN9hvnwM90xc+7UJRx YQ46Ho0YLmeJj31hbt++7I3MgVjPJFhtCgTGtIcWKkT3PAKuYR6Cg5IKJlVbI1pA htq5Le720SndXrE68XxILltr5ESMVyZN+rRsL783f69mT382W+QNgvnG4GaoTIQR mSsLPh6mkbHmH7juPlmQIA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au6vmrch-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:36 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DG50Lp019547; Thu, 13 Mar 2025 17:13:35 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn26mpc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lP6jt5NFPc+Dx8crPJZI3lxdn0ziJ5q8QFO1cEPknQtFh23p1USnK+aJ/5hdEXisVlJOdsWkF6IvT/PpMX/qy9byDIuYz7zg8xpUZRMbdqMial8iaizDKb8bGLWfzKykduRPUm7yfWl8LcM4WnEcBEEgfi5hyIA8ITrwjoC3lZVCJkHGRB7SXfRr+oYus4lwr7CtcTRAjxrb3MCX9x+5BvxvJh5/FnuasWFZ1ojALRpmiS54M697NVRz7baPJAnGdD4UGeUfUKFxRanCUhjp3bkOmVGr6FQhtHP2mWi3IS/I53zBWyd5I0PKv7owDILt3g4NwNxbMQBvc6ZlsVemKA== 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=OTQGt5M0E2ksDnv254NYw0B+QnOglruFPrPRM+BPiG0=; b=EIE1zxE647nPZxiac4HNEX0gmtl1f3gG7w2q/XK2EZsIngt9RpjOfE2MsnO8Z6JuZcmjGk1me4f/urybnJ6jmpHjRYUAFV+bs3XPKWoKHbqyHOUjZk0X7vfdSW4oBOPvcBHEdLplowEPoSwXXfXR472j3mUeRlp1yo4cwx/ovI3hSCGYzo2FemdDqYyDm0tlhZ4eQ3200ZzwYQOTTDj7sYKyxV9gpG9VgLAXdA8ZvmU6+dff8H0W6p7OdNb1PI733Jqx8OGDJYkxMtjn825Xk3Kr4KF/mVqQK8XlcnWM4Jws9fj2T4Rh4lLe++B6oT8aT8mHWHWvSn7epIv/fSF3Fw== 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=OTQGt5M0E2ksDnv254NYw0B+QnOglruFPrPRM+BPiG0=; b=bPU07LUhXGMIOudKUzwux6wScJtuaPmm5P5EsxSevsjpgbAe8sstPwog9byt4t5bvZuzIb4J2KHl3X7XHk5fbGtds0ZfQnDzkqfuBrdpBSAqqKjJn1QkQLOBewR7lRo4e5YMi5QtQmSHn0rUUAwJFp5ZCTUwOyU9E9+pnfSzUcY= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:32 +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.8511.026; Thu, 13 Mar 2025 17:13:32 +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 v6 05/13] xfs: allow block allocator to take an alignment hint Date: Thu, 13 Mar 2025 17:13:02 +0000 Message-Id: <20250313171310.1886394-6-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0092.namprd04.prod.outlook.com (2603:10b6:408:ec::7) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: ad657acd-743d-463d-2ba0-08dd625261c7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: F7X2GvkbtSkIrQ88tqXmLiVVfiCkHWc8TnpORuDqmHDCE3o3UrkrxDVFAULf0lxowl4QX3TU9QLiRsnCoyH+Oij50i/yjIXR4T63RExQqOoPDre7f4qvAUhCgNsXd/G+hswsJyuThiTwGOQf40gHbhpEfNY9f+zpWkezcrH0aPTqcVanHIJLhnkt8pJCafVfMTEieQMt9polZ+lQcOPEjmJDSdoXH81IOpdr3pFoZy62R2mpokDzjiuWsuHuMAqYMX7wZ7tb9jJFYjL3QLY4Z5vOae5tZupT4fuhMldPZTyWDxyJIEPGWYb8YG8A25OBcpE4fWeLgTfY5DQ++DUfeDsq8azf2p1uJjQY3EHq50P1zPE1e+1bpgg5mUefyH+x0ST1Ak7vBgUZoHtf3bc8lmqU5DCEqUvv58Wf+lXYpRvi+ju60nueNzCOw+CaL0EvDh9yWRNpJ9PfYdrZ81Z0mpS88cxHT58OwOXxFvmzMT2/Ueud95v5h1kobUlch3aUNFnGIMIKZrZbHbxABNVxurX5phY2AWJTHAuG8eiskdG60Ft14eJ4iTbfWnoCX6gdM4cGYjlS6mSu49FJLPZXXPFtGcdN8leeVQyGfxfk1xYebuy7GItM/m9jwbqceRTcbYpEQmajWCswsmek97xBYmcJreaAuxdYF+nKPTNkPEO1VPu0VMriEeA0ayMzac46/IbQhOGmJ/9D0+LnON/YEa9X4KcdgE6ClskWIxNisNf05RTFN1uimjyCYZh998L2cQ8p+W/Ywn46+G5A5xUyhUayBtlD9pA99Lta6auk3JrX7HOjagPGDPaY4GSV3LU68CP5hzKroCvkzcwVnq6q4RCF2kdyRu/qtYnpgX/GiU6d2bbR4VU3KTnIGpWi66PF7O83kPE/IxK+FFbtFWy5Tp7/m9nZ5aHw5buJ8Loz9yJH1Wemeot9LtWZLkM2CWDSJFnqVqK+gqTRZ1MmKr0MST3CNT/lnMz4b5w7UEGjylb6aARMaCkA9PTAQGECPBTeHxbyW9GeawfOVuLy2RFArQKElJVOgPChUQJzHH6yVwfieZggYIBNhgFPjpoAGHHhrrZPBGfQNChPHOEVROhsjb97NV3uTB4I7aB/OwN9lp+YVN+TM68YSnIhpyG1ilMXUkYDJw7JPmiV3nnXOk6CPdkm1IOaozA2zS2GoPybx8/5RkY3HTDaBau3m+oOeXmu8yYo4OCtM5otuuzVgqfsZJGpr1ZZw68eSTVwsi0vRQGkLT5u2CLTQXQChNKXCqpEvHQiwY9ZcLky7FzNJvLbphJYhWAeanp5kEn2nnjYS8gqT5pzmzRm03665w+yUGsJ48WQ5842GT3u91AHNk0qutueJk04IlxEeAFfITyw1pr2aoCBIUs5FRjCyAwpugkD X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qq2hNZAkADA3KgPYbXR3uackGOsX6mmzp5w8urnr0dD4vDsvE7muealan9IApKS/Ujnq0qHHLwDKB9G4sRd597/QTzcsxiXh2QqpQsnoDa7dwK96+jLcLvJUhWnzlMPf/5eZwGis/eb9Ae0iLROhV5G7pZV0yNgdIRCq26pDw5xetJMhTKJ/ZGwhGVPEt5xOGoF3OGDe2iChBb1CNgehG1sXhezytw3+ukagF0Oj8ridF/gDZ0SXdQx77P3rxkRHtmx8iYyPVAMGQxfcqBV8e5xURBag+NGehKspkxLbbMZLGselCQoJjnrV4vlf0q6VamvLorcgtHZZixoh6oWEOKWeznJTXmSIQSn+cc/v7wR2RXpQbWwD9OluFPJetu5YrZ8RWU8n5zTe+8977RGLlbBlHnePlZpjfXv/9n49HNG/75gorvc1RDqiVn4DM9ZjS4NRlZUznQehMA1LP2OfgXI2sQ8ybE1Dn8pmisb4Gvgf8vZrnojvzJIbLMDakFuCB6hcr/39ST3e/fhvXcPrCT6uajTb8Rq8jTKt+gkkVEr/RYoPbm0Bg/ib/8x0vd1frAqu5zrj2eVTNAhjly7oa1/uTkDsaS6HfZ6GX1BmgOk0q+nS12zPUDSeL3tmxLfsr9o9IwZcf31nemybOFABTVFEtSSiWKnIeC1YB2xH3xgNCyqlw86GHUqlojNbbf7gXXKd/PtfgYmFC8eEaMw8roLbVmrCTtsGEcY0aL9Omm52ePczRNclHJteb8YQIKQ1EqvlJPNRNUmelmGqcxBp01x54lWz3sOr443t5s4Yq/J/iVmbshUpUGo5a2SXFLFFKoNhp5FVkwbIfjbeD0hUTaQDKUW5PwAhLjEOiRAQYSnKkCfZOnoPCoyjEL/nHngUMG4cWaOV6cYPU8EiOVUnibpaydVEVdaL9eXCUP5sfwR2pT7tdGeh14WhZ3w9HeWGKYmG48z8lIWFO6/tfq0hA/xJlyFFAg3VS+Of2lVO1/XSN8levKOt3WyofRGvzEBr7qaw4xFabteTE9WPOGeGQq5DRuTgaUXBe4coNZ5bR7Jo+692lkEGczjQPS6sWVy987XvYiXgCxb1FUh9PJmxDdAjrcu+C0WzUBgFZDt3M6HaGXV7j8pduDS24K1m3jWGEErtjNL89XqbXXsid5q43KC9t5CXdl4+hkFuP5+OyExX/85jwxYzjMDcYMnCQumUVyCZIEXNcqlY6MXOxaAK7ASz18gRTQiWKUhK9FzWTwEFeLmWw1CeSwSFhxjDqDCKyayK0Ts/rGibzMTXOzPiyJYER6vj9JKbqF2jcGCsaXL7QAklSpKNp4B7hmyq+y3xlihWTc3jME+TOV00qZD21PL7IYx68wCeVqU6ouQ0ASuFStoiZyqSgAdQpYzpjmx6EWzP9NrRwa2iiXJ8FpF+bMz7yPNq2orMDtRRPsk08+On7LMwKULprs784ceokcmpKK99rCAdnu2IBsJX1+LsZTcyI4l0e7t9xf3F+DYYI2+XR4O7lx4Ig00Kk/0HxyTFgNtPnzgce1Cdqe2h0m87YeE52u4ltUhcNacJEwVDP5IEcbyhSnDZpH2zTUJpm9b4fwTEOGUGP/qnrhdz1oc4Tw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lho6jQavFahc76YM5gp9vEhysJsfCKhT6FDRUh+z3JQv9W9AgxJy7bBs+iVPlBHW8W3y/vZ82OQPq17eZ+1MW5XH9q5F9Akrrnr0KMV2g5IYopGuFdYZ/WFDAM/SJwegT0SJ5ZiHWfCLkEMvh3s5pQfmHOCzUBPEMKdHMmyU91VoD/oiCaUlYA6tBuVBYTc5LPye2AtF+OHQSlCRTHNleR+BTARqLUwZXhbIoSNls0Eh4YjURXPT5s1sBqfnJAzAXrvJFBlvTOa0bRGTBM1ifEHBSjCUvDXazIItzWUvJwaJBlkMeXUiG9aYLV8o1SQiRb9F5TPnfdwuYrCm7Qkz6289ssyB6wgxhWFysj8Zb8IXBxr7CSbDbltaQTaUtQ7XWkFjEi/Z/l7yc1Alvrj6QArBoXpzeG3dRcodNnOrC6iIqQkHEFTNhUM0xRMnqYvQfzCfMok6uO40HcKhEvE0ME64pUv2tdW/TJ16MveK40+UsjzLfWXI2CejZEXM2CyqO/lOLd79A1Uh1pgl1Re985vfvHI5Hxv6WavvoUiK51gida9LEw/kjIj6Ok6aLM9U4AyMn1Vy1Kab3OlZz+0ueuEy0feX3vklh/KJCpxA71o= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad657acd-743d-463d-2ba0-08dd625261c7 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:32.5317 (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: zztAHlaVYklpEbFk1NoPgcL46jIJ/pF7uRzEBjRenLWLMk5nE6bnGnD1B6xVjnzUFRXXFsUbaGtGDkBD9sC2kw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: 3-s_hjoLShe1qtnuT-_5EdNOfgte2IIY X-Proofpoint-ORIG-GUID: 3-s_hjoLShe1qtnuT-_5EdNOfgte2IIY Add a BMAPI flag to provide a hint to the block allocator to align extents according to the extszhint. This will be useful for atomic writes to ensure that we are not being allocated extents which are not suitable (for atomic writes). Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/libxfs/xfs_bmap.c | 5 +++++ fs/xfs/libxfs/xfs_bmap.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 63255820b58a..d954f9b8071f 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3312,6 +3312,11 @@ xfs_bmap_compute_alignments( align = xfs_get_cowextsz_hint(ap->ip); else if (ap->datatype & XFS_ALLOC_USERDATA) align = xfs_get_extsz_hint(ap->ip); + + /* Try to align start block to any minimum allocation alignment */ + if (align > 1 && (ap->flags & XFS_BMAPI_EXTSZALIGN)) + args->alignment = align; + if (align) { if (xfs_bmap_extsize_align(mp, &ap->got, &ap->prev, align, 0, ap->eof, 0, ap->conv, &ap->offset, diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h index b4d9c6e0f3f9..d5f2729305fa 100644 --- a/fs/xfs/libxfs/xfs_bmap.h +++ b/fs/xfs/libxfs/xfs_bmap.h @@ -87,6 +87,9 @@ struct xfs_bmalloca { /* Do not update the rmap btree. Used for reconstructing bmbt from rmapbt. */ #define XFS_BMAPI_NORMAP (1u << 10) +/* Try to align allocations to the extent size hint */ +#define XFS_BMAPI_EXTSZALIGN (1u << 11) + #define XFS_BMAPI_FLAGS \ { XFS_BMAPI_ENTIRE, "ENTIRE" }, \ { XFS_BMAPI_METADATA, "METADATA" }, \ @@ -98,7 +101,8 @@ struct xfs_bmalloca { { XFS_BMAPI_REMAP, "REMAP" }, \ { XFS_BMAPI_COWFORK, "COWFORK" }, \ { XFS_BMAPI_NODISCARD, "NODISCARD" }, \ - { XFS_BMAPI_NORMAP, "NORMAP" } + { XFS_BMAPI_NORMAP, "NORMAP" },\ + { XFS_BMAPI_EXTSZALIGN, "EXTSZALIGN" } static inline int xfs_bmapi_aflag(int w) From patchwork Thu Mar 13 17:13:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015524 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 1BFB726B082; Thu, 13 Mar 2025 17:13:47 +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=1741886029; cv=fail; b=t/dDNKyGluORfU1c+81Oygj6FYNokxO5V9Gshm0YE+o17p9K1R17H+e4EpVg73QsQXlALex2Pn8QNIS+9RMB1k0LTx//35AsHQRntt/3EHelmP/OXGOOyFmrw8aCPOk3flshCQKD1t+JCiYMoNXXv0TBjrStBfIGwsnHL6ivfWk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886029; c=relaxed/simple; bh=YNrRGKBJFFpkicZnNH7U3bm4vJfk/iGk3s1giC+txO4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=trfFSDKjH82XqcyRHsm0jFXBaL1quW5JiVoQVxLfjmCJa00ZdSgJfb+fPufN76jHH2mY70+LoogibaEmsYYgGh/dORUHAMUuXvN/D14JMpRbnk0mwfAnM7qwSU+Nqk3+h+PLcX1Vd8RGnN9HkKCk3NW5tZDOSECdeQ9k3+3PiyU= 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=RVULheZv; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=sqNiq0d5; 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="RVULheZv"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="sqNiq0d5" 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 52DGtuQS020758; Thu, 13 Mar 2025 17:13:37 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=IAOx81FemV5vPDv7oqqqACxpiKj5LP7fdQEpgfJicJs=; b= RVULheZv1a0Ct2YUT2WIsgVLzqdgrRpIdJfYfDii9++icMUTJiRXPLp9cTKyxlCd j8kVI8ZiWqSmB65WjCdicbwqT3yr2ErA9ambUnhGZdPq5xwdAY1/coAbcYxsPeRm y5lypF8vafF1yj2K3S84TzgNtSDPKYQlyrEIRFalQyNuBWHerGOWswmK7+ecbIUm NUmSGsG+SueS78S7KihbNA3V4sHnGlh1oU04IM28fMivs85/wmZQER8mi6xTS2ny ZgKuAmjZeMM7/oyFQSWo/UR3psSo3Tzi87KX8yd6re7LTiBZmVwNIjO9FOJ8mdFL WBhIuBHNzagcDLuuLZHD7g== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dvpx1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:37 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DG50Lq019547; Thu, 13 Mar 2025 17:13:36 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn26mpc-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Cr3cWdlStvtH/GgwnFNpLV7CEzEVWhZg2MRh8CPTE9hMrXLt0+2NW7X7WplLorKN9SG+eIR7AO32SuEI16LAdT6xIn0r364xDjnHyZuC623QGWeGRgbD7g0KIQu4peuPo94Pnncjxag7kqpAI9pY9mD7AVlwxx2nS4ZNFv8VfY8ihxeA8NRRNqgSobyddKZOIBdbogwzYgCavQcKSuBKk+J4Hb065BfBuGPq83wLMSONBXq6DhGpSRhYsDhDnO6ni7SjtVQAsGNrIs5SkGVBo5sSCFhK1Ji7DQyg3eBDxMBqrJkKEfsG2BJQALYIgeAfBJUNddzkM3xfVYRAXOWTiA== 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=IAOx81FemV5vPDv7oqqqACxpiKj5LP7fdQEpgfJicJs=; b=IYmj1WyiQNDMF99LXPycVF38kQVbkRWRGqPDEljxjJ0F9snzP1aa7F78TZBO6hS/w0NjW15eE11Hz9yNG+Yq2Ctmlx2OwOazfA6MgpJDzs0xa2UNizoLDqNMW7y1I4fLFRv9lIEiGGRLb+PPEMzkfvlgcMkPIZs6E4qqXJjq/A0zV7faytGVWRbVYrrMGzjkrF8ZH0my618SwFwwyclxnLIMFfBJBU9Avc3/xPu4KVctITElkd+rymA6bijJgi2m7FxTBAn4OWqqJVkKoDeV2wlwGTrbllwZyDrCkmCff/LvFcRPFc1R78H75aItRqWI5KAW3MV9UhXU7mnjEJ7zlQ== 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=IAOx81FemV5vPDv7oqqqACxpiKj5LP7fdQEpgfJicJs=; b=sqNiq0d5ISl82PiGpdjf5GSn05+iXyrBofgDDZO3i6VmUU3K7S3SCYCJghYX/R150NGUptPlr26i7wBMOVR0/5c8nMmN9CZy3oV/ZbjRp17iv3BKWqVA803z9aOhuD5VL5DeaRtQYDZTqmBoMyZHsxcGGZj07kvH7G1p6He3HVQ= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:34 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8511.026; Thu, 13 Mar 2025 17:13:34 +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 v6 06/13] xfs: switch atomic write size check in xfs_file_write_iter() Date: Thu, 13 Mar 2025 17:13:03 +0000 Message-Id: <20250313171310.1886394-7-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR04CA0096.namprd04.prod.outlook.com (2603:10b6:408:ec::11) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c4184f6-c298-47eb-56df-08dd625262a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: zzWuIlyIHrAXjpKIZ6FWbY+8mZclpyFxU36lO0kbYG5xcb46CiPfhyON2ArdgqR9ywSB/vycj21/tKh5Cz7Mx1Vkl6X5Aki8/ABLDbbtswmAeQxmwGm5QBLrrqAKpLUfVaymI7UoMEbHM/vlj6EaOajhfImIQlV5m+bfsV6Wex0dfipAvq7rjJc6kaMpJh1Ly21yY1DNx5NQbxYOICrleqZvOr3hqMgBftyYKAEL5HyeHM4hwZOW/7GZtBCwEBkzpBj6cj8qfNg58WzTzLZSYOZq1KVpCaHP03wHHDLt/6aaGCzU+XOEbl1itnF5CSFLloj2zo+N5kzcKKGESlzZTlfO6ScV1kly88wfTM/RHAbSaOniRtmZDOfD6siWxHPAHGsPrCuWv183NmLcxKRTZrAv2h0HjKyOMvORGt42r3pbBRd0aOpGhnmdOQzP28utHZ70OGax8pCVyh0SSFjVTdEq+SkhsxyqtlLn4CwrXyckJVbd41UIcwrToEuA1lKzLSQoQo5ZQw7Bms8qVDj9wci2Fq1EqupECSgbcvYrvbdUaEfZkAVeHMjujDz73zSKp+StLgtIYJJ7e33+BJ/gSexZvmakTBY83PMbYhpHOmk3iEH69V7F1QpeLrZQk2PzJP2b4wlA6z+yS9J+AxquY1/rOOxslxRycsjwTBYPDyRIkLv8M6JWVZL2BrqlUFkYCBIQsZZ9KjyG35M4IyrD96vb5RV24LgrGDcIZttgNdLBr58V4z7oQQ4IR+5ivgP4erixnuq5U2U3ebEOBGymTHVuDSjXrrr76q3VYTOu8+UIXrMrW7EDISUzI63/wXhH0eVY+R1twdFN9Mh5afviUf+ebCweeAX1eOeW3v9uHV3L7epTVpwvpsWbbH+JhdRD9Exf8F77LWJ+DBsJTxU+yY8fKMXljUFvNpNXKxCI/8rSs67EfE0yaHlTKhnj7v3Qh4xcJauc+jwqulo2a3ila65y8NA59Det48/Z4SsKPXbQQMwvH5yVjXCJoU9j6kCDyMIeT+c0KA8nfEHTKsnxAbwllHmm3jgMOIWI8v+GZNdvexT/ggjoJBJqYUSY5qLwmuBM0w68KBB1qpkfxIpWCvDRG4p5tC1l6KzK1cCbctnAUacvfV4NuRIYrjaqV+NyKQ36l/LY1ytdjupabtMjoUNfEI9ljzbNIJqWSUdLQEzIEJzv8AcKM5EVFcnrlTuF9wFEEeAPBWtRfil3gSRJNLoakS/sRRTRW+vW25rJhgFvbV5T5E5O7mMeS0IOD7Ay75CzV8A8taVViRyd7q+LD6dAz8x2UB6DtdAKyVA1W4UaRr/f4rcmwHwzULrOiJ+uZ849t/yQBNgAD7lIuUXhNAu48QgEvZ3FSF2b9pRsScdlEXVZxxVIUJffpKfWRXwz X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ryR+Kz6Evk0L6eFRIYpF6c6ujFua5MTqH0zOGHrzowFNHXRi+Nwan4eq85AHbNsgIicsyF5qOBX6HtdFMaQkOvv27CxODitgnUtTmpANW8YFaoXGX1Zmqm3kLv7EmVvARiH5nI35JwHLywBY7iedq3Bj+62/cC/ly3sRxTwR1t2wahEbcWhBrgjXJmbcFJgrP/sXBevhjjHFRX9SdTeyHLjIuAnFw7OpAgsjzMF7Y78jTZzRjPvyVtUascodN+0Rdl0F3087RK+XAhNLRpnbO+vqG8me6YcyGQhC3dQzIf3gqgZHfFs0gBsR6TC1CnXc5OWSLSVn+3G23TJm4RDUQxp5z+EIs5IacO+5FnRwrZcNJ7tAxUgWA/Jg9ORIVxId5LvnywjpnnpsSdzrWpc2Va0bqGPQwcejbOP7Ba/R6q9lv2QtfQH7o+blxU0KySZJNvKIbRT8klQiqGyVWgW/D+G/QPtoxVOrxeuGKVA5E61mleBedoA+Ssakd6f3HnQqP8cQuvB9jdzwe5lNvUKlxn6/Bv8jQkMSs35i1CgDmZEZq+V73F4Ko2A40dZfPQTNPE2WXc5VlHxDh7IWQH73H34zvqR9aO9/O43Qi/jZanr0WJn+UuR2qXtFPFJnXJOP8YTciaCYIoA0BCbznRx6GKKsp6bCurNJU7/kvZuEGzVI1reYp6PctuOK69qevT4wljGePfZbDeddElt4Sb44OiCnGqYTnC9BsX8jYTw9KXfTzmLAwHdByAayRLQe+a14OWVOUJ8Jjw/04o+vmce5vmB54JHExsnCuAUkgF5FnRPia3BYmlAJET7TewNIf0kFj646B0RSM9bRJSoYvkooB0cBUpV4qMNlTvLsSTVRY74RuPdBXYU2MZYQsb6xPUe0mSGr1TllleNe4sxSsozMthJpkiI3JuXW9RYYBmFMcDqsjIqDXAZYIUWxPa70kDSTCcDElJ0879WqH7+vM779bS/X8FPqGOesltjhQqBk5EM1gFMLlGSbe5H8azCOw2QOQUiba7vrtYyDDdc1MtFNGBm1D1Dr5/vXH0u1EjRCYMLgrXoqyfY6MFqdeYJLom4PCeW8RZKDjY0MopUwd+Fe1xZSIjakLa7lpMC5ub0vL5b8fRZArr/ZOouOt4fRVqgLA/rE1v6KQWAR681b9tIEFQjs1J3YMxNbyQx021BXmGVv5Oo7bPzjn7/UTmloZewa99Nzsa+xCwZabtInUq887w3ru6ieE5ACMJlIozOMY+TsvFBQZFep5qmFYCfM9uAO+XIdPMvl0tsK0KSI3plHMEQW+gDKIP+cM2XcuJiPWxoQri7qgICGt7LKs1hASXz4fFAKQhPCtxRkn75XhioFfeAE/bfV6Roh/tklYs5SqYZ0V/hVsjz6Gq/bhcFbyzjAXKBWqAQHjcF0BRN8sUWtdbIf7YgrGPWtjRjAjK9GFb/C6kvvgXkzl5WRTlLyuDETK/ZeZcNz9FEci2MsjT9JRQTgGuIJtxUKK9N/vRic3UZPWeLytYE9anwkJZAZwPG0599cde61z2jIaZhMW6qi+ZSnPVurFRAUxWNqnoz6q/QsxysdNrkXcTg2CPYOVyDqRlJ/9fVpYyCEYV+2bAhaKQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: qAB7q8vrSnbwgPWl6f5dSp5WZR1Xi3q2OnibqvNU34BKyisaB4zzaqKENndQoTN+GdNdMlFegrw+2fYJoyIjHLvLyq1RTDSjwhMcHdSTIyRhDPUt00cq9uV3Fz873wOG01F1rz8pgbyOahOpSEJaDGqsazteI6U2fxfKYo0iTdMVHtEbZWQNKjlEycyQUNwyNwvVgRJ4JO5H02rAxiLUEtpaVe86ISblazfIaJ4U7y01Z77NCq6y01UnpPH0K7FsAOxHCqBhxMfenZqs8V5u4u2IJgzOHTGh3mcCG6pFE2IsE2TOW10FNPBsy+tJZfEp3G+CBajObPZYP4xYF1snkwteBg6T2xQVCBgOZO2ns5+fjpGvVC9ytOa90PZ4gkk2gQBpwW5B+IqZNMHdgQf1SsAEye5oWnNCkzVAgTPQc3Sm0qgi5yami15lSpEhMUDBK8SMRD3Gv+orKu9sfr7DmwWVFST+NdJdtYaSyevQZNCP34HuWVzniyId1d+BpaQ9JLNPCBSpubiu66sJaIfx5Qa7WUnoT1+rXqsStzC2x6RnlIy8rV2kNgUuSL1t2Ctdsj8iSobpfPIygP3GDlqrD5BO2HEDj8PVZxnuQzKOr/I= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c4184f6-c298-47eb-56df-08dd625262a5 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:34.0067 (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: 17e8WtDBSTMbUMwJEomN1gnCXE+FN11FMKoipTP0eLCqzWMpdnEJ9PG9tSiLhWrwU4XZFjf6q7fq6RPjaO3m2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: KPTVAT5DxWUvWa0lrYVMku28GZyeYIo5 X-Proofpoint-ORIG-GUID: KPTVAT5DxWUvWa0lrYVMku28GZyeYIo5 Currently the size of atomic write allowed is fixed at the blocksize. To start to lift this restriction, partly refactor xfs_report_atomic_write() to into helpers - xfs_get_atomic_write_{min, max}_attr() - and use those helpers to find the per-inode atomic write limits and check according to that. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 12 +++++------- fs/xfs/xfs_iops.c | 28 +++++++++++++++++++++++----- fs/xfs/xfs_iops.h | 2 ++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index fe8cf9d96eb0..7a56ddb86fd2 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1032,14 +1032,12 @@ xfs_file_write_iter( return xfs_file_dax_write(iocb, from); if (iocb->ki_flags & IOCB_ATOMIC) { - /* - * Currently only atomic writing of a single FS block is - * supported. It would be possible to atomic write smaller than - * a FS block, but there is no requirement to support this. - * Note that iomap also does not support this yet. - */ - if (ocount != ip->i_mount->m_sb.sb_blocksize) + if (ocount < xfs_get_atomic_write_min_attr(ip)) return -EINVAL; + + if (ocount > xfs_get_atomic_write_max_attr(ip)) + return -EINVAL; + ret = generic_atomic_write_valid(iocb, from); if (ret) return ret; diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 444193f543ef..64b1f8c73824 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -601,16 +601,34 @@ xfs_report_dioalign( stat->dio_offset_align = stat->dio_read_offset_align; } +unsigned int +xfs_get_atomic_write_min_attr( + struct xfs_inode *ip) +{ + if (!xfs_inode_can_atomicwrite(ip)) + return 0; + + return ip->i_mount->m_sb.sb_blocksize; +} + +unsigned int +xfs_get_atomic_write_max_attr( + struct xfs_inode *ip) +{ + if (!xfs_inode_can_atomicwrite(ip)) + return 0; + + return 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; - - if (xfs_inode_can_atomicwrite(ip)) - unit_min = unit_max = ip->i_mount->m_sb.sb_blocksize; - generic_fill_statx_atomic_writes(stat, unit_min, unit_max); + generic_fill_statx_atomic_writes(stat, + xfs_get_atomic_write_min_attr(ip), + xfs_get_atomic_write_max_attr(ip)); } STATIC int diff --git a/fs/xfs/xfs_iops.h b/fs/xfs/xfs_iops.h index 3c1a2605ffd2..3ef3bb632ad8 100644 --- a/fs/xfs/xfs_iops.h +++ b/fs/xfs/xfs_iops.h @@ -19,5 +19,7 @@ int xfs_inode_init_security(struct inode *inode, struct inode *dir, extern void xfs_setup_inode(struct xfs_inode *ip); extern void xfs_setup_iops(struct xfs_inode *ip); extern void xfs_diflags_to_iflags(struct xfs_inode *ip, bool init); +unsigned int xfs_get_atomic_write_min_attr(struct xfs_inode *ip); +unsigned int xfs_get_atomic_write_max_attr(struct xfs_inode *ip); #endif /* __XFS_IOPS_H__ */ From patchwork Thu Mar 13 17:13:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015525 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 492D826B94E; Thu, 13 Mar 2025 17:13:51 +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=1741886033; cv=fail; b=DCb2ui89mM1i+HvmOFxbcJ/6ChsIYZHbdC6e1pcwkUuG9RBz0YG5L9doJN7VAMueAcOXk3x73nY2fjUHZjbKMRZUZiDqt2EKctaTwlXjkyOcl8Cm7Tb6aMlsjpsJlthuiFNhpI72QQ5VvZ5N47Iq3wkhCrQgxLIfEsW3Em+DNng= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886033; c=relaxed/simple; bh=EUU0Cz2CLDePvVDv55/5iPpikkl04WiLSLOYlvSLs/Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=cqd8wWOZrci/FjbULgRXomMviaVFIn6URfE7iS2jlQNOMlQO1JkodJ+ovUzbRM1Sy8dBANhz2vdL8s5HrFJWNZOkgU40kiLgYHwgFFc/hr1gJj7tFkL2D/kQ9Dy/mUh3t+x/5pe+K+sdTvRQNeaHTfoUV5DXPYa50pamKBJF3R0= 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=PViAvtZU; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=z3Mxci1D; 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="PViAvtZU"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="z3Mxci1D" 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 52DGtuQT020758; Thu, 13 Mar 2025 17:13:39 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=Ap8mP+KyuOB9iTjQ4+kRQyXqFhY8+A2ERD9SWrcwXnM=; b= PViAvtZURQZU+rV43zJtnD7l2uZXPalgOuPe/NbXtfH3LnnFUV9kFMlcERRtq4lU QGDydONyT1XFczU6onKN4B2mzIDpNEhI00OjfuvmYdGdekJBbrJOqxD6qeo+x8Ei 4pfinrSk3h6IES/WGC/pvV+6isnVhPKGPHelnncEbaJxnh3rlRcDacCYFXL4eoCk l+/zC0vjX2kBrAF+KFVNHR4vc/M6xy9JIirCF1VJheTMoLtc90DR6USz1fFRI0eM bNNpUiNFcbulxbb8I2pVDHGfI8T8Qs+bZmoKO88cuYw5tz8eIT3pzoz9aTCvhnLa JUPtReIJ7Fnnh55sb+Fkxw== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dvpx4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:38 +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 52DGXaNK002204; Thu, 13 Mar 2025 17:13:37 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2172.outbound.protection.outlook.com [104.47.55.172]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45atn90p33-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pIjsRIAe6BC48TgTxyNOBbwhlyPGcFCVG+m4duJqyKyqsBMn7EHdozxR91CqpgOR+jklAP6sM6dFr3ObH6iK6XDIvEXglxcl6K6NMypYKyB0cq8iHNc7XXzr5maH5EUtxcPTOICg/LcRpvMYEKJMDnG+It4KlpHOeb2XmHmno/12IZZO9OToNK+xs2vrPnVUKNYwqeWOZyer0D0eITojvI49P2CdwsVuTyRt942xpVNaqkHvTHreEPHgwumm3nUiIG0bNJZB9GhlSMUP0hShOwVU9CrWEszT0VZw8F8XalVcStlV1tWXu40Z872cp9k+r0o/DXJBIV6clOm1o/XZsw== 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=Ap8mP+KyuOB9iTjQ4+kRQyXqFhY8+A2ERD9SWrcwXnM=; b=d8kvVrsH3cdhwk6PBzc9OvGRJ4cc7QkTG7GkNYRYsv5QMzGJhRy9OQsO+zQl/5cCU9uzD9zrRQjJOVuLUeuXnRoO2Rutpt823npvTh/BwL6SToaXwuqX3HcWYLLKnCDVi2bztfIa+EuDwQ8tVjNwiNVwL22hQ400BS+snPqbfA8MvhuYZWhdZS9zK8Fw2jnu0zmV6KuV0aEf+hNktP2CTptln/Z4MX7lSfA5cQHANpdDEZnV4UYazFsBM62EnZbmLknUWKZf67HBDyC1mIV2Y43Iyxwd6Z6eQrfv5o88dsw27o6aIwKDz3FwFlkPq5a3ipJX0WNDxDgVVVsCDZdIYw== 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=Ap8mP+KyuOB9iTjQ4+kRQyXqFhY8+A2ERD9SWrcwXnM=; b=z3Mxci1Dtw9y4oT3Hu5Y8x++z0yrRwEZvH8p/gBg3po2CZ0PAAY0OUHdHgA6iB4qJ5/RsfS6imvTKL5QJVbFFLPiSFZgklPxFm+m0yHSDxmhTos3+p7CshRKBQwGgFMJLAPJG+lvpI+iIA4WatCljEQ1HmmeHYZJuLUhzbLPFp0= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:35 +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.8511.026; Thu, 13 Mar 2025 17:13:35 +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 v6 07/13] xfs: refactor xfs_reflink_end_cow_extent() Date: Thu, 13 Mar 2025 17:13:04 +0000 Message-Id: <20250313171310.1886394-8-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BLAPR05CA0033.namprd05.prod.outlook.com (2603:10b6:208:335::14) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ec4d80f-a1cf-4a1f-364f-08dd62526373 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: 0GebzOm13L8XsAqMjQHiHI/nzsws9txU7Vl3awlX6HK56UA3GvARS95bfKnvy7OH+KW8Q/dn4lWLWUfSS5slbsllGogLJYQje8hHOR3imjpwZxQzjI8abM350k55HYphr0JdmWG+IEBmd7VMvgBe8ey++w/w/ZtXQX7esRSsJpppBkVXH95Hj2Ee+Muu0C5T4CdOfGL+Azvp/XYBEF6Hko1NXn0vVP/Wc6hzp7Tlk4EDEYpQLb8qSxbA0fEi1zMEspB9DIldgxuttw1IEzSetW1UgNHVWO5eMR7SNpAtipCjBzlo/3opENumEQw0BZSxAH77jJn2cJ2OX5u/rtdEdoDi9hkXTiEenX7Zd57xmYl/8KqtUMfuJYl2i5ygbbMRonFqA0xF9hmPtZXqfB9Bc3M7JsoW77m0iUSGqcb+bkfaNgCE6z1rYYnchOrUR1wks3dxkWUDUPKBXBdhGDNyPkidZcvFkECzDc7TMMnKKXYEZxU1pT/UyannQLYuO/QrswhDNaUkpwNyLrI4Bp2bKxhf66JQFSErAaCyg4KRliE5bELb7Fzy079j01bfdLOEsjltIHOSxTvGaEPwvp3NfLiMo2NdOf+ElqsHxDzE+0otpNT63+Cd0NanXZqC+vbbs+LpzKAqm1+q4AFEeEk29UI110QhpErhn1xrtl+9GvHB+kcTEAAsx1Imy+FO6hCKp0SU2q560dtWUdtQKGrSYnCePd7ZpU0odMuJqbCynRixo5hBqwUOVG/c9KPSCphD+oYBJ4+zlLNvdciWZJFzMemud22g2POMoWjc5qI4vpcDhAEquDNNDsmVQrRqv6V+boRr6QBHeHNItkGuTspjkdSjXhJUp7Me/jjAG9quuYv36zIfXDi+QScibXVZhy02s8wIoHcAGY9V1Rk/gG9i0yfIdiELtqedBLBtvhVBl+/YABvOxiTjf4BBX0i/vhsHd3XC7n7gW6wEMsoNHF2pnL/0h/rvszNzuX4walpN0YrUI7U0agrnO9IzUxvINMdQzZCfAzIjhlrmx3Ylyfu4fhSXPGjb/Ru58wmlpbNy1P7oqNKgVFeMKexgp1Trr3m+wt2sVCwFWVCUp6ZhQ6rUw+PUxOkzg3QwB1uNl2V74AyVX0plMh4Ddat3MOWvruInSBqHPh01NlqB5U60BXzDEZgWl++8WQ41mB1kLYhvIlVi2CfMaWiXfyixy6XCrLRgAopEdcJO5+34hQkESTdd50z59lupt/KEbuiJGNQY/PdzWBlCj/Ez7ZJLexzVtT3gtZCgcKEj5vfDWrs6sigk7mvfElBzhODBQmoYpO7ppRUtWrHt8wRi67iUzflqQ0zrlS2+692VkMaVyfDIo8apbRTqevwYlrTdaDr3z7Lpi4p139iiDC/dZKNZRif7JNp7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: p58E+M0iuh8xYMSS43yhIRyD8BwfGGglQtDnqNERCqgm1ziMjSyitf2qBeFexFvgNFbFmTP5pWqZ0YaK9uqYYMgyg6xdXDLjFD90M2Tj9DahCFzucgz1tNUGicGaJrSKFtQKTZ8SS52V62jB64qAitMyzzHaJgExb2gw40ERutZ1yh0lYdFX2JGhgZz5Vyvu0h4BkYw6FM3+MRiJRLr+dnGoDbmxOdfD5asJPrreo05hOJVTdTQ48XApeQTUu/7fe6P4hk3uyGhgbFPnotPyYQMCrhTEJVN4jio65wCfqIf6pYBgrxdrty5v8HceowKN0YcCm0po1eRq3j73mXqzAGSltT9XNJUsUx9mYetvIeW+42fvO85jGMoNc3HOTjZSCEpRdHP+6UU9zb9aJWhMnAsQdIJG4OvjPCAlgNjtinK0UXygZ0ltolQmca2Wx93dPZnvZwlMuAo6ItheX1WjOzM2ZtfOmDbpoEP5DuXdwit98pt6affWjG9Pdv9phJimie1U2Ollvq7DC6sJG3z2ahChLnRSf+wIQQ0r2ouOnBWgDQtQk80VOZu1LGsrukGzradgwC5+3fWXP/PuXzblyQ19OQ+HCiXsXmBdW9gsbWkRGdRzIKv+WrhBm0Kot8suedhCcx4bnqQ6XzC2dlZ5e4YJU4N9eheCGYY/FxYZr62AJce7gtokLdhSPorfSlUyARqEVUqXBGbtFbtHhfgpXKt6MbKsT23X4YOWO2qZlhKZpJfVdTZhFpVnugscXMZrnV6KvXMUXdREQ2GUvolygBiQ4fZram9XvtM1IDckju0vrbDx7862LJZ6UqS4zjn9UC16JCvwN0qUacG0bUUU9RqJJqnQkClaJC/aFXBDnfnSWeMnQrR7mMOChCw9+k70QJun2vZ9w1guSJe0QAoOFpNRVbSfq3cqBgUVVXi93b6jZtzZfG0wu2uvDEXAErCuNu1onIoC+zdeMi1d+DCzyEunTFa8MkbtvZHDp0DqVqDmXXWLcBoramqplFpI+6JHfE5u98IVHC3tOkxSpmZxETP8Mx85IiBIvtWC4Ax9m/pDheLGPtH3KUgcsAv61JMjz6d7QZSkN5/pEZBrFaiUxMYmSzhdDszv80Q3lXobvFg/uBkiXg8wlIblKR6apNxzZcml/uxcdyZUVrTfURNviDJ+P5awMTk/UjtUjrJtK7xFtGbjccyoRxwVwhyXpk7vExgRInVryXAhXTz8rIYVcpVGQkOo44eYMDmbMRAacZrmtljjz/wWUrsV3j2aWUaYgI+gzuZwFhtlvPqkmkS+VFrxxL+xUDec6AHwqu43lQ/NnV9qX8uUpyx+PiOgYuxpG2VIli/CPPPcBM+ixqVtxIfsigQETLh41BgpJduXb9zXUeuTJgfWycPpHurE5dFlsZA5WxW7R33qXd4L/JH0wRH3eTyopuEXc4Lf6eHcoTbOqPcQcxq1v5hiMuLHTb87TtctmcKPMJvhwqCY9X5m/RmC6SgVA6ruka93yGeOmlBu+7k3QKCFzhvpC/Zn6f6/sC4ydFs6HcKoECae64kYRwWA9rfIxT1x2c6to8ZH6ceKUc+YXrZjK//1tIDsXjNUtMkD4GhSzz4pXmInZt7wJA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: hmTkNVTwBd0zxCb4gAXT+XvSph2Ihd7mN1A/QmOyhV8UWq0qdPtW6iITvd5Csm9K8LWspPiesmN0KFZJNwdPMEQg4Xt37lmxj6Sqm+zfJ18B0pAGuxqANhts6BqX6nHK0i+AFXqDbMboteEZbkPO7RRz+TAD5LcFiIzq3igxd1sg2MIDrqzCVKGLMtU2zkBPHS60iDXXElLHfCpG47CxrAz0/t2enjp+tL1ztILoMFCu6WrWZ46fi/djlajhEDV30thgovca2qAGFsOfWkR6gOpBuT/4bRh2xNVOZjP1irzukD/4kR5WCS473EMTIiolSB8dVgwoH7eETuhOPF+9R77/vaY9cuWxBuW4RB8xTe1aCVzYel/u3/XTznTlpBkL3dPpz47yk3Yud02d0OlZ6c95JIHpK2Q7yqjt3jOdgR3SjPQo6v/15Tu31FFvPL2dVO9wH1kJBVNbza9o3j2q7HdwkCT5usrIIiR2GKG7clGURm8NVj4fm7CbO1GkeV2GKgqrtrwzIcqxxuICgZnS2gZXO1pYG8xH43sL1QoE+Jw2vpUva7uETYbN1yy+LAFkZFNzS+pCmLMV33oBiRotUzvict6UAFDpexsLc5PriT8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ec4d80f-a1cf-4a1f-364f-08dd62526373 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:35.4122 (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: BqvNXzujlqrhf7Z7hzDTQ2YGdqzkECVVIUGWLft+c8fQqNjiLhw3IWJm0cgYx05avu6d81xiUBHihxEiUEp3XQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 mlxscore=0 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: Ci0Ie6R4xB_E12-3yjIVpqDW7BqVrGv2 X-Proofpoint-ORIG-GUID: Ci0Ie6R4xB_E12-3yjIVpqDW7BqVrGv2 Refactor xfs_reflink_end_cow_extent() into separate parts which process the CoW range and commit the transaction. This refactoring will be used in future for when it is required to commit a range of extents as a single transaction, similar to how it was done pre-commit d6f215f359637. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 73 ++++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index f8363c6b0f39..674a812ecb4f 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -790,35 +790,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 @@ -827,7 +811,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; } /* @@ -841,7 +825,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; @@ -850,14 +834,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); @@ -886,7 +870,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); } @@ -903,17 +887,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 Mar 13 17:13:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015527 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 9CD9726BD8A; Thu, 13 Mar 2025 17:13:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886036; cv=fail; b=JZGZ1IzD0emy3+WaviaBDjrI8cqQx6m2a7V42nm0NIiYjay/qQcQgi2Hb5EbGM7DhAcyoH/Qf1AAOhpFDLOZHMWdPWAgS76s6vPaMugQPhlIu0BvPTN4tclskXWXdrqJgGsz4++wBy41JpSdppBNZcm/7q7NLUzzUxwdE4bsnI0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886036; c=relaxed/simple; bh=zAA7aPZvQrvow04gOQwjctQlzwbE0Zf7NEICbqapJ4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=KUVxHPvAH31g7XSYzGUrZyZSdeEgdumGJWBADFJ47zFIZlwWq6XXDE2fpg3RgwPh01/MLjfRQj9tW01+YLBDkqIpZyOpAL2TAfWTyepk/FJ6zafRvmd9ipLrSqd4YlmkJY5SXH+dJ6YkE0uPGRy09OLVN4BEFf89iHFES+FFw4I= 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=Av7HuVwd; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=sADk6DDl; 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="Av7HuVwd"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="sADk6DDl" 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 52DGto0g031915; Thu, 13 Mar 2025 17:13:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=rSlhLfdMpFpmVdgfoOaSj5B+fiHz/24J46hcIDzKwQo=; b= Av7HuVwdAJd5NiwtnC93HKCVufaot2ijO40hxuqtZjRKehzp44a/+/Uqs5Yfit7O QjJG2Q2desMgeefNFQxE6oCBpd3E8IdvqXHVmWQhN0oZsuMKkZV4otdfcbLnLFo4 /OCeCJoT4O0An6pl2Sy7/60Bz9NX+Ut31ubJoUo2i4G7hg9nv9x59Xd9paIzghu9 K86uQNCkmKm8meKiwqqCZENAM0lhIbTDAyZAmE08ROaqlokpjZcSBfpBiMgiVdpx W1w3YTMWitE7WlXhHopz1uHp9bg4j9OCz4+b9qktGil4CyNN0ahysApBeveRKOhc K4D+EImtqOz2lWoKiFxD8A== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4hcse9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:41 +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 52DG4wmw002399; Thu, 13 Mar 2025 17:13:40 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2177.outbound.protection.outlook.com [104.47.55.177]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45atn90p3x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TxmXauSbKwWGc0aH7ReD+tGYyqwg1rRvjHz0U4EQmGm33hvFb8uIcxKgRz0t27G+iwSJp7VnsPuUoM6GXx4U7jEmZ+iP33hPB/v+g7YBFmRKp2V3bSkfz+n1AdGa9wTtXOziaGK8ynMjTLbFY3W+suR1VJocjZ5cQWEPOjJuAhMFu3DTnRre4bN30d99W4Z8Detq/LamTdz3XFKTz6fF7DNbPPN1QQ+SzW5cuyN1y/m49fZ6D2qLXJGamc8hzNLmXbOQyUJJQ0Fkn0Tr84f/tOBOJvRK9ZfBSRhuR4qaSYqKQ6doRH4IBTAweQh+Kj8DTiVmAmKI76pLl/Qb8Us3Qw== 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=rSlhLfdMpFpmVdgfoOaSj5B+fiHz/24J46hcIDzKwQo=; b=fS9QnCjTB+hMeTaRkRs3Nku2sYWTk37Ev3/xRNKiXMUOCgi/02EfzFIJH9fgcgUNpuPq/1l2+14t0gkCVw5vnsrixf6i6ECf4Cea4UM/j2YY0YNCYbOvno7sh8x8gIS1LkLZ3DSqSLTz6wwczhLvMLLqJd3VLh92eTNIoxDtoYddDfR+V3eAFtYErya9XVajT7RPCvQhfNsqxLs7y5Xq965Zh7dW0KKHTBNauoAYUjUb2zMzxU70MyfFUSGUPYvnkEYXKtBIXdV/UawP6OzxCcnFphoz67T2Jt2xjXdo7U8ovtAUrAipCm2gwIQBCJycoVFynq3Rlb56s5lXsRrLAw== 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=rSlhLfdMpFpmVdgfoOaSj5B+fiHz/24J46hcIDzKwQo=; b=sADk6DDlIuY11FAc0Ht1sOwWBK9ofMHYAc4CjBvPgYWer0/Pgn4tpGWNdRmqG1Tryg3hkTwAB+QcgxxBFORI7y5oFDFf/9Rx4Kttmy2LJn13/2Dn9N78qjLjowtkhYyo1Xpnqhv+Q4Xpg+WJ20edmSVz2+kpnJW5UBM0GGQE+1k= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:36 +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.8511.026; Thu, 13 Mar 2025 17:13:36 +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 v6 08/13] xfs: reflink CoW-based atomic write support Date: Thu, 13 Mar 2025 17:13:05 +0000 Message-Id: <20250313171310.1886394-9-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR03CA0039.namprd03.prod.outlook.com (2603:10b6:408:e7::14) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 98734852-b13c-43f2-43b8-08dd6252644e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: fLjrSnjWGLe/GniYzZAKLkfwycKJMHaN8VG5VzVVgaygLmogMWFIxjiMTxgAGaZ5HDH/70g1aFaC4PMHYd6F5b7iYlutNQ7asMkPEwB6fjoAyLmTAd3cnzCe1NbQloA8TzpcMSXu1WnQIIKbGHTADrblT8FkgL+u1AB4QFWEgD498JdwvrQJEHbosd7oTSwxK3215/TZozTXvqHhvvEt6AHJb7EDQqv8GxBXW+lUxdFihkgCAmUaTtE+mSSxm2LIL0S2VN817UG+gtta5+Xci+D/UFsKZ3uCCLgPyeQWou3PMM+CLrMroRbdmEZ8GBlWJoNYEMd9/mny8Q7hS2N6TF6ScL1IDRFHESRUN/RNvYZE9Wx06umgoGCtzz8Up4pIr7bcH+o24AQOEiFRNwzWG7UrrdnhvA0N9bL/43d2w7Kq+0N1Fqdx9tJ8PhBHKIVCUjkETDtjsMAa0szQ0tCv7dc5bsMC9PHOeEfYRCL6EMO9dVslexrZYfDc5m9ttH6y9Db1LgukR53ggmY3aXqPs7ZFL/qIyW04MBNpnm1i0F9Ppdw6r40NagDCB9kMWeR/YHgHAy6PJU2BsL+mDVRgYAYq3KuprDIMqHSJJU0PkI9Oa46QzLFhZWnhPIwQHd/CrbENsmJTQMT8eo5ghB+YjI+22fkeFGI02IsEvDxsMTgSnqHkDOninM3ajyfO94IRWMc9hge0JXnGn6OA3MAeLw4Tbz2UAQ8k+GpdnKVlq2isDK6dN1pinQiW2oyEPrqm3cCzguPHRjQsPl/fI3eFdWYDrtOX3UQ3GzHhCGwrziKfJGAuN7dYaVR3mugd03u6x3kc2sIdi1Ui02OfaKSajlYIIGUKY47OpnhVC3NiHy5xeNWpq2GQJh2zasw79DUOHs3mo2J1waV3RyOpSr9/A2+kAAb6I+RGrLAhh50e7fLtj6d6FfYcLfdAswURLrtdGpv7AhKtbZwXHglgi/j/Jm0kbreNmkHhXAJM2Hw3vEs/CPpenFH50gxjQVoyNxQBDcIhY8qjuEQ9CZdcyAZQkpFu8HsAJwPlLl809FUkmCHS6gl/3FV2cCgVSGRZ/wii3HbxbY52koJFM8TGrWkxSoYCfnqO0ATTBSwDdUH9kL5E6YTvInnzwmZVp9p/ZMoW1tP+FjTC4daSJ/40yjaBujYgWGHViG/pWf+lB//JFJN0ZPYeDXb8UJ722Qj1SFOWMLu1iEdd6EofuZ/nzjG2eoFjHP+hu0bx74F1b6Zk1XBgJj/YVLy70hYzMakprfcZwfFR67srnwnMt7XQE1iVyfquFKr+ZQY+JBuGw7EG7qhHL6SmhxWm1OCrnsMAUgBR1a28fM+I0u7OY4tYgUZVTOpNStq2oirwVdOl/QzQigqtokoa9iCc94HaCfle/LM9 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9OCQS5TIzd2nL7gva9DI8NRP+YRXZS1fpJjzVQdhlFoSnwBG/7gVfHi+1yHt5OEJAWdGLZcBOfh+mbBKP78APOxwAc8gfjjKrn7cHhIsxdpKow+dnyb6bnx5iqGtnzjFnKMF/+fXZRYtwzmfKOVlQ2UsRE/gRRynms9Xzct6456joD3DCkdq/YVmXYxxNwMO/AbWtHVg/xBY3lFGz6s7q+WtQ1Sa76K8dSacCw7GLQ+hTsCKWrpO7OTCFoWFxkYr0H7gnIdYwtVxsnaOZ+mUybgZqio7b/QEEuCaQB2QFAEA4Dh+CUdUPU/lfMXl+laaK985PVKoGexwbY/6/cPAmq6RZJLubB7ME3U/Kgn+2qGIdzIUmiB4whm7mKBPx4fVzrytAJx+84Lro5C3DxLX6ex+/Un9R9VYoNTMYJMvBSn0lxS0vxtW7i1KMmPIODzjoZp9if3u+leNdL3kYph0boYWkCHDqlWUVfVpG5lFKPjz3ORWqgKxQX4LW2mlf67tiWt/O02Fv4i2B/CxCkno45nv5H00wp/eGC+9Vq4hlgUhUaMUspDnLrVnqsbPmUCT1tujt+GTJIOkYIVZTpQ/p4fR4NF3uYWbsxJN3Vw6gR/8cJSxoAqd+0YIqEzLGSvy+MqZdC0cESaoigl4q9ShDvRHesPe1RZUUh+9ZdYXdGkz4NI4w5nd+g8g07NdojI9HtynFjfik9yTUkwsoPigesGNSHYZE3ZqKzh33Uulc2nENyWAV89EB/XrDUyrQkU3SdRqlJF/DGdC3Y6OBRL6vRCGUdHYVs4p7zqR2JaYWPNGzz+KnoC+k0m0ywX7kKTdV6uAexsBfhySswFenv1HyfML+3D8A1qATFLjPXNl1XCNCEKweIqDmthTBL1v46rosfM1H8U/E1wXC2w4SyO52RxnfnmpmCpv3ZVqIk4nWR145fTuMCsSFlKV1Esx3fZpvvsmBPQnib6SzrZjjW4hHELkC9UOeec9XFnFn7Uhz4KnEfN5fFmSc/OFEhGcfF77SD0760siV4VmW9dUOD6LOqGSALgNJ0pjzEM9LeGshqUGGpm8rsNI5OBRiP0tRJSbcxJrcN9lCgPXK/NWULmxJirdUz6mJq72Hjp2DnCiGFw7FKDWwcYptUBMVVld/0tdlDMp6U9ZrnKA/Q99wQe4UuUXmROBhsU3EDGFuWa/d3f9ABuZy6WnKcC3GPrGj6iNuewHOXFVgiWvKfwu+vcB420yY90MrNb0dxjeT6ViQeGsy3AntmLFQ/wGvd7rbFUFQP9Kmcp4GpcxJAXY1A5RCfl/n1+Viu/C3n1T4//tGyDclEYvkHwUSvuxE3E9DUpCGdHeQIwcr/6ilSTuVZKAmVEUM5g5nwMHDYOkZX4cyxoH5sxQPnAm0TO1qsGX6yN2CYO6RiFOPPLgzprP5i1jWlVjVYJwCHSeeq4R4dPwX/JfaFUAmB9PDtFyk8v47/xlDc2ikoEDTDmQBHGXr1brRiZkwQvFENJoUOzXuid5msjIKjqzb0B1XyAun2ZHcIOFaXc4AOvQxPtz/iejLO6FE6eC3SjNUXNpJoWXa5sIQIjtttxyt5MHLxVbq5Sl87xgE9br+p/XjBIyiac8gXRelg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: IXOX7ll0QnHePQgkfkZaVuIRNN7kximSU93kiW2jaXPiJYQxbokpVoKfmQxFqQP/5+RXVYMeqYPiT2zAs32mXf5tNrt7bi6TsASm8OmMOyo6oZ/XR7TBzHwF5XoUDTpeud1xBAH4IL5Jr8cS6q0hN31vqTxO1w8qKnxJAZZ7apr9Io1IlVfcUGJyntqiEqmc0V65D8Zf3MUFEA6l4LXkip7f1lJKgWCojzgyxEQ2ejMsBPPaqP6hKtERe4X9z3bME+GFL+tMXGheo5SGRuI6rafqAuPvO9WXQQ+vb1o50sQlsxhXENu3b5fgj5st52wv2zI/hOoYykQptZOVKVPaYAhm1fC/AgTsXjvqK4K3QDUu1nsSnBLJXHNoVcc4WWaVI+xaC1KUJsr5OdSYhQcyMN0cKrP0Q2vCigldCzDpfIj37pkyzVXLhDmx6g6m2390d06wNRjdinOcPHpjUSxBfoeptySVLrnYNyzvEEsmCofk/jGpIjUawxYOO9kN4Ecc/r+U2I8DLGqUxvp2//LClL2WKGiKRCa2DfqkjR+TC0qHdZj3Ki1uT+rPP0CCHX/ytCQLbJZ8ta9jXbRm5uwXLExDHRRKljRkkc8sWxkUf8U= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 98734852-b13c-43f2-43b8-08dd6252644e X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:36.7718 (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: hDC1n0jF4rT5X2lqF8ielDkTqKWdMyC4VncUR5Tuxw4zUHUnS6TIY380FBVv49oxmg7XS7YbRtN2iJNS5iQ1Ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 mlxscore=0 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: np4HNy4fquf37NCZ_XgmAkdoDZ2YqgTB X-Proofpoint-ORIG-GUID: np4HNy4fquf37NCZ_XgmAkdoDZ2YqgTB Add reflink support for CoW-based atomic writes. A new flag - XFS_REFLINK_FORCE_COW - is added to indicate that a COW fork extent mapping must be returned from xfs_reflink_allocate_cow(). For atomic writes, the idea is that first a CoW fork staging extent is allocated and then the data is written to the new extent before finally atomically the mapping is updated. The semantics are that if XFS_REFLINK_FORCE_COW is set, we will be passed a CoW fork extent mapping for no error returned. If XFS_REFLINK_FORCE_COW is set and we find a real extent in the COW fork, then continue to return that directly, as this would this belong to either a. the same CoW fork extent which the atomic write previously allocated. b. a pre-existing real cow extent which is unwritten A atomic write cow fork extent should not be shared with other inodes, and will only exist for the lifetime of the atomic write. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_reflink.c | 18 ++++++++++++++++-- fs/xfs/xfs_reflink.h | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 674a812ecb4f..690b1eefeb0e 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -466,7 +466,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 && !(flags & XFS_REFLINK_FORCE_COW))) goto out_trans_cancel; if (found) { @@ -582,9 +582,23 @@ xfs_reflink_allocate_cow( } error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); - if (error || !*shared) + if (error) return error; + /* + * For no shared data extent, return only as long as + * XFS_REFLINK_FORCE_COW is not set. + * + * For XFS_REFLINK_FORCE_COW set, we always return a COW fork extent + * mapping. That would be from either a previously allocated unwritten + * COW fork extent, or else a new COW fork extent needs to be + * allocated. A previously allocated unwritten COW fork extent could be + * from an earlier call with XFS_REFLINK_FORCE_COW set or from a + * earlier normal unshare of a data extent. + */ + if (!*shared && !(flags & XFS_REFLINK_FORCE_COW)) + return 0; + /* CoW fork has a real extent */ if (found) return xfs_reflink_convert_unwritten(ip, imap, cmap, diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index 18f9624017cd..f4115836064b 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -11,6 +11,8 @@ */ /* convert unwritten extents now */ #define XFS_REFLINK_CONVERT_UNWRITTEN (1u << 0) +/* force a new COW mapping to be allocated */ +#define XFS_REFLINK_FORCE_COW (1u << 1) /* * Check whether it is safe to free COW fork blocks from an inode. It is unsafe From patchwork Thu Mar 13 17:13:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015526 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 3534B26B968; Thu, 13 Mar 2025 17:13:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886034; cv=fail; b=nyviWKxUIHGRJOCrqdwJIGtcq9ic7r0QY+civ0FXX9YY7PN7qDO1zWEr8n+R6iodRp/mNfLbRGvW9t7XgVF8NblbVi9o4Grklm8Iwhe31CemRRCLxVVPZD13m1aA71Z5cjVbQGy0Xsaipv6P/cbnxqUvIAL4E2PE0cwc2wo6hhw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886034; c=relaxed/simple; bh=4JcV0Is9OPw4R6V9LnI3FA54PNs+HmA0VPXXPXMq4VQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=kRsLRVaqwQAa+zIZTVw4Elc4mJP0AyemN8wPjSVFC8d598ELA4p7xI8O4iRzBBM/KfW/TXzWTufhHmX7bHcO/Jm6zOlEsIHrDkdXDuCKvH2FAYp3Sig4uxoI4ytd3DDkCXTPtsVhEqoPmcEzWdP2lDOWBRMiEb3q+P+SK9NRknw= 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=Hb0sbTrk; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=r3nOUr+b; 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="Hb0sbTrk"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="r3nOUr+b" 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 52DGtmQv013888; Thu, 13 Mar 2025 17:13:43 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=F6lr4GwsTZpWyMGKDfhM+tFz2CnnWNsm8aH2kJXDOjY=; b= Hb0sbTrkl44IQ1v7pClpjOX9ouM3aC32hO8Npl1wSF05P3zfg5JVvbSy/aPgds42 lk+ltRl1zdD0KNxIAxM9OCwhso5H1RK5w9zl1jzS6Tr7PZrOXPseHipfa68qa/i8 +uCS55EMKK0liImQu4gt7hSsO8V/HqtdJFSQ/eRH22IqZ1mX+F/tqGOcWrKtdtRm ACXWYEyw7h+Ypz9LM+QIXccEPlqSnnX2B8tK2SJ4mv5zZ3kNI41aAvYKQbNuUXFb gr4ceOawU95d3qNAtbLHWQoWguGXIY+U+sY1ebzpm04JYaa+hPqEMSBpZzjtxRMj nVmzLHoNf0u0nmLmmdPzZQ== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au6vmrcw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:43 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGeUsN019470; Thu, 13 Mar 2025 17:13:42 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2049.outbound.protection.outlook.com [104.47.73.49]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn26mrx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ftaDpXS3pr8xqvSAk67D82kRtKm2ggBnMsUwEzdnN0PwANjiUs6DNcNqkMJUYcUsUySUDhvU2YpnOa1PnWum74JMK9WcfdxL0xOtG3ghZeSqkmJu9Q3n/9yJODKL4LeTtrQ15aZT6C3tqGD4SIiYpG8R80itVjd/f+E/bNdtEapP2VGr61UROtXX+2DkMIrs/ofOwbOs73hCwRT6eFissdWeYxDhrtCIyoNyyw/zjv7sBAOxtqkrmph5Uzq9N64L/4nP5iILlI02SUv/19ueb6pd6VnHBoqYT17fxjtBwUG0y4eYUyJOXJghZmWKuJQc5PhT6xGeX+G8TlyIyda4kA== 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=F6lr4GwsTZpWyMGKDfhM+tFz2CnnWNsm8aH2kJXDOjY=; b=XbC7+QGRdUA4FkYe0mSS4oGqMzdg46o4/R5L2A82xFvscLN6VECkUrs6sFQV9vmQCA8D7/LMzO0BiS5Pk8qoxihtVq223SArAxUfD98pO2rDZaFNO9wnJmWRBLutHXRvhl/O1P0SUw6P4Q39Od1yUWqnFjcxzMeMyWpUJzQT05CQIvdLa//xgnr3dQDayl5NT++uUqjDocJAo5zkSw6uNp8lygIz/48lxNqBhJ3ba/OBGKIVWl0F+ye2g2hwLdkQQ/O1KeL+J2SlbGZOD4xCqIPImt8SO2wQmN0KueOaieLqzC2Bes9PVu0Q78qHoQgp3naS/BkMf61LUnQtNchrpw== 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=F6lr4GwsTZpWyMGKDfhM+tFz2CnnWNsm8aH2kJXDOjY=; b=r3nOUr+bAFN6ks8ht1YWeRh7hQh4zL9e5Ud21Z8ELIPkyluHjKwWbl8va+wAOw8BngC0f/laY00yEaM7zkiBzpbfQ5W6drZMZ4TbMUUc1dXVdsBB6oMFVcfTaBErqKIuYz9UrsSjqUt992fROzhm8DN6ygCmlCZQKF3fvSB4+pA= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:38 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8511.026; Thu, 13 Mar 2025 17:13:38 +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 v6 09/13] xfs: add XFS_REFLINK_ALLOC_EXTSZALIGN Date: Thu, 13 Mar 2025 17:13:06 +0000 Message-Id: <20250313171310.1886394-10-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR03CA0054.namprd03.prod.outlook.com (2603:10b6:408:e7::29) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fb6e064-81c1-4adc-a20a-08dd62526524 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: GzvBYgjqgajvwYFD7tU+QHxUTBsi2a5F1uSNZka3KmnmOndIaGaUykGA3LAJwKIHFydGqfmP/QtRvDJrzAx8bHyfErwEY6oSfp3HUkGJa827M6yi1XTDg1LJfGCjuz+6ny1sZlIXdL1luWt9dgk4zi1FS6XAXBsZxBzi1Do1wQIvCGmwa695fQyZmdes9HEiDwrEwAbqSE4cvGv+GC12rM4hkH2m17h3oRTozX3Zjg90zjO/BLM9LSU7NdDlaBb4vZ3238hnEA3tH2PzNEaSzTd847NDcbOhpaqOhVKwqTnNzB0E7bpfLQX57rkOYdovvp9wO7PAmhaYM8VSmM2/XL6Fv9KVdSDWVb9/yojBk82Nz1teFceCy222lA5yIuA5krfN6Bq0ae8izwtFY8DRgQ7TrxqstrUaE0greBKLTzpbXdtLlhNcBpcdtNuJK/cWOB74SvnUHto5WXbjQn/RPsj6YmLuZjn1KTERNLFPLf+XMqbzZs6OzfyU4wWMCoBi5aqS/IlKmNpjJVPbDPvuMERDDzi/4GknArJrnvYQhjyU1zXvoH/mj7qO4xTBBhMPNn+An/0ZulNAiSHGLGG3eJKcs0oipp8cVy0dZvcTgiXRUq1yJj5PR2nFnrLSLRSYkHbYmfI1iyA9fvljOd5zkWUDew9o2hR2iHvUgV0f6cuPcOaUNK55hQSpXHq5k68u8skorbnkabm31vE7UQO1HZsRnedpCqVkDuWdV5zQdIdvWwjAA4miNkuRUVKJUdysECNQR2gpXSh1gf3uavnA0gruPKqwEH3II8xO5BjwlBZ7RMW6fdRS7CuaSJh25A3cPXzTfLJ0Vd3gF3Eu1b2P4vtV5oaE2gv30R9jvmebgUg98JxdMGhg4BM0sI95FNcB8DeSMNoAicTUwN24hN//Qzxjt3Jk05tU7kplHIW0iWe5S3HG6aoR7d/RBCrA5qGmA46CO8/dgHRDbNZZrBdmlCBU0hN+Hoq9dXihmfBUKkg3aRwX106DDo7wsI3cOQedhu+8wJ3pukXk9Rp/l+1YSL8pTF21uD5X6uu0T0fbs5pXLsaHqmohUBO7qXdNVnloTSKKUKzVlWn6eZ9g9EBg/q0+XrwuIhoSfY2p7ZaihBLXSQMxnbo2UmlfaKWSLQD++JA7q+55ErfkYwaLkKC+471lKgRNO0/CpcjQzaDa9ApUbjXbsOWCuGgSnDK3Czouc6JBhKqEd91NjGqf+4EUraHaCoaqwTcQnxTY2n/c/oVMaUt3G5XFpGTByND5jQ+7Jfde/AfwXryy6N1MeftAV9ap4BfHXrGM6D+Bj1DgeofaR6YTymU6sNv+p9XE4kKlPBo5qZzuzlC/LfDuS2b2SiPUgS1+CfArhjLu5P/htPrJNSiYXwiKIdBBsAzkY1SX X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PfLWpcJBwxdwh/RnXYlIp9kaL5GRtv3ruNNvn9/DLGMhIMH53CUxwEBCRhPVrW4qC/xlMb7NqmywhWZNhG8DXFt7/LRPQdKzSjoGadpZOn2WIu3c0goVC5zSX3pS3sMSdPIDF5U1s62YesWmCriXFYgT0IFw8WQrnMVUZf8tAjLzs0ZJDqfm/af3jy7l2h/KueELzFDl5VGRswddhb7mvFHf4ENHchiZpCQ89f7zacMtWH0uEDK/3YcpAfbGjlKiVBAFmJKYlz+WcRwIG5QzmaSnHMbp2o609mrAGx5vm4KcZPg34lvQ8Oriyvuw7WW0O6QVVqXDLLdOEHDeFY+Y/p6cS6n/o4ghGVi2B1bj7ukTpuAv2S89+i2vux899DZRvaIq3GoRcJppoRgtIxFtP98OU0fL8EkwvQumkjrhHa2bNSRiofYZP2WBUPNzi4tepI7bs68/o7UYOiiqIj49M9vpJGcRb/C45O10PZSbb7dA4/s9Wd/M3FruPKRrqbZDskOR1DNZC/ac1sNs6o6MbuPGjU95O6CT25Bw+zuYZtVupo1kHxEmlBd48AKJQ8Wksayw5V8erwOAP5Jghy3MWCA/T/uIed/SNLgkZMjqfZ8KbiyIzMlCliVSURPQ4q0gq0i3M40Ugscjwv+2v//Vnr1pztM0NHs3krAQF13MmldlJv/YoTohPV0nBNPNMuu4wX/lI4tWg/VGKC74wq2UwAikQKrpyva52RsHol5mfNM4ysyqaX0m8oZhkhLcAd74EhWEfWynk2oHv9oI3QQkOnz4kJCp3KyG+vhEMY31kuhifIpp523m7WTLSe6KizdGWVWeFQF6dyIn/a7uNrTFDhNK+8TLsBV5YyQKUXomcoOe+f3u6UlbvPzcUxtbAdbOnA9y7tmgGZ4eP0hVSO22/x59qSlIsnetTpHPlFLqp+yKyiQdzZqepgKXmlySIZQn5xrOg4Qpy4gx6EAcp/G0Z2zOongAZPK8HriuuGFSaN3ushWCBdMF6sfmgZsN+foWH1x3nDJaQuizprL2SsFTb4XVocDzL1CQEAXPaoSG0caaGEgw0mYKuvt9DdRExYpk3UOdxg5HHWmjc6bEtN5N0S3FhbYb7V3PBhcGKr6fJVED8TM776BjbCrnxAarPVSZ/OSwXrc1jODTKCAPXOPZoUGyxlW0PxrcbDmES11HU5GOBn6gXWqN9luZ7fRqPup8rTZIOcuI3oQQN9v6c+c4pBE+RngOzLKDNm4y/y4dYJQXHv4B59skOPEX/srjSBvU4GT9v6Xzv+vcvHqg8m1hIOWQo/bQw5RZbNlVL7Mu79EEqGwf6RUHW9Q/g14lmwcOF2SqUac6EfY6ouUIc4lpXuWXJ1Fc3RIdwDq7oNNisyP6F1MWmDDsJdOCpeH6HEB3IXX9FU6TzBauczzuD5zR2XA6AQ2RsbWVNlYy8NipJcmb1CFLELjwN2Z2HMLB4HgPEcHWJ1ToEBSjj/1y19+gtGtFoY530fLEHrGdfjT3z2BQfl5niGANFDqLw2ipRQnqvx/yZ5oL04l5CPfaW3ldeb1BvL00959WGMp4vDe3H6Br70ZvR3A7Vh2cEce37X+8m+2G/7+KFyTzjBiY5PmtHA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: jggHtS9RWTXL5NjM4FhJ8N07SV8phD4Hotunb1a2z0jHp7oRTSyrmWxoXp+baE1Ujr6l/TKWHtSG8WzzoXLHDs+ixiVLlfup8SujkemoDooexL8YqccZ/RddRnPx+miq+XrS8R3jJS0qqGkkYxKdHtt6rQJM8tS1s+ax/EYFxPiOXcVPM09UjHtNmY5n910OWD7cobIPLfpp6Ubg4GStGWT+sSYnTLST6vvsGi5LKFac/y8kZZeMzqz5HSfExenSbgf8rYt20UKvV+odFN1dZZApPkiWMyrGvYVYm5Tw+pGoqS6UdanYRIFilzpy0zbv7rBdAF9e2fp8j+o//akEbNsVyVl1N/oTHz729utxnKKQwqbLAnaLeBa0ksK4mhBGuqREHW9e1uFOXv7npVbLvTqNpo5+fS9W12GblzkAJfYsgi4SeNnlm5C/4jw6Q7HW+SxHff4to/drL/1EtPUhDkGktCglyvl8RQ+Lz+P+tvEmuavdkVyDls12/X4dlE2y/nUOVwclfbjzyn1km14H9VDhtsI9wZWHtNtbRlsFnf3GUQ1MDbZIS0bK3/jq7abuX+pKedT5QUtBmfHPPW8uyMgBmATSJ4nJbXeEPEwkiWs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fb6e064-81c1-4adc-a20a-08dd62526524 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:38.1949 (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: dZf3nf/Ocnvb7xVRSNcYaS6obPNTFHW+XEmOQjpNNl1dF3ejt+sZRRVe8YEB7dak1ZFi6uzyJYIDoIK+FZQ/EQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: NRzhyYNF7Uw2F8XuV2Aa7OrbPJUW71Ts X-Proofpoint-ORIG-GUID: NRzhyYNF7Uw2F8XuV2Aa7OrbPJUW71Ts Add a flag for the xfs_reflink_allocate_cow() API to allow the caller indirectly set XFS_BMAPI_EXTSZALIGN. Signed-off-by: John Garry Reviewed-by: "Darrick J. Wong" --- fs/xfs/xfs_reflink.c | 8 ++++++-- fs/xfs/xfs_reflink.h | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 690b1eefeb0e..9a419af89949 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -444,6 +444,11 @@ xfs_reflink_fill_cow_hole( int nimaps; int error; bool found; + uint32_t bmapi_flags = XFS_BMAPI_COWFORK | + XFS_BMAPI_PREALLOC; + + if (flags & XFS_REFLINK_ALLOC_EXTSZALIGN) + bmapi_flags |= XFS_BMAPI_EXTSZALIGN; resaligned = xfs_aligned_fsb_count(imap->br_startoff, imap->br_blockcount, xfs_get_cowextsz_hint(ip)); @@ -477,8 +482,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; diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index f4115836064b..0ab1857074e5 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -13,6 +13,8 @@ #define XFS_REFLINK_CONVERT_UNWRITTEN (1u << 0) /* force a new COW mapping to be allocated */ #define XFS_REFLINK_FORCE_COW (1u << 1) +/* request block allocations aligned to extszhint */ +#define XFS_REFLINK_ALLOC_EXTSZALIGN (1u << 2) /* * Check whether it is safe to free COW fork blocks from an inode. It is unsafe From patchwork Thu Mar 13 17:13:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015529 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 EECDF26D5C9; Thu, 13 Mar 2025 17:13:56 +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=1741886039; cv=fail; b=mmrb2cJUemie6dvTeQuwGeIPHdyD6OXhTYzwzLZZdB48EyLcjtCzIQEmCIQ1HyodgIBeJwcIEa27R2DbMzcSQ1PbiZbLjBexwYH56poa+e6tnLrHleKnRN/9gQlNM8XmZod2xRK/QSbuSev3yhQ65Nn8XyR9RZX+YpNM/SoJtec= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886039; c=relaxed/simple; bh=+KVaI7R45JHr1Awhb5rUwI2B4yXkO0eKC5gAZxHvOtw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=K1sg+NKdsqoTfvBWhs3Q2VMwYL1E6tCcKnH4s5zHxK3eXRS6g8L3vk+zNh1iLxue74Lamu4NheOXDZUMknMmOCX2txORl48YEEbrYnKZdIZ+8NqzHpzYfw5NZubqZZTPJ41GRFg8E2qVtqy3/TRRDRfW4zwNNLyCTPUTmr9KoAE= 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=hGzEvgyf; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=YI8nZR7W; 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="hGzEvgyf"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="YI8nZR7W" 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 52DGtuQU020758; Thu, 13 Mar 2025 17:13:44 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=JFF+gnQWFjR2gRmrJdJ4QHOHJ63OdAqkRZKoLGLEFdE=; b= hGzEvgyfl+kNvruEDbAU/e6tHwDF5FmSy17PtbJg45LwkOgE+73zmWFfSzoROiW9 Z/UqmL62mbbXoeqNX8yyOKWauTa0xMYcxU7+KQIy5tQVv6m5MWZp5tWsALUdDnR2 2rR21btDyyktFdt6AUvTE8pgvdj27/KuhNLS9ni8M0HztEG6YMnAboNnJjQy9BlX wVARvIqB07aN3A0N5UXguUXSMflnR1yL7T3JXdiUGuT8ViZB2yUIkzDx8q5Vr7Gm DhF95PkgE3WQ8+cX2PWfuYnoJQQ0rC2UdokcEH1O9wYWjW4Pd5WshRrGLf+rVSTQ jzrgt04wUtiMD9ehEOKekA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dvpxd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:43 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGB0pg012177; Thu, 13 Mar 2025 17:13:42 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2169.outbound.protection.outlook.com [104.47.56.169]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45atn2yrt1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gH5XDvfUWY8QeXdRE5KEmgSyEolGSjdtvnglFj+kFj00W3Oy/zT+hCpJQUZXUDjat0gW403bBwag33jZlkwI+/7yobRcMT7o7afrXvAFDEwWNVwm/askyxtwsTehbUWYb5UGtGfaOuaQuJfyac0rqWsklPY+1ad4FWk2NHhw+tGoaYQb7gZHbnEqaYwU2Ozua8miwXa6qOSUzbLOAhcrU+R/Kp3xk/gM3gwsVXaJhbdGt4EpObEKW8rtnUrn3ikCyohxF2w12o/OsMEqHWOeb6P3BoKotfmtvUQ9LM+OUnwnxVuCeuBTQxYND6YDnVPFWDMHUBrCRfPpy1BE0WNl6Q== 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=JFF+gnQWFjR2gRmrJdJ4QHOHJ63OdAqkRZKoLGLEFdE=; b=hzstF+5oaqkxJBg9h11V4KFMMLEZd/bLEwZ2zjepH8QsJM5yPfAOkE8Jcvtk/pjoAQhJXXHYUxxWU8uZY2RjLE0WEVcWE/9eNeiP0wKVaA8KW//4nMTDJAbLH7dhCSQevwc8LPTHNaQtBa1IC4oHRcCRQvYOE60TfIrIsKrfPXSgV3Da9Z7UyVixditTCLZLbDXUOUN44nESpH0NA263xTWfsOXng5wlfoA7JtEBxdxah2xoMMqBMeQY4eFsIovH4rB9iVRCj+zohj7vDPetOTeSv8oqbWJyj+F6xechn9FXAwqy/+Q+W9/488W71bJzWrCFAWoxUq5Tjxqmm3xgyg== 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=JFF+gnQWFjR2gRmrJdJ4QHOHJ63OdAqkRZKoLGLEFdE=; b=YI8nZR7WavvV/IHwwRV2eKVh6JinnohkI0OHeFD8thTYP7wwjc3fK7SAboQW7VRy9kcaLNbyw0YpCPwCVkrgmOlSaqJleAvsnCkLXFufIjiDLS3fAwWl4sXPxmCtsrtTpe8iZx34QcBsLD5oCdp2QtNS4EaqbsYcEnCy5FQ7PwA= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by SA1PR10MB7662.namprd10.prod.outlook.com (2603:10b6:806:386::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:39 +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.8511.026; Thu, 13 Mar 2025 17:13:39 +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 v6 10/13] xfs: iomap COW-based atomic write support Date: Thu, 13 Mar 2025 17:13:07 +0000 Message-Id: <20250313171310.1886394-11-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: MN0PR04CA0030.namprd04.prod.outlook.com (2603:10b6:208:52d::29) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|SA1PR10MB7662:EE_ X-MS-Office365-Filtering-Correlation-Id: a8d23676-a468-4d6d-79a5-08dd625265ec X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024; X-Microsoft-Antispam-Message-Info: cnHIXldKg6Dg2v1IW9fBbNLZ8VqG/gThhjldaH6EyhkSsZu7w6VwiCz1qq9RZfBg2+wEkLmJgIRzlCC2wr7BSbmA+ONtXaE132CUjlC6gS8/oYIbkNf6lp4xkcBe3miRkUtLHyeiEaOuF70xmp5yC88mVbnhNdVTyq9uxqt4S+2B7KbGVH0PZ756veW534v5/AFWBwgrTMLAS48K4zEYAc20kUoudrB1g1iL4Lm9tbgk+eyhjlN7/IWuyNFkjwJMtlbSxVHH1fJmLULT+fDlYV1ZjvDSsP3icXI3pl2DOmxk4Z6BKx6fyQxkbFGwXsvRibBGMSpWjoazktCg9xwqxYf9VbtyWGdLUOA2pnjrCBdH9SoIWwUZinuRtV+xa8ARnk/vKCjCNfJNSqageWMD4AV9FhIZKxyMRiUSxAsAxkWjPVNOV64ueLf61z92rfRgJ/b2Mpvui5nZP4P590jUvBRXFSQ91tDlw5WNCkL0xjJfDR+Ei50ex4ImSXb3EknqpiQEvlw2gXhxCzuKaomeKZ+0TdBb5T1UjN4Qh2NUsGAJlNhGBngWqliyrEWO072g6/LHBft8QF5PoMVLuEMExHsbZyotEfn6H2gZtAM1Q9HDQ/Jh5BWRfFYHnXtwoIgS4074XcNimkJUwPF99mdX1uM6ZgMWBBsz2ymoxOhYyo0tu6AIVY/v4AZ4pv7bUBxgClBzXkDN3UvalB46MGUdljvr4x/7KhZ5pL/67YK/z9NyOwNoRJnEDeRRP7SdglECO+MMc4CcInIml5LMsZnQDpqK/gEWsstrb/yqHz+Y0AkdaADkgfZp0pJLP5hPJlohfCblOYnWxARgVHOAC5z6IPz0/IOMOaKjrK58K/XMe4X44vozNVGIHDESLfU1igHgLE2xb/zIM0v6kRFA2X8sS7/QqNQJOyr5fusYGaCaKeKzaNyvMZCvPAgSMd2HcZvGUjjENXj31UzFmR0I96mT7rSluP2iMxCJfPuOHQctMyyY4wWLPE9HDsAOtk0FUbc0btJru5OB2KZcqqxqezTMezeAz1IxmGRBE+fIVmAs8wgUi2dpCuWj9N/1WeZBY/HstCxG7pHeT2AYELH9jEHCf0f5jS/OohNotRT05Kb+6vWaiPT/DtrEsEMZynPOaaC3vjD/yyeyL7jb6Cepo9lNEaLh8K9wptUwwLrbKSYWugdbJCkwgUxaDxwKjYYmfRwkMnRvFJDO636Ez8ySS+04SOyGwBCN3VmjPb4R1okvuwCXl+KuHqiNsMTZFrudlzNDoSAk1huvG+tCmzGDgLM+XflAxnZh9HGSv7hR5rShbsN2PEmZz53Zt0E512FT2Crv2A3x1yEFVLNquSE0OCzyId78Zd5Wj5DVn5EEIqXmHXVrRWfSKW3Ab/rwtj6P9cIK X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7p/D4q5lpIjwMMKK9ENWs5RfLnYzx1+ElF/20B2ok21IAI/iEVcr42ZHdv8ODZosWvfaIxVl+BXoXRyyfGjGQsl2Ibx1h9Bx8fHlH0HWv09s672YdoZkuLj4XZTEWwI5NZ7IhvrCegIuakW+VeiY6e2ldnRMtUdrG12zcj6Gm35uFOybN+kFwSng7wtaWvp+0yVYXw43cik3z/2ukTmfLXr14qE8fH+3Dn/TtQNRMRKCBybffOT0f7GpjkDbzbOoAMlMrB1bIY8QiaFmjfO+9J4KLrlFJWM3ULCJveAl4ijZ/Hl1zUB/MfFWyJNSqkm8WBkdiQPQIH/PFURp1orNPicXwJxGVnqFL7U3NBYdWOQ/uOLB/4ToKwMYp+I3qJFvzxOXgJQQS+En4QgIrywSX97xhKPkiYljZKpy/kCtPCC7Hdi0DVJJvEB06y1XXCkcLUR5tQCZ9MpbSCsTuGjBpRiBmfnHfcD7hCNrGJUxdfgpJweyzt2ryTt3ayqwhiis89plVA7wG2nqXzS4M8qThnvRhJLA1+vGBdHIdnnp59w2Hb2iw1boROB3LFrDwkwBoy3WGycH+CwsGT8HBKo9L3Oprpjh0Yu6lBj2wSQIlKEI5eg0Arr8qV8OpNTRNJThanBTC9NOlHImbDeu1b1RjxJLLVu4KzVdj9if8FIzyJqj1dQ8CakMRyY1qH7SgizPecPg5zDJYvweGuUpN1afieFjg6nHKQJPnEUQA+Xxb3rPkhuSMCRZdI9yH1Lu+S50mYeuVS4G16RBB+4a8VJj51U6U20DrJzrqJikrjKzAG86Axi5ZFf3wmKKSnUexCFkg50vkXx4E2pGE7x98jnMupKbKes0LUmGUBSiP6oboQ0fLNQhy+kU35a0eHuC736jLqdc9sBx5Frutw57V4Kg+R9zRZ8v4xL56jZFDCXtC9B1OXrZjFgdI8Fu9vf6i6BCVqa1aX6IaEh/AvJJn7LrQcqCRTAAV+29VQ2JLxm1uob9biYbAwc0JlmUfwfjTuX2LQUtVgjqBQFjWzssXW78kXE1OlS8KjMjeDwq05bDHpaAb2f3Bmr/vVdrrdiz3xoYEPSPsquq5ywrxq+OCaJ1K6dnf72F6xynh9IQ3RvL6sCb1reDEFzjUdxoU6KsvcKSi41bPexCciK91n0NH0XP3niL4eVBgUpFLKZl2nsWbG12cSpE/B4jyKo2ll3fYZd5Ni9UPjmze0ayDXLWYrmvCGvc/m/OwB/uJslIPbFnayARTH5Q+XgeFErOn19nMAsznHeWCiB5U1A67hJXv2bM9sFqFKzDPwuNDW+80WHGjS2We8PHJbCjL2hJ3zWwFt+iSbZ2vpozLhQYhADbpxPcqubuUiN8TtG8hQSlwcF0AHmRDrslChaoXz0HwSvNsKu4unaVV899xh/xp1lKp2XFYhM8GdbeVSl6NCHiLF8p8cCTgY2RzBVrIK3urid1Kye/G3tHZZ6WAGiXeyq9kNTRwveEyo8VgGK4LSSFGks5vzWp3d/8vMjkwpITrlzKXw6sY0UBZnOESRJecm1SqwBFp+wetELTiKD9L3w0aTnljADes4nJwog6Bo74zjJOGHAaoQXTIPJGA+CRVDrPleWIGw== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: gC0xcD3nq/fSnTkng4DrA4LZ26xJ0qD1cuZ1zCUd3UPOlZDFiGP2eNSPDOP4MlOPVAvSKEHOuoy6RYj9ZdHwK3i1ZJiKJWHvSXUuTuYRZv6cja6TPo+GG2DfFlavlp9hBbuxUW1I5Wc8Hvhl5Dujj6LvENhsr1Va2IGwCBW38sNpDd/x8SQLE5Cv/JCoeALNEUhZrWkdSUHZVNZDEYUZjSYi5J6jcr8MaD0xLdGBp+TYujskQ9sRP9KvDUn43tUj0V1F7XiZ/VMwqekfwdSsG73S6Iy5gVO0DDTdlCf5BCxJ6Rxh2n+iNvLF3h8gp/dykT9XvGHWo+QoK3XVUV4j3vJ57AQqMm77HiEh7PDjpcMxQoo/z7VKJNtXkW/ZvLK7FRZSlOx4tuSRDyHuD5EdsrdPYOa+tbHNKULOxQavV3BKAGTd5RyeVvoNMcDcDPFckLZ5OKN9PRtGIuFnY44p+WSNgBi//gnUlQF+YcB3LZzTcVp7yQSncn3WM22FSEZIMYRyxX4iXs6R44VT/f6qPxYce3URFCyaQUxUJe807P8yNR0u/nJwjzrxsr0GfocwUdQxvrO90saw5NJf0AgSSOlrwAs3QQZfhgGhxtHJ1bE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8d23676-a468-4d6d-79a5-08dd625265ec X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:39.4968 (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: P0ItJx09g7WLZOCOEbHtAmkiMSxpJAY26r6QvhWHnL2vf1PjEZQ4A+c9TEijUjIWDgnAV61SCsSOYKj8VYFBlQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7662 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: ooipXPGxT44QCkTY6RdLGMl-mvhOXyCM X-Proofpoint-ORIG-GUID: ooipXPGxT44QCkTY6RdLGMl-mvhOXyCM In cases of an atomic write covering misaligned or discontiguous disk blocks, we will use a CoW-based method to issue the atomic write. So, for that case, return -EAGAIN to request that the write be issued in CoW atomic write mode. The dio write path should detect this, similar to how misaligned regular DIO writes are handled. For normal REQ_ATOMIC-based mode, when the range which we are atomic writing to covers a shared data extent, try to allocate a new CoW fork. However, if we find that what we allocated does not meet atomic write requirements in terms of length and alignment, then fallback on the CoW-based mode for the atomic write. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_iomap.c | 131 ++++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_iomap.h | 1 + 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 8196e66b099b..88d86cabb8a1 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -798,6 +798,23 @@ imap_spans_range( return true; } +static bool +xfs_bmap_valid_for_atomic_write( + struct xfs_bmbt_irec *imap, + xfs_fileoff_t offset_fsb, + xfs_fileoff_t end_fsb) +{ + /* Misaligned start block wrt size */ + if (!IS_ALIGNED(imap->br_startblock, imap->br_blockcount)) + return false; + + /* Discontiguous extents */ + if (!imap_spans_range(imap, offset_fsb, end_fsb)) + return false; + + return true; +} + static int xfs_direct_write_iomap_begin( struct inode *inode, @@ -812,10 +829,12 @@ xfs_direct_write_iomap_begin( struct xfs_bmbt_irec imap, cmap; xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + xfs_fileoff_t orig_end_fsb = end_fsb; int nimaps = 1, error = 0; unsigned int reflink_flags = 0; bool shared = false; u16 iomap_flags = 0; + bool needs_alloc; unsigned int lockmode; u64 seq; @@ -877,13 +896,44 @@ xfs_direct_write_iomap_begin( &lockmode, reflink_flags); if (error) goto out_unlock; - if (shared) + if (shared) { + /* + * Since we got a CoW fork extent mapping, ensure that + * the mapping is actually suitable for an + * REQ_ATOMIC-based atomic write, i.e. properly aligned + * and covers the full range of the write. Otherwise, + * we need to use the COW-based atomic write mode. + */ + if ((flags & IOMAP_ATOMIC) && + !xfs_bmap_valid_for_atomic_write(&cmap, + offset_fsb, end_fsb)) { + error = -EAGAIN; + goto out_unlock; + } goto out_found_cow; + } end_fsb = imap.br_startoff + imap.br_blockcount; length = XFS_FSB_TO_B(mp, end_fsb) - offset; } - if (imap_needs_alloc(inode, flags, &imap, nimaps)) + needs_alloc = imap_needs_alloc(inode, flags, &imap, nimaps); + + if (flags & IOMAP_ATOMIC) { + error = -EAGAIN; + /* + * If we allocate less than what is required for the write + * then we may end up with multiple mappings, which means that + * REQ_ATOMIC-based cannot be used, so avoid this possibility. + */ + if (needs_alloc && orig_end_fsb - offset_fsb > 1) + goto out_unlock; + + if (!xfs_bmap_valid_for_atomic_write(&imap, offset_fsb, + orig_end_fsb)) + goto out_unlock; + } + + if (needs_alloc) goto allocate_blocks; /* @@ -1024,6 +1074,83 @@ const struct iomap_ops xfs_zoned_direct_write_iomap_ops = { }; #endif /* CONFIG_XFS_RT */ +static int +xfs_atomic_write_cow_iomap_begin( + struct inode *inode, + loff_t offset, + loff_t length, + unsigned flags, + struct iomap *iomap, + struct iomap *srcmap) +{ + ASSERT(flags & IOMAP_WRITE); + ASSERT(flags & IOMAP_DIRECT); + + struct xfs_inode *ip = XFS_I(inode); + struct xfs_mount *mp = ip->i_mount; + struct xfs_bmbt_irec imap, cmap; + xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); + xfs_fileoff_t end_fsb = xfs_iomap_end_fsb(mp, offset, length); + int nimaps = 1, error; + bool shared = false; + unsigned int lockmode = XFS_ILOCK_EXCL; + u64 seq; + + if (xfs_is_shutdown(mp)) + return -EIO; + + if (!xfs_has_reflink(mp)) + return -EINVAL; + + error = xfs_ilock_for_iomap(ip, flags, &lockmode); + if (error) + return error; + + error = xfs_bmapi_read(ip, offset_fsb, end_fsb - offset_fsb, &imap, + &nimaps, 0); + if (error) + goto out_unlock; + + /* + * Use XFS_REFLINK_ALLOC_EXTSZALIGN to hint at aligning new extents + * according to extszhint, such that there will be a greater chance + * that future atomic writes to that same range will be aligned (and + * don't require this COW-based method). + */ + error = xfs_reflink_allocate_cow(ip, &imap, &cmap, &shared, + &lockmode, XFS_REFLINK_CONVERT_UNWRITTEN | + XFS_REFLINK_FORCE_COW | XFS_REFLINK_ALLOC_EXTSZALIGN); + /* + * Don't check @shared. For atomic writes, we should error when + * we don't get a COW fork extent mapping. + */ + if (error) + goto out_unlock; + + end_fsb = imap.br_startoff + imap.br_blockcount; + + length = XFS_FSB_TO_B(mp, cmap.br_startoff + cmap.br_blockcount); + trace_xfs_iomap_found(ip, offset, length - offset, XFS_COW_FORK, &cmap); + if (imap.br_startblock != HOLESTARTBLOCK) { + seq = xfs_iomap_inode_sequence(ip, 0); + error = xfs_bmbt_to_iomap(ip, srcmap, &imap, flags, 0, seq); + if (error) + goto out_unlock; + } + seq = xfs_iomap_inode_sequence(ip, IOMAP_F_SHARED); + xfs_iunlock(ip, lockmode); + return xfs_bmbt_to_iomap(ip, iomap, &cmap, flags, IOMAP_F_SHARED, seq); + +out_unlock: + if (lockmode) + xfs_iunlock(ip, lockmode); + return error; +} + +const struct iomap_ops xfs_atomic_write_cow_iomap_ops = { + .iomap_begin = xfs_atomic_write_cow_iomap_begin, +}; + static int xfs_dax_write_iomap_end( struct inode *inode, diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h index d330c4a581b1..674f8ac1b9bd 100644 --- a/fs/xfs/xfs_iomap.h +++ b/fs/xfs/xfs_iomap.h @@ -56,5 +56,6 @@ extern const struct iomap_ops xfs_read_iomap_ops; extern const struct iomap_ops xfs_seek_iomap_ops; extern const struct iomap_ops xfs_xattr_iomap_ops; extern const struct iomap_ops xfs_dax_write_iomap_ops; +extern const struct iomap_ops xfs_atomic_write_cow_iomap_ops; #endif /* __XFS_IOMAP_H__*/ From patchwork Thu Mar 13 17:13:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 14015532 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 95F2D26AA9D; Thu, 13 Mar 2025 17:14:57 +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=1741886099; cv=fail; b=WgWfN7tqvBHu/qFRdBLPUGqaNbOhFjzSuXVKz40ONUnOuDo7rRqM0KnmQSTnfgWogyojPPuWdBgZqbtjraCcqX7aInFgdpEE2DdjGuJAmq9wI+EgU5A4rYxHjHc0r0tTRTTXTkuGauT2rHxu49H9SqodkA04S02nAOQ534joZ2Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886099; c=relaxed/simple; bh=QrKKQ2Yc3pQMzgRBG8qNH+imEEdmzEyaL74a/ucWukE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=VZPgqz0LdBa8l/twHoO9ezAV4AEKhYYWKp+iCRGJ9muugD72KxdxSe3LfD3MchzJ6Mxmpa0CK9zIcUEFj4ghLEeYlM6UBDqfNivUrVV2qYUnhG5lYPnRtLKmBVAGeUjj7qoN8ZaUtHCmOhczugY9WdVt4cJH7zD67fuLcD034Qk= 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=ZMtM4nyy; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=btZnxuqp; 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="ZMtM4nyy"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="btZnxuqp" 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 52DGtma5013872; Thu, 13 Mar 2025 17:13:44 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=2hv9IYas+016jV6ruhCb5R6iRiy/VSF9uRRl4i4s8Qg=; b= ZMtM4nyyMIXOHyj4G7yliHIFHhsTuH6ZLNcz1SSF5GJnin0Np9p9ZNPospsQQjxu IRyCuoPkRbuI3jPu63m8407gxIHCVacDsHX+3kFO+6bkHp66rLJLHDhuNSgiP1PR xsp0K6OCFzXDtSwje6HptsYket4CHybAf3WsiQbKEm9xBPN5auoJps4WGixZgaTe 6N00KsVtp2g1m27CI2z/Z4DhhLKUTIU7ncfyagcGQgNogPtXAPYRTz7HLDCBbqVW UCR5/wHHAoKpejn3BzH5Lojdg/IKtrk5a3XbxY0lc3kIbPrrXnq0FoestbfFZNU1 At4RMEPWRbHMUzi9wmBiow== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au6vmrcy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:44 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGeUsO019470; Thu, 13 Mar 2025 17:13:43 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2049.outbound.protection.outlook.com [104.47.73.49]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn26mrx-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KVFAzAY6SXj4RK4EgmIrTQMpbtwhUTgF595NHNOLn9NmQadPucbHJVqHXUMlnDAT6Priaiy3ynojICzCwUUZDmoaQW0swZDUBmTAyUf24CmBOLuKeIbYKWwpGEKmEmPmzqjsfRmBxpo1impz241IVWTQ5aaS5foObbFpSp1HZg4QkBtMdavTsoN32VBK/rWxgEsOLP2K95bPp9w4KLJ9GEA85Wyw+CLeG/P1LH5kpnnW7zlMZo1iO0F3howwY7FzRdyoFE1nZQ4PgQkWU5Pe/sn0x5Rdc1qZ7401BfMog1ZJ0Ig593PvLPd82XVsr8hZgMF1CrqHxPIhy/g5CEC4IQ== 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=2hv9IYas+016jV6ruhCb5R6iRiy/VSF9uRRl4i4s8Qg=; b=vNPEwaOdmeaznRksY8C6caIkrdozglmZGDge7SPRhNJ9eh5HyCP+UT9Dd55Tm4iXYehFLShj90Cc8fTeZNS8qWG1AtZVyw0FOOgxCq97TOHnXOCNQvOqTJyKX8SBX/RiQFAi1UyFRJPsXvxYSHrZqTLDst02MIVgYr7/IGu8jkiZunsmOZKij4x4KxaBKMqBN4ox7JedAGpLVTURabHhXOzpYDqUDGoLuf5Rd2IcdMc89f22isV5eP2CYhhbCvN6G1UO3groh9cr/++KzR3sYRIphCYHGtNGE0w0Y35iVTgGmbr1rqQ3Sazb2LXBafs9eVsJ8EHdp7UQ2JQvMhSh4Q== 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=2hv9IYas+016jV6ruhCb5R6iRiy/VSF9uRRl4i4s8Qg=; b=btZnxuqp9qBGvnmA9f5CHnrb8z3KmrfyFJM+CrPJ8iN2+r99kDbKHG4MDA/KDZGy9PPrI1gUVnd7XnJxXtgHC24YfswLj9Y/DG8t903GZouxU4oxg0L4vfB3KAeV8r1bZaVO9xhXM2ntp8Gf6n2j252vIALrBQAM19QS7w/yEjw= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:41 +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.8511.026; Thu, 13 Mar 2025 17:13:40 +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 v6 11/13] xfs: add xfs_file_dio_write_atomic() Date: Thu, 13 Mar 2025 17:13:08 +0000 Message-Id: <20250313171310.1886394-12-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN0PR03CA0041.namprd03.prod.outlook.com (2603:10b6:408:e7::16) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 48166f3e-1f0d-47c6-0238-08dd625266c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: qgn3is2d0QVukrjYfFMsNV3giuNS4RLJ6QqfUKFyPwoTp5I09e1VofhPx7f/W7fHCNbd8WGpjCL4CWsw50jsIDPiNsdMZiI2RhNukir756DGtGVq4pLaRKJUNgfxosY3/SnnpsTEBt2A9CfdEi99wI7mnVxV3ZXvur2cFsUOqSe1HS+uS1S5TN9Z5j+8wglz0c1iXYsSnASr+7tAi1dh/6pgb7MkzeyB9mWoQuO/BgxRSdr+KUzBpqPmzI/LBzm6l7atvuVRTQx1PvkhKQNWZDkr7W1i9r82Ic2W2fzXN31lSr2xiwPajuHryppjvHLFMQ4t/u7D3Uvbe4Cn0jNH53u7oe4qj/c4HZoXMjNprgK6mQn5iGqhw8xuBj8y2iJxBAkhknH9q1Z5tbI7x9dyv6/ymv2BIPj/p9XpGPwS1cyQskFYh/YZFNVlv89KXPLjz5LJ+Z0EyBgCmpc6hwOPkzpXmLunXyTPu2mu4wJ/RaKcQZ7pTdBhdqScpiNN/tVyTAN0lKnxAmv/2Sg+1kNzaJf11R/HDQylRcSx5cKPtD/Mbb5CgsP80qlFbUqFbYIooy7w5ffaTZfs2NOkZEhuV9fPThiSV1ovjbEWiRhaDCYd2CBEydgnevRUM3QLuyLMPLfvt+G5mKlw5pDhQlDkCfw421YW10UxmY4aNSBT+Ui+QSq6R7UbHv8YDuXuMfgpQ4S9Ek21AWNiOXUCGweGpoDQQND04JdbhnSn6dXUs50eK+40ZCB5egCJEvay6zAkhCONiF//Ujkt0tWCFJlB+AEkI9U5puEZuE/IYyhkiZczQPixRfAAt39w+1kmiMoTI34G+yOo9lxR8iT10LQ3Jlt6Ldf6J+q6iIv3kxrdC+KC52nj7hiHtSJoXdu9zFnNmZVJ7uXf1tB6peUMcMbIx5xJHNE3IMu/3v2uVVMPVb5YSyncSRNGJ3+RKxn4gaIzpct/CSRXcTbA+Ti1IFzaS2VYvAOG9kI0u0umnL5aKRtMJ5jt+V3RVFP2JWRNL1FJBVdPKSInzkIPwrcC72UdCCL0e+udbLJPM9KRkReAhCNRve/dtqeMpRK22NNS2ZlAfSnQnSTJHiFhWlBOwNQl+By8yGAIIeujiPT5v8Y+y2M5YrcgH1KflgNEE0l9BnYHBdN5xxOqUkNxo6+IIK6L0ko6LKNy6gaIcWfu10k8dj5LCoKJ54PMxKVspbiZymdyy5l5QX0kW/9oTLcMUQT5gF2rj1zZEDMBxhU4s5aGmezPyiwJV7wOdIlsVyXl1C+fQOdk85rWUOLIqjUPBqWBZlWjq6XyDe6m3+m9AfTKTYjhrD4r7kyi0PBLtptPGGzlCx8RAQkVqApQBDUyTeutn6Mi6Ztn3qbDcgWk72XjtZU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xqxvSf2006s1npGgAiCNz5X7EMJb+A3eA+ke3KNckv4Dvpfw67CVhEjKMd0fLq4jaSksieMjZzeraz5xeFFRTTUXEk+iyVJjgI/t4icwu8B+V7vfq6nY4DONKzp4UXj0pftMP5VDyeCFsiyw3z3MLade8shhUd6NAK4y7jOGHlOvZ/oApMg29aBjOP+Do25MXC6KqX1UaR5V3xZrc4eewHJDxljD3u2CfT9vF+stgDK1akT5hKIbxso1cISKKV+g9BSmGzv4UNVc+wYv5WJBBStjgjF3JBkcV54s+Eu1mZ/V9Kxj+0jEkZUCulX3sXYGPrVLT6Awhh0H8kN3QUX4lIHKu4Q12/1vlWEs1cQN3rTrVPYC4GI4v5Xsa+Z0QPWCrPFCN8t8EOcEiIIzs3YQV0o+Xd3xoPdAvpDFK88zjK3i9Bhp2OHN/vJm24ThxplVj6kytb9tQB1YEMoFr4leLEljXBaKTleJfE8CRl9lsHmQM/RSStf3h7Wax9VV4xsW+n82FwT2o9h0HH9pnho12ef3bWowrnN3FAWL1N60mITmkK27BNkEQF3PqMZZ/XDcH3ec/Hw//WevHQ101x5tgybry5S1u/YbCQHeOlgWXJjigy+EvQ/br3ured5w6bpdxBl6Wt/IZTjaoy2mBhyTWvuR7VBB6aslFiovZz2BNZQdhuWUPo6kl5JvNSXmJJm44OvqKPwiQbx5dUX+mPF9RUgLe1JpApPTNWDDa0kMhDxJy7rXw37m8raXWmQDZ4CeCfAB9zYHmAZm692BlMY4xMJMHkyQBppKiWj/dtVEOqXj5Cndfj3NS3hzeQ9hmwZ1olP2mhxIEJFRVCDfQepa9DwpKUjv9IbcVSm2vT4i1bJ8d/DDYFMwEtpJ+RZseJnpDc7R16Ovkf49O0m773fDDH3Z4PGyq3yx9Iaj9ecJ0XocT88etKBhFd1otlIurR9VQe+vNwP/VwPlPbUYC36ZoIKBsfGcSPTnyDhBJx17S2f+P1/VeqJJijiGDJp+ZfF1cKut8vXutnd9xPL57LV4PPF6PIWwHdDVjwliA4LJu350AGVkCZIFN77CuuM7x/64ZCS7PsV9LeV2vPCcMSDzsYHW05gqoZ+MJo2oTi1kbmYwEFbvhjNdlS5aqy+bZEZ7hIg/qRb8u+8sm1CFm8GhoetmrGGhKrwz/lKsXIT8HOjfCyYd0BYuY3ZYXlT2QH6qw+MWwucIiubHYG5ZVie3vLzg831jQM+MQmmz+a7wIHlxpi52q5HzUzZx4HCRQ9/MBvMBNJwS+acOs+ExL+ip3LySr5L83SM79zRGvntCUeR275sMomFKiNNFLhrhUXNSS9ummh9u400l0LtQr8V4iwTBb/Xmt5u/zQtsn819grj7LBX8AyM0/DRhc8Tys2Ma3qujUrID4Zcy+aQ7YhRB5ertEr9Mm6N9aei3fcr6qkElPMtGviYt/HiDcTL8Msh6F/PNhmDQxvtgIKuFgYlw6kUUm5/xV2RrFATSednasC8avudP2+VUbISpFnd17fQAqzYPjCndQc5X1QHLV11n+4jThbGQjDIrFq69RajZiskmNXXbByYeYGxhZJcYdPfaiQTLxOAo3GxSGNR4cFeQ8w== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: hUWgJEdxpyevizmrkMS2VrVdN2crC9YeOo78wc15OFXdA5lLqls73o9yN5c0CtvVKQKzO7WrSVWEdfRnn89dOE4YY1M132czAyOGeglMIq6lQgcvannRqwBIj+Cu3DA0i5F9SG/1+zuHYgr3XeKBH8O/4cmDximl9ThmbtEro/Qd/kmDS333CLqfjGTzUbdw0gEgL52gzzSZTNAhOmqCEeurYDhP3yZ7G0xDMZfl+Y7fIEXriAXPt6ZHiul9MunSp6VOdNoVlQTR5ypu6VDIVv+3jRKeMqQKWLCASULCR1GLGT+zEiH1AaxN7iVAI6QpPfAiIllFyYy3R9NaXNnFrsZIXONi04zV9AFZhgJAq5Jvd8dIiQo9gbn9d3hiWaumH2KHhebi0X3CYK4K83tLxTclHdXcrAge741pWXG2xMpTfFpdql1WHEUrUrRxEMqAZx62G9b7Tk1vxt/rVsLGy6xClhy0zxUG36VmvSixKVF3ntJPW8nDmVoIEFU+F3Rk3cMHd7CpjRCd5QKhsRv5nwI1KFsyr8DcdJp3V1oRxKozKVjhLRNHe9gqxfmmfGIxI8KLkOyIQw5ikNyPfPlgjnLfsJ+2Ynv+FTC1/Q/iZpw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48166f3e-1f0d-47c6-0238-08dd625266c6 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:40.9281 (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: ZJezY5I2rrE7H5X41nxUL8c8VYLaY5ymdGXv2HrB7oyJkA/aVRglJICXwSlymzNIEII8/46APcYeIqecGmUKEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: 59RLHMk4gXjhVWCADECOcx2WgZQ7X8kx X-Proofpoint-ORIG-GUID: 59RLHMk4gXjhVWCADECOcx2WgZQ7X8kx Add xfs_file_dio_write_atomic() for dedicated handling of atomic writes. In case of -EAGAIN being returned from iomap_dio_rw(), reissue the write in CoW-based atomic write mode. For CoW-based mode, ensure that we have no outstanding IOs which we may trample on. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 7a56ddb86fd2..029684b54dda 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -725,6 +725,75 @@ xfs_file_dio_write_zoned( return ret; } +/* + * Handle block atomic writes + * + * Two methods of atomic writes are supported: + * - REQ_ATOMIC-based, which would typically use some form of HW offload in the + * disk + * - COW-based, which uses a COW fork as a staging extent for data updates + * before atomically updating extent mappings for the range being written + * + * REQ_ATOMIC-based is the preferred method, and is attempted first. If this + * method fails due to REQ_ATOMIC-related constraints, then we retry with the + * COW-based method. The REQ_ATOMIC-based method typically will fail if the + * write spans multiple extents or the disk blocks are misaligned. + * + * Similar to xfs_file_dio_write_unaligned(), the retry mechanism is based on + * the ->iomap_begin method returning -EAGAIN, which would be when the + * REQ_ATOMIC-based write is not possible. In the case of IOCB_NOWAIT being set, + * then we will not retry with the COW-based method, and instead pass that + * error code back to the caller immediately. + * + * REQ_ATOMIC-based atomic writes behave such that a racing read which overlaps + * with range being atomically written will see all or none of the old data. + * Emulate this behaviour for COW-based atomic writes by using + * IOMAP_DIO_FORCE_WAIT and inode_dio_wait() to ensure active reads. This also + * locks out racing writes, which could trample on the COW fork extent. + */ + +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; + const struct iomap_ops *dops = &xfs_direct_write_iomap_ops; + ssize_t ret; + +retry: + ret = xfs_ilock_iocb_for_write(iocb, &iolock); + if (ret) + return ret; + + ret = xfs_file_write_checks(iocb, from, &iolock, NULL); + if (ret) + goto out_unlock; + + 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, dops, &xfs_dio_write_ops, + dio_flags, NULL, 0); + + if (ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT) && + dops == &xfs_direct_write_iomap_ops) { + xfs_iunlock(ip, iolock); + dio_flags = IOMAP_DIO_FORCE_WAIT; + dops = &xfs_atomic_write_cow_iomap_ops; + iolock = XFS_IOLOCK_EXCL; + goto retry; + } + +out_unlock: + if (iolock) + xfs_iunlock(ip, iolock); + return ret; +} + /* * Handle block unaligned direct I/O writes * @@ -840,6 +909,10 @@ xfs_file_dio_write( return xfs_file_dio_write_unaligned(ip, iocb, from); if (xfs_is_zoned_inode(ip)) return xfs_file_dio_write_zoned(ip, iocb, from); + + if (iocb->ki_flags & IOCB_ATOMIC) + return xfs_file_dio_write_atomic(ip, iocb, from); + return xfs_file_dio_write_aligned(ip, iocb, from, &xfs_direct_write_iomap_ops, &xfs_dio_write_ops, NULL); } From patchwork Thu Mar 13 17:13: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: 14015531 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 CC9C526A084; Thu, 13 Mar 2025 17:14:55 +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=1741886097; cv=fail; b=sgVr3XEIl1Ro0z7yScBPL+rjQG6byj5U2F+tX+bqDIEtxjNF0w1JV7aEIfw2/r4QSliHvQoTMXro9DBqqP6mJB1LT9mhsHwz2ccn1aH4nd4jboU/jhZ6SUHV9gdfTop5KGAW9SjTsm9Tt4NFRkKiCoJNziiti7/WUHErJHtqNu8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886097; c=relaxed/simple; bh=te4syDCRWfaVmtxUNIxlqLbOyVJuoljgbl+C5TTrqVM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pt+Brk3LMGuTvyM/+UKsTJnofbPbqy8XDrhCVkwzyzi/IeN4/sMJ+fn/+d+8oC/JkmILh3JnhJ4pAenKHBnNYGauktxNGNEjqfndyOs1MUBfX1MIJjp+ILArzjQWUkHm4Eam8XDDSl4iSLGQD636ZGnBrqIfW5KoUbrJh7lynUE= 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=YDMYM5az; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=s3cZIsRz; 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="YDMYM5az"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="s3cZIsRz" 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 52DGtpKO006995; Thu, 13 Mar 2025 17:13:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=R3HKbY4Hbei3+mLT9Y/8EExioRxpww7HTGmTBPnNYsI=; b= YDMYM5azsYLpX/4fOX7V2KfY7F3dRC26RmX5A4p/XRzZoXZQC/Witf8bMSsAas47 Tjl2h0aVoPsw+0ws0ZJcf/C7385OGeBHuggUw58FXR+DHdxetH9SY5U7zEzyjGNv OmjUUeSxK7XRS/uzL+pNGsf0RrP8VxND6oVwQqfXYvDaU4hiugzbg8urJjdfStp0 lT6LVtEPTdLWrs++//3rhQUH48GdlfPb9Pg1jhwzUjDQyK1A+yAWe/Ojja7vd6zd fJ3TrHnsjxqZZxcS4SMrZweBWXik6F9hZmhjKoZkZ+7nYINwwP4Sgh6adk8v9mNd Re0oVWBPcv0zkFg6DC8ulQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4dmrt7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:46 +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 52DGaVT8002391; Thu, 13 Mar 2025 17:13:44 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2044.outbound.protection.outlook.com [104.47.73.44]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 45atn90p62-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f2J8K1g+yyZ4ClKJvwl5I/oWn1uDGB+bxUsebbql7G2TciHX3T0suS3+kSiTeRH4y++CR0pCPmMxrvCTkLcAyXT9j1CFBoAIxMJ2o8xFXVCm6X0dA1jVDD10dly+E8EeZqwEIQGyaJNdpADQOwqgHlUKZBdJusdH2DqGas+W/NFQ/+apQU/K/GhJo4IZhBaCprWJnygoSE9rpTh6bE+8V/mJTkiSCxUJh2JF40DoNXQjMPNYecmj+LaUH9fjYTlFvU7aBU4kELMNRKGMXDGpNaOBMCMQLOGPA9GLkcUzlkKAPruPdNlC+wK5pdKbUAeuyZLck7fhuz3+2MDSXPBrnQ== 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=R3HKbY4Hbei3+mLT9Y/8EExioRxpww7HTGmTBPnNYsI=; b=GpW77DybpnbGHEV8WlnjTIovSm6JlPT9AX0HoOwUYxYWKHgUf8aDPZI9ODjsoCYXCYIX7EXqeGvy+ZC/DR2k5wJm7LhY6q8lFLm2CFQjH6tRdYW//0Z9wd/50or0zbEK09R5gX5qmVUd6Ie1qQVvukKOd9e8h4j3940laxepuI/FHQwQtEeXgtotV0MwhoqIcx/lC3u67FWk0NhKGlOwab5bM31edf7rNUZYSA7FbW8hSQwjyxvs+knuDkLq9vIKO7XkH/12dzsP+n6+15Ljn3k3HYXYPQ2+xMZDfuUIQW6cJFH45ogmQqkLCj3ImWCnlu4IK34qpD3Gu5kw47551w== 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=R3HKbY4Hbei3+mLT9Y/8EExioRxpww7HTGmTBPnNYsI=; b=s3cZIsRzXfpij4XwpBjzJ09b4sb0vrPVf4V7+9v2uSnGvZkztlkkUm4yHwg1d1BesiSEUKlunigFZcEOnSkRVU0m1YotcnLLC/7jRrg9MXm9Wrt/dc1NPUpOi65XTHwhKEqtWrBeweGtHYe8AxK6aQvkej4ykVIJJuxueWDfTH0= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:42 +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.8511.026; Thu, 13 Mar 2025 17:13:42 +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 v6 12/13] xfs: commit CoW-based atomic writes atomically Date: Thu, 13 Mar 2025 17:13:09 +0000 Message-Id: <20250313171310.1886394-13-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN9PR03CA0645.namprd03.prod.outlook.com (2603:10b6:408:13b::20) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 2794c045-18a9-4ed4-fb0b-08dd6252679e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: cnFMOrPL9G1OnMNK9WDKawInT4ITvUQ1hjFvvuYCra4aHBkqdrcUWU455qQxK7VudMxL0AgxHUrYIeiYw77lPyyy/zuuCNxFBV7uNerUra+CB0HdRGenkjb1fpKnImhWUVVM7cfCtXsMC5dcIRW8wDJIBPiVVs5IiHTHsvzMbZ+IWtyeCdzMNfd+HxzDKXIdO4FPiUN1xStUcGm4WWAsNxb+0AErB73h9GDhB6/EQ3GRfQRlz1JLxPDMA6ijvhqkgT+2/vz0dkfdYLDFMpGm5sCuoBfmyx7R8MPQ01IOwBitSrBTTetT1DdyuXIADJPaKvEdjz4c7CDJVzBmoJphBVTUF6lXDhQvY5zO6SVVsUVSQjveuS1DmK2bTSorQGDC5LJA0P++8eBavdiFEHkXuftAoHid18xcfopieZekVn4o0gVzMDLoF3ub10RaORSIm0X8DwfoINtdDKMK867gHcel0QgY83PA2PAr+culZ3tFjJ9xtCtb93mROqyuR0uSFsFqQaefAzKu6//Bh8CzzY3Qq34qB9WwHd5opvm24vwpSB9mcmfbFey+iOzc0Ix4o7PA3ShpisVJ/D7oINc37PcORQGypqaqTswySOk2VEFnXpqsX7Mr6Hsl5701u1/MptkJzt1X4xYc7kLZublqeGxBZC7PchtFhtmDNsAyFjlemgps/xTh1PA2z1YAZGCkuobOpnJtgk97L8G3lyPzpvLAlwTP4ths0hxGtHNRYjJdb7bjzLdM5whQYZIUDx/72NpIorrTjmUdajyxyO82ytkuUqel1mgXkLeiXugthEuGwQsBOx2k8+mecqHMgpvBDL3n3R8qGz471XLu68OuhYBrVPXO81cDHIdW/Dys99pX6CszOR+CZAN7Tx2fd1mxXVX7gsjm6cDJKMDXKMzVIsEQbtV/e8hC9aaotroyNb5oQSao0NYZ5rBn7aPGGrutBpExElfEVptsA/zCsJ0weJpkCN3WQW+U0WhH1f1YOgehIh5vPyowT+Jo8NLxtmie6sXT9qGYZN6JDncdtPM1MA0wRMs7ny9WihBjEwMyHJHBc1LEhn+K/DEWzeLPWyFhFLLfQaxEqNA19eC03upuiA4exWI1xi8DQXs5Myy4CGb/nntmX69cbb9NIE0fXQCpzmu1GrsVtQpkRPDGS/IJ3YtOQifLNXIwiBSageAjtlTzRGVl157arokeKNAVj3EbjnaulbQ3O74mfaS4C7dIpN/qSzVwQCYOmoJK31htjw9CwXKHu69YayhkR4yr71kV4YP0ALOkC6YG2qF3j1v/N7t5O52NrwE3kUwvJOY3MNTUil88TmnCNl0fr7DTynya9j81kzJipMK4AhRX/ikR3LR95auPgtct/MPca2dtoppNoWTSqDfb4oaGeYoF77D+ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TXd+imwkBba63AgsieH/HCcyPbDxG1nHFELdcGqU7NUHkU4/UAlKsV16SBspHSEnpSux/H+sHEiTWVquHirpKTKjQW7b3bLFnbxlMbibyd0nxZHE492hiaFmUnqkeOenJeVPeJeTSQj6FDVY/Jv8NlhnZC4XhSaGbjRaPfgOLUaOt5ezHYmm7BLiefViRR1IXZBXx7viO7CzLI9p7ws2+tlyE9SkD1Lybs4I0sjBkh4e8BfqOV0Fe4PeQCvYoP+ZTDKXDSFaR24W5X2UDcKTYHWIHv7/Zp79af4TU+Dc+JaofCdCABEcLVwzfOMwj/Ql6yzSDPoWOMVSCTt5nVoUAwa4+Xf18N+7R05sumfN69UkUOa6NctY87yDiouDscIf8JXazJql7nsFsZnKRf13XHks40dGd9gAusJQ0zYnQOuU24PxWIz2MiH3c7oHivc/S7BErbsn6jR2zt4hYkwly7MlughnJr4bz+pxPvIH+9UcKkG707k4VQVASAE6U09i6V0pLsavjjw+512Z524PXNLFIMpEmUJjt4KtPZK0DcNSpLuLZSCC1d6MJkUG+LdhO6eljxj2VVNgfKFkVjivpyIAqXul9i4s9spvr4U3nVZbB5yr/23T7SHSETkSCKtbWk3z5nySpyGIvSzAIJ7NuhHjArs8HqPvYnb/7lEgoYxiiEjSA+vNWudoqck3kz3VW/iniFlrT9ymyY5cUaGEUj3WeMSkhM6IUcbHgsC2vAP6BAHivRT7K6syp17GabQD3wCFCmsuF9/+NMcHmsShKnamS39+Djtv6UifzgT1++4tdGSjBU4BLryMUGPu1Pp6bTF0DF5rVsndteCPrMB+ITI3rEsHCyzfb0xXnxgqHeZeXLtiKHohZujSkTn/xNwOqtUv8aH+ya4BA0NTTdZZBpxb4b11o6dUYChWDko4b2KL8tTg44HjVt9MF5xRX/C2WsRJo3w2lFaB5QdxJD6bdmSJWb3S9QzEBavJocKqjZc7UuUEzZ0zDjervypcPrCG9NLb7FvVOflkkVPWotPke4OAB8rxDd9Os5moyaEGaM1wcHMsBxVBxE3xwJzni6SVRQAcgIhBuKF75VQ6lsZu/hhHYZLYonXr6T74Ai3s1aaVrnEkNUvQ5YBoDN3M1hiE8B2RUhGL9tiA93DU/8DLj6HLhYhMiARVLvP/oJ5llZmDg0N9XwOY9QA7ctkT5eovh4NAHLDkUD96u5lCx+3BWH7kkjcphLQrwsezBYBXuVYZ7j81bSbKYcUOslEvA2zq/bQ+hMokC3JmH1WCA8Mz073QkO5y35SnNNUQR0tdYCqpTl24pDLOSN0xg8QuQpYW9+3tUoZXW1oYF+UOPnjOVBoDZurrtgt0ItKNbjLId1nFk999K68HXNofWrX/Lh5xO8p/B8z50Gnsd67OVVepKOZHBUmkixjYY/gwlU7DhwkYWoecD+Q/QkdTwpMkvpy6YzpfwG5RdH1PioL90SQFKfEY2e2ZTJ67usHoYZEzddeTitPsOdFFFZmnUJDpu2bXk0QQLNyYwP8jOEoFUpM/Zm5JZMMhZuqYAyjxhviJom/p0gxLKE6Gb8EYcxzimUfO5bn27Mz8QjnpimBmRqY0WQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: lFr8w+DFDaVsIMu8hPeZsWucmYT4HF2I4vHi8qMuBvwNzEuvEEVAhJ4FOcCB0lJUhR8cHO8d1++QQti/JGAHPg+QRIRncH/tPVJFZN53zkInwKxF4cvVjDkV/qzdLjx+pjF9/tbv5C8ucq/X/b4H4l6kQ7djvYSAwWeykY0/CSOeBzINbS5svjjJPEfNkg6olbyBvsoscU93O6MHAddricj8fugohGS75SvV5izsDYbtWuXAHUHjOrw/YFtaab0F+VpAnldSIOcxD2eGNFeC8bs+1ECjpBhyXNjd5l+bHj0tMx3N3LR6e0Eoo6NkEN+jYuQ/tL1UcUljGZwFc4OnLsotd14zv5IctxIeWFwj59a0H6n+DcflrwUV4A/wgo2CdVxm4YMLyO8Rywm36BHgX0YG3wHmzl/7aBSBDSTchl3U0NFKOgzJMhdi0OHSMmrvpKOmunmWjB7fZHD0VHqwPd12ETntOM5wYKBiIwdXqHHcl0HdNEF77OjtJ82eGyjN+CzkBzhj4zf14rrFDEH7VKmvpSUPgwNPxorEhZ5meFOQDoAo34EzJI/f9uHiC9qQyzSHNkWEcaUUy+EgfovTqkpK7dxaQpFHhikWYSjwGTE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2794c045-18a9-4ed4-fb0b-08dd6252679e X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:42.3274 (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: kdT17nu7qtO6+AxJOJrNZWa0NyUj3wyWVLU1yhAkapv8fYs9IzvoodL4fza4/iwfzCBtjPpaDNpIOtotKF7Xkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 adultscore=0 spamscore=0 mlxscore=0 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: VR4hTqV5soxA2MDTT_Hd3H52tP1hukYt X-Proofpoint-ORIG-GUID: VR4hTqV5soxA2MDTT_Hd3H52tP1hukYt When completing a CoW-based write, each extent range mapping update is covered by a separate transaction. For a CoW-based atomic write, all mappings must be changed at once, so change to use a single transaction. Note that there is a limit on the amount of log intent items which can be fit into a single transaction, but this is being ignored for now since the count of items for a typical atomic write would be much less than is typically supported. A typical atomic write would be expected to be 64KB or less, which means only 16 possible extents unmaps, which is quite small. Reviewed-by: Darrick J. Wong Signed-off-by: John Garry --- fs/xfs/xfs_file.c | 5 ++++- fs/xfs/xfs_reflink.c | 49 ++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/xfs_reflink.h | 2 ++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 029684b54dda..b6b714693d1a 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -576,7 +576,10 @@ xfs_dio_write_end_io( nofs_flag = memalloc_nofs_save(); if (flags & IOMAP_DIO_COW) { - error = xfs_reflink_end_cow(ip, offset, size); + if (iocb->ki_flags & IOCB_ATOMIC) + error = xfs_reflink_end_atomic_cow(ip, offset, size); + else + error = xfs_reflink_end_cow(ip, offset, size); if (error) goto out; } diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 9a419af89949..b983f5413be6 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1006,6 +1006,55 @@ xfs_reflink_end_cow( trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); return error; } +int +xfs_reflink_end_atomic_cow( + struct xfs_inode *ip, + xfs_off_t offset, + xfs_off_t count) +{ + xfs_fileoff_t offset_fsb; + xfs_fileoff_t end_fsb; + int error = 0; + struct xfs_mount *mp = ip->i_mount; + struct xfs_trans *tp; + unsigned int resblks; + + trace_xfs_reflink_end_cow(ip, offset, count); + + offset_fsb = XFS_B_TO_FSBT(mp, offset); + end_fsb = XFS_B_TO_FSB(mp, offset + count); + + /* + * Each remapping operation could cause a btree split, so in the worst + * case that's one for each block. + */ + resblks = (end_fsb - offset_fsb) * + XFS_NEXTENTADD_SPACE_RES(mp, 1, XFS_DATA_FORK); + + error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0, + XFS_TRANS_RESERVE, &tp); + if (error) + return error; + + xfs_ilock(ip, XFS_ILOCK_EXCL); + xfs_trans_ijoin(tp, ip, 0); + + while (end_fsb > offset_fsb && !error) { + error = xfs_reflink_end_cow_extent_locked(tp, ip, &offset_fsb, + end_fsb); + } + if (error) { + trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); + goto out_cancel; + } + error = xfs_trans_commit(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +out_cancel: + xfs_trans_cancel(tp); + xfs_iunlock(ip, XFS_ILOCK_EXCL); + return error; +} /* * Free all CoW staging blocks that are still referenced by the ondisk refcount diff --git a/fs/xfs/xfs_reflink.h b/fs/xfs/xfs_reflink.h index 0ab1857074e5..969006661a3f 100644 --- a/fs/xfs/xfs_reflink.h +++ b/fs/xfs/xfs_reflink.h @@ -53,6 +53,8 @@ extern int xfs_reflink_cancel_cow_range(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count, bool cancel_real); extern int xfs_reflink_end_cow(struct xfs_inode *ip, xfs_off_t offset, xfs_off_t count); +int xfs_reflink_end_atomic_cow(struct xfs_inode *ip, xfs_off_t offset, + xfs_off_t count); extern int xfs_reflink_recover_cow(struct xfs_mount *mp); extern loff_t xfs_reflink_remap_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, loff_t len, From patchwork Thu Mar 13 17:13: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: 14015533 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 483EA26E947; Thu, 13 Mar 2025 17:14:57 +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=1741886100; cv=fail; b=X00wIMSv2zRUlgUKrkS2QsoKg6L/3SvcvOmoDAr3pxTmq1V5cs9fbfPxyeosHmOaVfIBVZW13X3Adey4JU2CFTeNCNsxLsLLsKIc9JmhypUS4JalBb4MqE1yYqosTYAL17mQgXfOPj64QQBCCjp3K3doqhKKISViONYCI8d/aTo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741886100; c=relaxed/simple; bh=uSdZDsz7wUXFvzJBPtk3oLIdsy62Qj8JN5Io+Mv29J4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=gTdywFmzFOJlhiQqsecthTMCCB9Fgxk4PCmGxGFPjFxg9NYGVOK49a0UDdIF2BhRQR+9wEPLOpbkMXLDBgNt+swMnxxUe/slReuIhQJksjM6X95zbPb6ZI+W0gCVYmt3EYE7jC1/MX2W9lU9BvkgLspxiFpAn/L3z0o9aoI76KQ= 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=XrySqdTR; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=CBbac9uS; 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="XrySqdTR"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="CBbac9uS" 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 52DGtmiK031863; Thu, 13 Mar 2025 17:13:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=8i695V85z50Gd4b4Eoc7L+HS8qVP4JENNmz+bKCP6jQ=; b= XrySqdTRSgBQytMmNs40jUlcS9QRugsMJLiqAPIviYSS79K9lwSQTnCz5gLqmkB5 IzKtGhGui3XGGToUSDLqYLUU996cOJVJji+8htr5hwNDI4sYHMmG7ZpF+4b0DqQv Gw+PZmHiaQJ+oYYj9hXIjM8ivGCzn8hLAQX3OyjgWSWORnaMzuMdmUwnJe+QwChx VR7i0y50B7VrGDVrsZYXcjDAM4X3hTMnhuwJgNwcgxN4jTYauk+nnGrDANGghAZQ ITXpiTR3sAEc/fG/7DRFBndZN5tjEyIPxdi1hT1UbXeR7tHCyCkUnxIte9s5oiMj F2WTDa30b5YvyvbvMr38RQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 45au4hcsep-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:47 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 52DGQFn1003795; Thu, 13 Mar 2025 17:13:46 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2048.outbound.protection.outlook.com [104.47.66.48]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 45atn2e3tj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Mar 2025 17:13:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vY7kZRQZ+4oaOXsigLQNVJvlIa6o0RsxbyrB7XY4/XV4vp6Lg1NZJrYjqHkWiNW1/JIBTSYsCLA6foSM823Cx3R/eX7sZxeYc/ElPVfsWymsKs41TXbwpf46NYWt8xpiPkblgBCmad29Y1gKl1sCeTS2TPhqTRUuknsL1xelZ+HaCvmNFRM0CIdCqoUfSFpxbXWvZGVzcdrZmLWB9hfvyYZvk+VYW5FkJAS8q0tTp9vLchuVQKR0KDVEEyzTxZv7Nmd62gg8ju7K8MrSSQG0iiAvnp6Q7INTaacXL9vzZhQpa+QHwPJ5N61WjwEigWp9H03RoNVeFiNfLzuKUPI2HQ== 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=8i695V85z50Gd4b4Eoc7L+HS8qVP4JENNmz+bKCP6jQ=; b=BJ6/r5g9bTGZ1+OQgK4m5Z45qvxBSC4y/QJ3UKMuqXLwYykurUh/mglDVf5iZ6+3FfuUEJuUvsL6Vr+0BHYsL9L8jf1FblnzT5zbY3QKE4Xc/hBWonUhZ3F2YRSfIl6rzc8ZRjhzDgw22sZvPWyajHo3NHuhite6cQHTgglgEal7GsUhMsMJQJcNy2wYo/s0+hq7YdbTRn90wkAiSqxbbn1AqiQeqP2ooxEdLn1VTK0s0a2awEiTP5WK4AhrR4roU8j78kWfQ8Zy45I0Iuz2gibyHKslHprcvp8tjD0o2RMSucvoKtWwTJJclgz5GTDla6yMjSA75ZRJq/LEdf/p8A== 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=8i695V85z50Gd4b4Eoc7L+HS8qVP4JENNmz+bKCP6jQ=; b=CBbac9uS7Pw2j6kaPAFbVojedl3MleitNLz+8HMCZDv7AVkuCVYoAsO/QblzZ927KV/XNk86XPz+P0coMq8LFciadxnMCacikQ7fj0LdgZDYXD4QG58COYQyp7urRG+5loqOJO4I7f6cKpZLNRl0hBJpoGdhz8pQJ1X6IwPKaRM= Received: from DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) by MN0PR10MB5982.namprd10.prod.outlook.com (2603:10b6:208:3ca::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Thu, 13 Mar 2025 17:13:43 +0000 Received: from DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088]) by DM6PR10MB4313.namprd10.prod.outlook.com ([fe80::4f45:f4ab:121:e088%6]) with mapi id 15.20.8511.026; Thu, 13 Mar 2025 17:13:43 +0000 From: John Garry To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org, dchinner@redhat.com, hch@lst.de Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, ojaswin@linux.ibm.com, ritesh.list@gmail.com, martin.petersen@oracle.com, tytso@mit.edu, linux-ext4@vger.kernel.org, John Garry , Carlos Maiolino Subject: [PATCH v6 13/13] xfs: update atomic write max size Date: Thu, 13 Mar 2025 17:13:10 +0000 Message-Id: <20250313171310.1886394-14-john.g.garry@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20250313171310.1886394-1-john.g.garry@oracle.com> References: <20250313171310.1886394-1-john.g.garry@oracle.com> X-ClientProxiedBy: BN9PR03CA0648.namprd03.prod.outlook.com (2603:10b6:408:13b::23) To DM6PR10MB4313.namprd10.prod.outlook.com (2603:10b6:5:212::20) Precedence: bulk X-Mailing-List: linux-fsdevel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4313:EE_|MN0PR10MB5982:EE_ X-MS-Office365-Filtering-Correlation-Id: 64db504e-994b-4c0a-14b6-08dd62526885 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: TA4mqskEFr3EhOgUGjGUNCg72S83kkbxNNAepML70KrNXKkQFdiHhjlZfXvbm1sVUcFkd1V7AQ9jv59NoeP6LkQlpRPHLSx7kVwYqwj1tXh3MkJHxvZPz/B/EJ6bX8/a1HYsU3nOz+xramawk92+4XaRJVs8m3+8eoewpfREp4VS5qT9OPLh5B7RUlZcv2G76WPIHbBg8+6aHD/34eb4mnII5dj1tjxTrq7sT9Ht3IE8X5mDM20bQZApms/WsizgCqW9FXuheGrG5YcVPuC3VEet3VhGn+ekRAQUIJ85Xjfz8PVlyS6V2VjScP/P46uv6Fa4NyM85+vBCTkN7COkedUnNU0AYKSVNAESWI02Q19jkc3Qek241rh2tzvONeXetQ+XVyIpsJct0+u6J7gB2Q0b2HAKYIydT0sUVNa3TZhZ4/Zq2OB+OZRZb3ob7hEdJr6O9+IAqs0f6Qkbkf5d3fUBV48l85xqv6thH6SqlqqS3v2BqtHtO7/47MgTG7uQ4R3+S0QDsNpFxzymXap66g/lqmAuElyZmkexXgWR5iCrs0dBK9XNjWQaotX5ASkIHYYKsI6fpIjBRyCCLyRCl0FZbu4O9BqZCpNgYmC+iOifsL7teSLqmeeqRWmdz74buWGxNGVoxATx/706p1Co2fBbH879dei1+IZTY4NakaDo6+n1RQamLiSxsSOVTXWmAPMYFwPERRlzwZo7kwehjkumwlbYE5gt0Hyq0EuxxBx3EPhVqUPXc9+Oc/YilceTjD/kI2u+zme3ZOQgThLRL/w7zTcwVRDfl9g3wGxUgllxvS346QL+3jR4OQZHF3EKOaT0sVUo3l6T1341dbkBO9+zf5+9ovdXlX1v6fABFSUibwKaWtJO1pptsYcPEEE1UKFcAX/we6+JGMMAt3s0WoZiZOVQZTvwjFlFPjHoCdQHT1s+Z5G/W+07lc5ZuEG5cV0cbFSFZ66urEyDcT6wBjLo/bpYGb4zlwfXTf1q5/jnyFy3D1mJv2UHMJabir9HcS5VDNdnMV/bD9rKOvKAZx/i+SZhz6s6oCYWutj8fCFdCRFH+cp/weGlgBlvT4NM11lbWgzmyFsXnj1pk7GUtwvCQy2Sr0MVkvT+NiyF20CR4sk8zUelAWG08IsYESYlCsvGgNVX38yQGD7Jg80zIBNBFGOS/EtLoDYt70ujM9/L0MYnWq7nFno/aedTIPIjs7dSJdKzNPAVaX28/9Wr1aCKaFg874NR3cvowxiw0Jr24kIXrf2skhztQF+oNj2fLGLHPlSnOZT/humfmR7Wgqnd+x16rzoPlQrQ70oO/cHEkFXCCskAdaMCfgt+T1dQThDnXiBCacC2Kt2CydoT2KI94tBW1kkm1nxvURm+lhLA0kuSms4191WxhJriEe1O X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB4313.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uz3wcbgvo4c+kW+5ypkA8/4bUyYfh/0csWenpCV3aXscn6WYQhfSll38nbJfq41VIDIGSH8P8TCU2SIM9JOIXPp75CBGygMw7IBLwxPO5zoe6OCHEC4qAHZPlxg5SBj8Pi2oNSghj+rEo3Th9AMxbLEavq0pZp6spy9Pp92uEqP7bqIARZP5+qrbrklk3hvaGzGwSgdGNXZCFqMd6MVfk2ND7bmdJaah2B2lFChYvaIqIkcR18G//iFc8tooOic7QSM2+734a/cOFVnPjQbfniRa3X4yDm9d3k2h8LlGtX4kJoAY+QOrRAeME5TzSC8yskTY/A7noB5zLJD1myhoQ1NjfIKhZX2+SwuqoKpUv1+MjG9L2BvzOtXAITDf9/4iIBC8yUl87HlFzFz4Z5nIgwoxHi/cC3fJuWZ7dKrC0zBEyASPzp0/WywLUHnR/wTSZn35/Ow5TQXJARaV6cMKpfHRDF8eWHL6wLVOiZ2IFnWPvBWfG0xoP+jQ66Q8/6O3/LxOH52qfWRd9UMm2fxy5DyDTildBxNXFRB8TxGhgGZ0pEcCmDN98YGzk2wca1y7tJaX1LUFNF+en5ohnv9+zVGP4uT/gBeynrQIJdMuLwAAvdBDqMuTI3/lh160JCJciWjxbTHU0dBupH5tNO4zhayWS5mtF9d5Auskz5/Yptn9hAJde8J3/5T5EiYzqB9LwlnngVB9M3BHOF0O9L791mMSO4Oox7hQNPdYar9X+ybdFflJ3EeIrYljHedpWbhXRdhtNQ4wZnTfz+H9h7Ty5dHiKGPVGwpntIWobPAF/tijmea0FBfzKWqisfdtIjNzKkDLE4hfsCitMG0JFkwhTJpfvYIbn8D3SqWTb2Naxp9i2UMvtzIcBVyH9y2NPk6YOl2txE7klR1O+V/xbyG0TKGIeEhkM87PHjbTo69hC7b8+iHvzycXjOvzLI9U5ql1srYcH7b+s+ilbLxSwolaAUWZN2M+Yjdx9Q0b8qGixwJBbrCgLGI0fsx87lGo6mcIA8o8exkoeEgIHjoLgJHLeRxLYBrw7TKyzYBlqdxm7SE/nbvtytOjiuoftKl7smtWeBnL/sBKvZr6zXWo7VASCEExstd3Lec7fQSrbHbbyjui9TK2RzeMY5AHDKx67Ajd78ImzVyXCxHnLWGDTJVNwWsn0JPzDQHgZTUH018ali9GfK5tPIZZAjrHTOpPDGv/gkUW5BuDhkIUjfw5GjsT82z4G2fmuRD6GJ/LaS/Ondmb2d/t6f4EX22NNdAQmgBVMH7RExsP0Dh47x8HmXTRT8OIJkJxmI4lMPUbaF56RANn1WAu7tnu34QZ049Lsfd6oTBzc/fdCA/dGXq+WPk3vF4dbBotizIjDpMw68HxS9vfhDvs7Jws+zDuRneKW9D/9i32rr24HU2IEBXRgoD5BscIMndBT83Ke9BBS30mStnMCJUDbq6nMv5cA2eAyr3WHx7hwhiACnXh8awbRQPn3TsWBz0K/WsSNX40WldYR4gmLqKrK1z16solBy8cGRTfGVWZZBOaycagjEfIZsf16YAfsKKukSj8JZrE5TKzXwI3mRTJCGmaAG6Sc28GP0vfzdol31JfmAr8rimOGIE7oQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: OOkTld4advz2AXmu/qqu+tcjHTFIaMB2cT11qMmtHIlfoFzFExQjHBdG4oCJ7zyNnImB2/ZOkhUN6lfA+viENeaVjY/DX0KahCbzBCAI2tvK8M0dtG8Y4CsyI7OwxqcemxEWR239OSxDPbE0GocrTUMpzJ/lpkiBwJloGTiNcm1pgUVNCJ2SQnvrpGlTO5R15eP4ug/HBOjsQKQxewL7J9LCj0WirAQTmroUAJjJJr3llGCeTSp3kqr7m0g/V0OPHV6/U46IaaZwrE5J2LAKRiKz4f1xPGGfnh7ilNFxQARvwl9FXC8X15WVBZ8hgvgNssk6qAvTBXLSu5WtWB9JCUH3KNwfSSe7CgoMZ05/spruxQh17iDEq+j8aQir39zKpON53Ei2GFiTASDn9rxyl7BbMCQUjfiww9oSElhHwPheUFiFRnwSWHNsDSo2cAq4O915O9u9MHEhTIefB7UC33BXYImmuoZPZWltGW54Q5lNzHgm7fAabH61zP08Pvvq1zsuy+IBhQl+5bGB52wFbx8JaEWoAFOPdG2VzatInF3dKBcYd6s2NzjtvU69vo3Muvao9ggk0UBH0qWe+1exIlrBJXeQeny2epQxHMDnzr8= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 64db504e-994b-4c0a-14b6-08dd62526885 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4313.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2025 17:13:43.8358 (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: 7LO3ChwujIHXgAwx0FQD6ipLLr3x6DdFdhe9nTSlwuyVpqE3rLZDfRpH4RfC2j7yoM2KzBXkFOD07Ml2+XfuWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR10MB5982 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1093,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-03-13_08,2025-03-11_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2502280000 definitions=main-2503130131 X-Proofpoint-GUID: rZ35P1BLJX9pNfk-LBcFeXGgZZ_3es3f X-Proofpoint-ORIG-GUID: rZ35P1BLJX9pNfk-LBcFeXGgZZ_3es3f 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. rtvol is not commonly used, so it is not very important to support large atomic writes there initially. Furthermore, adding large atomic writes for rtvol would be complicated due to alignment already offered by rtextsize and also the limitation of reflink support only be possible for rtextsize is a power-of-2. Reviewed-by: Darrick J. Wong Reviewed-by: Carlos Maiolino Signed-off-by: John Garry --- fs/xfs/xfs_iops.c | 14 +++++++++++++- fs/xfs/xfs_mount.c | 29 +++++++++++++++++++++++++++++ fs/xfs/xfs_mount.h | 1 + 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 64b1f8c73824..7c22eefd6b89 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -615,10 +615,22 @@ unsigned int xfs_get_atomic_write_max_attr( struct xfs_inode *ip) { + struct xfs_buftarg *target = xfs_inode_buftarg(ip); + struct xfs_mount *mp = ip->i_mount; + if (!xfs_inode_can_atomicwrite(ip)) return 0; - return ip->i_mount->m_sb.sb_blocksize; + /* + * rtvol is not commonly used and supporting large atomic writes + * would also be complicated to support there, so limit to a single + * block for now. + */ + if (XFS_IS_REALTIME_INODE(ip)) + return mp->m_sb.sb_blocksize; + + return min_t(unsigned int, XFS_FSB_TO_B(mp, mp->m_awu_max), + target->bt_bdev_awu_max); } static void diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index e65a659901d5..fd89cb7a83fd 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -666,6 +666,33 @@ xfs_agbtree_compute_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->m_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->m_awu_max = awu_max; +} + /* Compute maximum possible height for realtime btree types for this fs. */ static inline void xfs_rtbtree_compute_maxlevels( @@ -751,6 +778,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 799b84220ebb..1b0136da2aec 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -229,6 +229,7 @@ typedef struct xfs_mount { bool m_finobt_nores; /* no per-AG finobt resv. */ bool m_update_sb; /* sb needs update in mount */ unsigned int m_max_open_zones; + xfs_extlen_t m_awu_max; /* data device max atomic write */ /* * Bitsets of per-fs metadata that have been checked and/or are sick.