From nobody Tue Dec 2 02:05:07 2025 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11021106.outbound.protection.outlook.com [52.101.62.106]) (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 1FC0015855E; Thu, 20 Nov 2025 15:57:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654282; cv=fail; b=f/hNO1NL1MFuaugDi4EUovR0IrhsDhUJnT5h1RQLCTrXQb5cq1V8UUhY8Sp6jAOiamGjh5VtpRDrB+IG3SK64N7jFP2/B58LkRbe3RU0FI4EundmiowaIOeAs6CBk7+TyjXvtvyuUA5ypQ19XrUGaEmVL09ptzJmNOLltIZ54m4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654282; c=relaxed/simple; bh=gYdhcm0j68SpC2NAeryt3K4ek98UYEAjSHGiORnVQis=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pU7CuQ5tlBcGpfJU8DFviXsGWHT/8F4+wYQTJPUWUpergcZ/1sDRFsHaNkWOKl3il1hZzWtGd+OnaXLbiGgZnoDPsVmmVww90dR/NjFX7Szbij6T27Juzcjw2STuIgB9BpMFhbPtOH2n/kSN69pT08expkWrTSP8nlNdT/lFnTQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com; spf=pass smtp.mailfrom=hammerspace.com; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b=UkE7X3yq; arc=fail smtp.client-ip=52.101.62.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b="UkE7X3yq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=E9/3FZFUjtGxP7wh71S7CX/IyEZzkUw+k9Q2zdoT/4B7cwID0qghLuKUtxFjkBWUunpNsZKKJJDpKHjsSgIT0yPuiF4InRrMNXCgy1u0XmvRARqAgs2pzMXWjYntmSrokq2D4bx4K6C6401BOqwuitza2B0eP6lDb6oFltAfKteBQQZJU7AQrXjTsOrLxBiYh7PeHH0PDFagTzyyBdhECZRW6XFkY73kvjWv1GXTf5XjrEqTgeX+ykk4xRC0h/y/6XJnXFRxoWcBWPfaAkeasP4AU8Avbc8UpZYcYxQ2PZpFtEkhNTVJyBKQ/EqhKzdXBhoLqSk2t0Q0hzSowWoc3A== 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=S+YXgMK35SqjkIRzfSb/7XjjLJliUiK8c7M5LVZtVyg=; b=PgAMpKbNET5PsBOcB835dA1UTzvvTGjn9wwn/TgUIlQ46utXVEjqlftV5U8VsxxRncxt01KNPxiGxNiMDEKQbBumhhOYVx0vVrIAWjqwRVwINlMko79bGaZdK2jy/5EKt9/+t3ZN3UlG3lxp+lpglVVF3/OQG2WEcQMXGeLqUpEH3dkUTxt7zxq/AuqCptZ/+vAvnIWADBDpGXxGF362JuxaL+XS4Lsa5lOTifhq4W6cvoMkvGrmHYL9THGB0BuI5/6wP3LwkkEtwjP47VLIkoC84uofvx9ZN9WNSRuDYu4fTBCpkIGjNzrarKIbcCcrjpeTa72Q5aOkP+mQhcoVYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S+YXgMK35SqjkIRzfSb/7XjjLJliUiK8c7M5LVZtVyg=; b=UkE7X3yqIjlXP1yxGipRwjG3NInbDItQ6HCDtKZaQvmQEi0nwJRB9NkNt4FUSX6IfYg372xLuRLg7k+VceuSTM5DULrWmG+cwjbgH3y4X9LyNJO91R8ea/1Gg5e/N3W5LyKKdx5txINONrfEG2YzSjPyi9G8oY64nZ9VkhjMg1E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=hammerspace.com; Received: from SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) by SA3PR13MB7319.namprd13.prod.outlook.com (2603:10b6:806:480::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.11; Thu, 20 Nov 2025 15:57:54 +0000 Received: from SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d]) by SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d%7]) with mapi id 15.20.9343.009; Thu, 20 Nov 2025 15:57:54 +0000 From: Benjamin Coddington To: Alexander Viro , Christian Brauner , Jan Kara , Chuck Lever , Jeff Layton , NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Mike Snitzer Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org Subject: [PATCH v2 1/3] VFS: move dentry_create() from fs/open.c to fs/namei.c Date: Thu, 20 Nov 2025 10:57:46 -0500 Message-ID: <0bc8a9d976d295736911f13db19e303f3444bf59.1763653605.git.bcodding@hammerspace.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132F7.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::3c) To SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR13MB2365:EE_|SA3PR13MB7319:EE_ X-MS-Office365-Filtering-Correlation-Id: 74301932-c273-4a51-f303-08de284d90aa X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|7416014|376014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xX202lQYzWEDuA7jyqthlOIAvSc1j8osOi8ytAbqwtDpglXRZ5vW20WcIneA?= =?us-ascii?Q?mOSPpu7MkkdpOOgX3cvho0FDzi1PS5pgVwNe9fau2MSxBSzjVZJRUybsZOQQ?= =?us-ascii?Q?pMvljq/ocxPTPNNg2OmGDxc7/XqJOaWQzmpDuRhUpYrNLwYU70r6QpJnTYoX?= =?us-ascii?Q?MChGgeK81E3QqtMsE7QoK60rPZBLI0L9Ey8k2NayXqM/ykIPKyS2e6d5L+1n?= =?us-ascii?Q?tfHD9Y9pQUscgrBevHUmPomcZ2CQUCHDqbEtN+cQp3zzZ+mEwuKOb8dO2AuG?= =?us-ascii?Q?Az+Iq2K5a+wo8OAR0p2wjvj9kIaRkRTjkevTRkLnm+VoO18v3W8+nMxUpC78?= =?us-ascii?Q?Py5AG0oJZMy9eyFjy1nL+B1j1H84v21GiTYwwCXAVFD8Velfv1sw1L3CqcWa?= =?us-ascii?Q?5SvjQHVZbJH9ZqVd+TTAXSrlyFRheGbvTmrYWpL9ioCB4AdA1F3AWqXhROn9?= =?us-ascii?Q?K3RSrppuWH4McPHeGVHeNsQTOjKCVKrqPiMk4smh/ptXs1bVgqEwHOwzHZ4R?= =?us-ascii?Q?R1rvFdIPTiT/jiK7EV+frdqveImMVFJWctdkEo39Cc7cqMRwpQ6KzbiKD+AD?= =?us-ascii?Q?miwDWrRKDV31uamelglmPXA33+tApM1ay/UkkT4UYIrWA8/cOldP6u7baTGJ?= =?us-ascii?Q?99zx7c4FkKrpAEWWwbhrIj1LmONyOp1VlY0jlk9/AvTCGTf9v1KlJ6Nk0p7m?= =?us-ascii?Q?pcb6z8fOYEf7NSgTs0ZyP8lJyU/KwAEILdLXJbyNw9cP/ZJTBxpaWAUXV50D?= =?us-ascii?Q?fOxUm+WD4e653lzpYYjA+vo2LArYIcgffI6dlNUYPf6jOaIdwOIA+KZLv6jj?= =?us-ascii?Q?S9hi9gjAOt719KMJBUezhB2T9NG9J6DAzHSJ07Dju6RNQQaSu5OTKRRC3a6T?= =?us-ascii?Q?p55DnL6YvYdZbw62fnlUV2pn1J17zIaFVnTvU3IlY7kde5hbhlJtfFNu+dn+?= =?us-ascii?Q?pPiS1HcJpc0cypBsWYa0zJxcdcuEwq6anxh48vhSnQpceylXNEkBY6mOfF9Z?= =?us-ascii?Q?pwYYF5PXqDHDQOlSyqmppieN2bi2Flzs+Zz6zs7JahkYzNcey2TO+6nqz1N6?= =?us-ascii?Q?iUVnmFWiFJ3Fmb/wGjUjSsXFawwjVqEf0BKcvpf9dR6HAxi7c51wZaq9D0O4?= =?us-ascii?Q?eQJlA2FmGzklAoFDuWUcjv+fqkRC0jk4fAt5tFGOezvVuuzPIYGvWWktO9Ns?= =?us-ascii?Q?A71h55TVQKzp++KCtIplLqup1PQve5Fyp0jQViR5JtBdynt2fr0Rnq+/T4L0?= =?us-ascii?Q?Qsho9sP8wfhqXWKVm9UXTterM7P4ckoBUI4MRKTyqEh5lGjlv0l9iEDdt1Ng?= =?us-ascii?Q?ZAk0KOAVNeCmrwyP08OK0bE1D6uq9Qs/j4thq9EI0lrVk4VcVI3Zf2ggGWo1?= =?us-ascii?Q?hEEu/V+qIaNcJZ4IPjhBXEB+GEsr2Dvzz9rFIOZ5oxH1mzhDHXveCjOqY7/n?= =?us-ascii?Q?imBci0U2SJCLb7p8PLR39pNe8syAoNtB20+/KxGbyn0Q8hnZ7n5DSKzFLC/N?= =?us-ascii?Q?Z0jyk4EWHJ2ZFUw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR13MB2365.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(7416014)(376014)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?obiA0o6yGP5EAFUMdrLIr8fLjRXqxHOqnGSX7labAGetDDhvAoq8iLxQkM9T?= =?us-ascii?Q?bQ6Vr9ccl2usjszwPucbj5DEjlOCgI29pEGvegmlygIQdHfAuAv04E0XLTdS?= =?us-ascii?Q?5eHk44/rO+/axVLTWsU2HaLLgZkbup5/8YsWHZuM2zP6s1nNkSs79PqZtvh1?= =?us-ascii?Q?5+2Hkh0iBmAISQvs9HMwAGF7RJH8K/+53ARPGVVSM7zcSoNhUlPHnm13pxwt?= =?us-ascii?Q?mhS4HmjcQ8InqPUiL5dq2s5zFzTpwwDgrJDJE8KRjDdaWgeNb4ctLL45HIas?= =?us-ascii?Q?1MbBa23k2jwYMKkHbS7+XpZDmTkKuauy0QNnqla5u0BVKRoOg599LxmNuqJE?= =?us-ascii?Q?IqIMV8z05mTvrNDbTeIeCilfzJ8nl3Rx3dHm5BsrWCVWR+OQMuX9Zf1cOP7Q?= =?us-ascii?Q?y7OaeBfMfbVQzADOwfk4YltxRpWFUS3vqvpbWy8XzqqlO+5hHAlWJf2gJoFo?= =?us-ascii?Q?267MWnBwIkX/Iv6RHVnLJ3WjWVlffSvJKC9kITqGomy/H1WTqPqrWvXsfgP1?= =?us-ascii?Q?o59Piw18v7TGlEi8yGe9ORjXBgVmwyI+ApCDCYB4/ojUK8CDhF7lJ2rFoOH9?= =?us-ascii?Q?dgtnFX28n8orWF4tcgrfjGrHmHiqtN5geaVbz6p6pFGC6VqvKy5CBA7DJe5C?= =?us-ascii?Q?vP46ksY/qpG1s/xfTkHoWIysQIh08c7pTZAV4ummns+Y30VS0myiOXaa4zzE?= =?us-ascii?Q?5MFHtZ8TdMDwc+NVHBRBXonMnOCzmNHfuvLZaTkLK1kF4ysQbi2I4hRLlNAK?= =?us-ascii?Q?sMfkC5s260q8X1Xs0DNHt+cjuPCccUoL3szzaEE8N2/E8QpsO7anoc498/Ll?= =?us-ascii?Q?RmF38ncK2/MB+zIQOVTBCupw++1W32oGOJuSSUrOvuj24uGdAoC1KE8t2gsS?= =?us-ascii?Q?NhvNQ81FzL62OfG9yLNIIuOORTc26xi/8pfGIWLAfoOnEgPTsnrwqkKlwlh/?= =?us-ascii?Q?Sb92Zo8F/KCzEeqhJ943ROr8Ha1S6g62FPxoHPEcaBwIDnjIGDDY6JEIVqxT?= =?us-ascii?Q?QONitQzTGcgDjeIL7iLu/36YBgM0bIfKHbMb7pUGA0wNZ/RTA0EM5jG5twl0?= =?us-ascii?Q?53G2gXf9qG5Pw+pCUuoiij/jclQC4lii9j3u/U2GrGraRrka1Z4Ti4kw6GNd?= =?us-ascii?Q?GShziqBmy0Hl6C8bz8tLb/PQx7oAi+UkmMv/eBerUEHrC3fLSn6I+jW8hrd1?= =?us-ascii?Q?fNMhppGjU29zOrgL25D5drinl5HWHRcqR9uf9oI41Be7j5iQFxN/ocj4HkwY?= =?us-ascii?Q?xj3huVd34bfuxN2RybRmTVc2vc3NtBsszeouUJUS1hyUs6VriB8P5a/xutSg?= =?us-ascii?Q?ApuQtaOJe4MLZBAzMOpVTlHmp8u8Cbl238bLr4lb2/FNbfcM7HnLO8zyvVmX?= =?us-ascii?Q?8NkeGOIAOHb3RmTfBS5qvNbioOM49kWgHv8IImX8z1M5lzAQTnUJbPJqn+Gs?= =?us-ascii?Q?Y6rnoNGvCu9iefn2Xrn6qKPQMdXzGu7NgseoMv2vDTMDRCfFmc9NFirZlCCt?= =?us-ascii?Q?30i60pwSkBAiwyROz9soAozSVGD/V0OGzWwndT/09xsIY0a3WLSicutdcyu1?= =?us-ascii?Q?RdzadTF5wH1BUTfXSkCiY0xhDVo+t5jAhWD+klG3O5H3YzJfgoXPVptYPoJg?= =?us-ascii?Q?6A=3D=3D?= X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: 74301932-c273-4a51-f303-08de284d90aa X-MS-Exchange-CrossTenant-AuthSource: SN6PR13MB2365.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Nov 2025 15:57:53.9655 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eDGWsTx/0/HOPJJKh3w7P5nRWOTm09m7ERdLFxo5wv5X5j2dFHk2tzWfvjrb4cQ3oeul3KvB5iT5dzzMKMKD06VtljVKDipXm+0yunfRuMc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR13MB7319 Content-Type: text/plain; charset="utf-8" To prepare knfsd's helper dentry_create(), move it to namei.c so that it can access static functions within. Callers of dentry_create() can be viewed as being mostly done with lookup, but still need to perform a few final checks. In order to use atomic_open() we want dentry_create() to be able to access: - vfs_prepare_mode - may_o_create - atomic_open .. all of which have static declarations. Signed-off-by: Benjamin Coddington Reviewed-by: Jeff Layton --- fs/namei.c | 41 +++++++++++++++++++++++++++++++++++++++++ fs/open.c | 41 ----------------------------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index cd43ff89fbaa..e2bfd2a73cba 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4191,6 +4191,47 @@ inline struct dentry *user_path_create(int dfd, cons= t char __user *pathname, } EXPORT_SYMBOL(user_path_create); =20 +/** + * dentry_create - Create and open a file + * @path: path to create + * @flags: O_ flags + * @mode: mode bits for new file + * @cred: credentials to use + * + * Caller must hold the parent directory's lock, and have prepared + * a negative dentry, placed in @path->dentry, for the new file. + * + * Caller sets @path->mnt to the vfsmount of the filesystem where + * the new file is to be created. The parent directory and the + * negative dentry must reside on the same filesystem instance. + * + * On success, returns a "struct file *". Otherwise a ERR_PTR + * is returned. + */ +struct file *dentry_create(const struct path *path, int flags, umode_t mod= e, + const struct cred *cred) +{ + struct file *file; + int error; + + file =3D alloc_empty_file(flags, cred); + if (IS_ERR(file)) + return file; + + error =3D vfs_create(mnt_idmap(path->mnt), + d_inode(path->dentry->d_parent), + path->dentry, mode, true); + if (!error) + error =3D vfs_open(path, file); + + if (unlikely(error)) { + fput(file); + return ERR_PTR(error); + } + return file; +} +EXPORT_SYMBOL(dentry_create); + /** * vfs_mknod - create device node or file * @idmap: idmap of the mount the inode was found from diff --git a/fs/open.c b/fs/open.c index 9655158c3885..8fdece931f7d 100644 --- a/fs/open.c +++ b/fs/open.c @@ -1142,47 +1142,6 @@ struct file *dentry_open_nonotify(const struct path = *path, int flags, return f; } =20 -/** - * dentry_create - Create and open a file - * @path: path to create - * @flags: O_ flags - * @mode: mode bits for new file - * @cred: credentials to use - * - * Caller must hold the parent directory's lock, and have prepared - * a negative dentry, placed in @path->dentry, for the new file. - * - * Caller sets @path->mnt to the vfsmount of the filesystem where - * the new file is to be created. The parent directory and the - * negative dentry must reside on the same filesystem instance. - * - * On success, returns a "struct file *". Otherwise a ERR_PTR - * is returned. - */ -struct file *dentry_create(const struct path *path, int flags, umode_t mod= e, - const struct cred *cred) -{ - struct file *f; - int error; - - f =3D alloc_empty_file(flags, cred); - if (IS_ERR(f)) - return f; - - error =3D vfs_create(mnt_idmap(path->mnt), - d_inode(path->dentry->d_parent), - path->dentry, mode, true); - if (!error) - error =3D vfs_open(path, f); - - if (unlikely(error)) { - fput(f); - return ERR_PTR(error); - } - return f; -} -EXPORT_SYMBOL(dentry_create); - /** * kernel_file_open - open a file for kernel internal use * @path: path of the file to open --=20 2.50.1 From nobody Tue Dec 2 02:05:07 2025 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021073.outbound.protection.outlook.com [52.101.52.73]) (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 BE0AD2FBE17; Thu, 20 Nov 2025 15:57:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654282; cv=fail; b=n9RwDwftfChs6xsiF37MRdyfpA991E4e34f6X+3gQ3SNj+WKZic+zSfe6vzDS+00+8nw1oGvSQr+YHFUKInx6avctxLOMMKJEVRDi/31rl5apA+u9ZCOjs9Tsioyz9xKJuZkWKUlJvXSaLqUPaT7XN5mSolDPawbfpQr0v1Anac= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654282; c=relaxed/simple; bh=H21omN6K9njdM5Ic9L6SfDteYW5bYiW8oELpFfd1Vuc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=P3NqWU1RLayq7M+r1roIWiWyv6pGJcDjyKqWKZXPySUqwIbzrVs0Z+AIMm93GFXA0y9bsiWrVGR+XKILGbAp6Mpbfhlyt7+qO3tWBW5f67lPTXHFDRfST0ohW3HHyXJbBlEkpOM6qGQiu/vp6UpAC/zn8O6wh5yJZZRqweXSF+4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com; spf=pass smtp.mailfrom=hammerspace.com; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b=gAbZeI27; arc=fail smtp.client-ip=52.101.52.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b="gAbZeI27" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jVEZTedUBzVWBiYu7GrAW1oaT1QKo/lNGQ9kt5jREdA9oIOY7dwwCOLUrIv25Vog3ogmJYmut1k7xiZEhs5DmkgLqN04b0Gu1xI1wgx9m1wTbjUfEE/amMGAXy4nEtW0f4aTzy96ayBgWyxIv02zMQcs1sVs166tDzgmgab0IPt7aGOxcfgIqfWGqiQaIVsHj3N1bCh/3Qu+qMXazr+jbgzCVq53HK5y2cCQSqPc8oWMy3ILEYFA4PH1ljYjivAiu1TLtibaMqg6w/eiL+QAEcz1C+YkzSV9gRZCxW2PZm56BhUT5MZonvkewMKvLomF4bh6tjPSUqACJGyQx81BEg== 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=T+aym8iI0I5uE1aOh9OsZb9dM1e81uAhJSYWlC2qn7c=; b=JgpupnPUtqYIahrZ59PnHmbDTCQb19kLpEZrFzfe6QzC1Rxs8zghNGbwZVuV2H9OwEp3SxLIzxdcuNLIJEgjwSG0W4eM1r4+yXbKztiCrpP0x27M7n/03z5oa8V5io6vJ5EkB2llwd3s55cUwSb3p7g1Fi1LIyUmYcc7zk4zCTpPMyTgwUlL5tNxMIrNPwQDbiIrumjxQBoyqaNVQJkimd0OFnQE+4xQQdTpepkwEsj1evl8eFq3VWNNlR1+Z/KutoF2Ybo7z37GJXDVKOZoYNCVPilpJdATPUgiXn+1/mjbzARcGJRVOo5GMXGlD2LIKiVe13RKCkZWG+bDR35Txw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T+aym8iI0I5uE1aOh9OsZb9dM1e81uAhJSYWlC2qn7c=; b=gAbZeI27VuCvtGKUpzelXLN1d3kFFw1Cr+/Y4ZWMk3BeAajF0tmW2T4CUtSinz9PzUC4w/3k/hgxr9rRHp6m5TLqgrdB/my9OyVyXWc2p8fSTsumjXd/HqqWr4JT7wwwtareZ4V/yEO9xrYRMGV5856tc4cv383Sm8VjTaR2rYc= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=hammerspace.com; Received: from SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) by SA5PR13MB7587.namprd13.prod.outlook.com (2603:10b6:806:47d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.11; Thu, 20 Nov 2025 15:57:55 +0000 Received: from SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d]) by SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d%7]) with mapi id 15.20.9343.009; Thu, 20 Nov 2025 15:57:55 +0000 From: Benjamin Coddington To: Alexander Viro , Christian Brauner , Jan Kara , Chuck Lever , Jeff Layton , NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Mike Snitzer Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org Subject: [PATCH v2 2/3] VFS: Prepare atomic_open() for dentry_create() Date: Thu, 20 Nov 2025 10:57:47 -0500 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132F7.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::3c) To SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR13MB2365:EE_|SA5PR13MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: db42d8f1-4b7b-491f-85d4-08de284d91c6 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zHDw6ff43kMSrJz2KWIHJp4oHUgRg+ZKNZeQWUtIMOhBd+xpckblplPwwwEP?= =?us-ascii?Q?hNGPndus7Tib4NgqMB3qs0F2fs/LU1WImL6QqvR7fNKjWf83BCyVOjk9kC7R?= =?us-ascii?Q?eaPJ6yzCF0VN1AGa+cepma2Hcbqmu/f1h2YnXFU4kMcLF1tYApe2b81a/IBO?= =?us-ascii?Q?PQAigL5GuqQzdGtw9pKXGNiontLOGDtwAK6Jf0+Vpf5pCXJ6tBhUcN9F4/F1?= =?us-ascii?Q?FsPfh/+OreBRAgTl94waF+29Nd0uM+yZIgHerHQZj8KqvgX7zNKD0Mn+8CQH?= =?us-ascii?Q?uVajRh7PEBHTGM7DI1I/mefRkF1cV3jWn4JZY7rk297mdzKdFcTfSU5/oQIb?= =?us-ascii?Q?jQZ7Afy6yPZXWkKe8lzB8/BCI2cE5P01c6E4RgKl0AN3TlIbIlq1g8m+ua95?= =?us-ascii?Q?ZPu/XDi8UMQoo4VpUsqCaCxS4xs1pimMrGoT9tqgvxiBjOP+BoTAoltx2EeJ?= =?us-ascii?Q?996ybOE8jzqaYzsada8EfkL524xc85d03f1xqyhjlHEOrIU6u+tbKfgWgw+p?= =?us-ascii?Q?1GcWGK96GNa/Humfqex2PW7G+cE1b7eY/ySA02GJQVp+B3BajyB6crh+nwhi?= =?us-ascii?Q?afNhiCfmioyIl9hIKN9RAv6C/MtnxBtA0RI5vczYmxAHcVIZahxRDfnJjcD5?= =?us-ascii?Q?p1VRNeTsjRVKGni/jzwAHG4Uav/H1Bdid2Z0T6wkuVyM/cmB+aEyl5umYbvg?= =?us-ascii?Q?hylcQXR0tjvlGmUFmaH2IERRs70TnGkJl7TPiiaS3TkX71SGH8Y3NT/lEkL3?= =?us-ascii?Q?ee5dbcx8QxVKKX/TUhlOEl5wS4dcIFQh/lNTqlfjY+BeUoq9ysok2HW7db3N?= =?us-ascii?Q?jAUzjgHz6emjOf113f0gAeCN2r7xFlihTte59pXlNnnajIvg1OnFjoJIfl4E?= =?us-ascii?Q?BGkT+5Z0fof6uB6hQpvPgvsiKkD+YhJn77q4qK0lddzXQ4b33R2WJpBaLIH1?= =?us-ascii?Q?UexPV2TPzhmYKEziPC27SYjJBLHcjDngoiiI+5KiATEXIVHX6YuY2J/VeJYH?= =?us-ascii?Q?ZGcXcWCOs+LyY4ha733wQAMeBueso+7BNqnyblEF+kDcgrtvpQmPdyRR1vJ4?= =?us-ascii?Q?R9JPf6ZkeGkmAlyerJWaQEB4oHTgZVvzbJKbkfqs6TZtXKOFh83mSQQXlN6V?= =?us-ascii?Q?ut3Hn0y8ZmABdIxD1j50iVv9C+ixxJKQOPWGVoCz4UIqpM5uMd+Vhnnmq5mx?= =?us-ascii?Q?aRe2TUWh0TTNyWZkl5hinckwWHs84XrNrpFpiuRmSxczNbJKHf6DdLogPPJZ?= =?us-ascii?Q?2rUiP23xxvx5bk6XlHGGGX3reLakWDSCOW/THAoZ9Do19tlUHfM8q5AiIV2J?= =?us-ascii?Q?3aPYO5TYBRGSJh0J9Uh76tCJfV/cn/Z+8yGN49yvmL8kGz3MBk4UQaKvGPGs?= =?us-ascii?Q?li5OUEjk7GQzcsjZA3bu3JrrhZai3hc7IvNsr97W+jJDo0lWCF3dwO9xZr+z?= =?us-ascii?Q?P0yLqyjCIm9XJ0hc28b4LSQecAjo+JKeSzbbutYaTrXd0UgzpzBMgsfkGGcp?= =?us-ascii?Q?lnbglMAOK01O9TA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR13MB2365.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Y5gJ1HQeQzEA9+gGZpcwJjyeXwtZweGsM/YnobI6lv12ekXwZhthE9fyh0ci?= =?us-ascii?Q?OqkPtdRFsHS/aDfLWG358/gAFQenNVfBlICWRtxoQ29XpzO1A9RTIZYyyzzB?= =?us-ascii?Q?wduMdIsnlw6ODOHAIH1fmvWS+tEdxTdfCU1cfrilg2R/TWPPaMVx3KqOovtM?= =?us-ascii?Q?/HxWaERdfrCxq1dEnGNOEXyt6aW/C6vQB6a9l2UqN0wA2HyOoHAjpcP8TR4D?= =?us-ascii?Q?U/mySCRagclJ6oxwUrk4YG9U0nNEidEgN6WMwarZyu57jm6PXR8tzHI65N1y?= =?us-ascii?Q?MHUMsTCa1vNLdneWZfESZBAJ07Oh66/bUqxTMnAX6pkNZpzOc2EpSeWfcr3T?= =?us-ascii?Q?3mXBMZfjxcayhUY6QxEIRW6biS+IrQ69mzUREoZ6KfVtbrwjGzafTj2wgOBP?= =?us-ascii?Q?gN7MkRFF7iCBpRXhW0CmHHu3tmQPF/4/QDhqQcNh5tCejWdt6oZwQJUljGfQ?= =?us-ascii?Q?att9emNS0C6CMNwbjoI9+go3B2fktjFCC2gsunRjN+O2e6JhOmgxCBkHbK7R?= =?us-ascii?Q?xG0AHiVnlTa4QIJBW/eEZ8XNNioAqPdu8r76Gl1wOc+AgJMf2ktsteRZ6quD?= =?us-ascii?Q?rsayLDhv4QZBNqSnSdqGlrP48z5MwwYWZuHVPtMt1xy7ot+X07vYbBwfw5Yv?= =?us-ascii?Q?zL+JQ6ig6H9C6KAJUdHO2jDsMQLHMNKewIT1SEsEkpvoji9AreMFQn3i5mrq?= =?us-ascii?Q?Uez6MEzQWQVTz2+TZherLZeklXIug5WKkYi27RzNfs7jJ+90pTfkTMFe1tbt?= =?us-ascii?Q?hVjEXma/FSC2XZxjy3Tst13aWPOARGGTEkq93PGb5bXgYWahMsm8D0tZGsLh?= =?us-ascii?Q?bydm55dZ5lbRJF4YqwV4aoHf4O/jzBWY1JyeUaCu6uouYeeYT+u1WsQbjtrz?= =?us-ascii?Q?Md1wXX2CQtT8mgbruzSD7YoDaXWYJGk24/9FN1L2sQwPnxDomUGCkpSiikqZ?= =?us-ascii?Q?eciCMDwzb5uMIAAgR/+oYJKj+nyfEvFQMoMUC2ssz9jHcjkzxwhBuS0qnic8?= =?us-ascii?Q?nx1V47tXc3nBNWJuitqPbw4bOJjEo6jNpnr0Q1y3tbCpIxy5g+6+kAr/89qF?= =?us-ascii?Q?n8XwYxy67bePwpVCGmmQEJb/W8ONsMxuAwRBjThjc/CTHtzkjjc2OCvbJd/H?= =?us-ascii?Q?c9PZs8qmUQTL9OH/D3GQ//hhFMr3827Vomm3HEj5b6cONj6SSgGpS9LB0HPt?= =?us-ascii?Q?STcp4licKwDuH6afyBDOu33bhf9J3hCYaJf03puUoVMavq+DRe6xQgak5M/A?= =?us-ascii?Q?so/73TOffWL4HPwIgKhDlbzLo7oLt/SDJMDfWxSBCZGIBwBZfKUQamgBKG1j?= =?us-ascii?Q?I9rxYamMar6jrqIN5uJppQ7q35CASdXcABD3PfGe35RvOz8rKDLzMhUX8qoY?= =?us-ascii?Q?aGa9GCXylDuKUImL52GmZNO4VnZH2M4ubbjpsX7ZDI/vQyKAl3WUPtycJMmO?= =?us-ascii?Q?BoEg2HZVngSGhf9pvysJ/zhOUe//LM+KeBRF38g1EjGDkyo3ny0/4MlL7cj1?= =?us-ascii?Q?uYCg9fBejJ1Nh5X07rxtpC2X8dWsX3RZrxPOLFbg/ZlpsA63XLIuJaMFaHWZ?= =?us-ascii?Q?K25OLooQg0K0QM2DKW47UMv7OLjGusPrtUQdPY8c2VsfGBlpPjg/VcatqnVY?= =?us-ascii?Q?Lg=3D=3D?= X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: db42d8f1-4b7b-491f-85d4-08de284d91c6 X-MS-Exchange-CrossTenant-AuthSource: SN6PR13MB2365.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Nov 2025 15:57:55.7730 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dZfiysZLShS0hgsq8cC+E0yGZiF8br0h7Qz6P6l/GXt6d0P+dAkJMQprqFPAdGqZdIQJlJJMc7TZC0+fa4+qzzglFt6lvBuN8wH2AgjkBE0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PR13MB7587 Content-Type: text/plain; charset="utf-8" The next patch allows dentry_create() to call atomic_open(), but it does not have fabricated nameidata. Let atomic_open() take a path instead. Since atomic_open() currently takes a nameidata of which it only uses the path and the flags, and flags are only used to update open_flags, then the flag update can happen before calling atomic_open(). Then, only the path needs be passed to atomic_open() rather than the whole nameidata. This makes it easier for dentry_create() To call atomic_open(). Signed-off-by: Benjamin Coddington Reviewed-by: Jeff Layton --- fs/namei.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index e2bfd2a73cba..9c0aad5bbff7 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3552,19 +3552,16 @@ static int may_o_create(struct mnt_idmap *idmap, * * Returns an error code otherwise. */ -static struct dentry *atomic_open(struct nameidata *nd, struct dentry *den= try, +static struct dentry *atomic_open(const struct path *path, struct dentry *= dentry, struct file *file, int open_flag, umode_t mode) { struct dentry *const DENTRY_NOT_SET =3D (void *) -1UL; - struct inode *dir =3D nd->path.dentry->d_inode; + struct inode *dir =3D path->dentry->d_inode; int error; =20 - if (nd->flags & LOOKUP_DIRECTORY) - open_flag |=3D O_DIRECTORY; - file->f_path.dentry =3D DENTRY_NOT_SET; - file->f_path.mnt =3D nd->path.mnt; + file->f_path.mnt =3D path->mnt; error =3D dir->i_op->atomic_open(dir, dentry, file, open_to_namei_flags(open_flag), mode); d_lookup_done(dentry); @@ -3676,7 +3673,10 @@ static struct dentry *lookup_open(struct nameidata *= nd, struct file *file, if (create_error) open_flag &=3D ~O_CREAT; if (dir_inode->i_op->atomic_open) { - dentry =3D atomic_open(nd, dentry, file, open_flag, mode); + if (nd->flags & LOOKUP_DIRECTORY) + open_flag |=3D O_DIRECTORY; + + dentry =3D atomic_open(&nd->path, dentry, file, open_flag, mode); if (unlikely(create_error) && dentry =3D=3D ERR_PTR(-ENOENT)) dentry =3D ERR_PTR(create_error); return dentry; --=20 2.50.1 From nobody Tue Dec 2 02:05:07 2025 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021073.outbound.protection.outlook.com [52.101.52.73]) (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 1EFCD3587C6; Thu, 20 Nov 2025 15:58:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654285; cv=fail; b=IYXUwFyg3BA4Gphs7YNDWtVgQ2XmHp/ShP4qKSymjNNliQsgZynu1NZumF0wdP/jIdhSmx6wgWQKbyn2VW4kCNuUnPk97V6B1rPFwlcHVH8K/YeRzMWoai5ZVISH7/zzZomq/uxrAV+hlbffPYqf1DJn4MZ7z7WtN1n+KUlPLdo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763654285; c=relaxed/simple; bh=8WKoqqbKEqL65hTaT2wxT7FS6o9dZbS1kBSShrsJfJY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pxMz34xAmxKoQEn4WK8sIuIr8PgB2PsDe3AkPlHbvnDGo93/A57HpCl0Y+FYx5IQv8y11GOduWIlMFsVluYapzVHCgljdFGuUoGshnrDN0+Oul1pZEMO8bCm/irBTWyxV+OCKCuQLbRzffOJBep8mkvEuaIig1xQjmPCgW4hUvw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com; spf=pass smtp.mailfrom=hammerspace.com; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b=cVcZJsk/; arc=fail smtp.client-ip=52.101.52.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hammerspace.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=hammerspace.com header.i=@hammerspace.com header.b="cVcZJsk/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A1s8VjYT3OG3VXsfECVn3X+leXrAijeRrovb0j3ur/nOW9PXLETSoH0TrzKc55iEdam0jo7/5NkvAtWYitlvaOoKPNPi+v+GOrKYLf2r0vjU1i512UTTJpcoO+/3SyEttnGxAP9fTT2igM55UsL9YIsoJHY+OYdlTBRwA9GcPhUCOCrHTFRnzD+wk6aGYPb9nOqdtmnbjqXvnfF+OfD4OD8IWhNrv03PVBIoCBt4qJG/8SAjE1viq25PTYii5iOoDM3D5S5K027jh2dg/wqEpIF+Q2r0VC4rwgJsVNYb+AhSEPF79sas6mhiBFXf8i3EYdBhvw7Tcj7y9hyFHi32Lw== 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=Lk5m7dlrdqolYeHaIZhuZHynpUFfatlrJ9qa2t2yeyA=; b=wj2m0e6rMQa9dOeU8i8bQTZ0si0nsuFcXPTd//+ioD4GrE4de/EMzTCF4UGnUVRKKpeLP/lMDSOTx+ExUoFMTThqdy5ZHzLSLMi0cUukPL/hNWG8FHI+E5EJ0vP8yo95Luc4OBNrqH57P6RtjsaDBSpRG1/D1Eso9M2aGjG2A+FgL6ahU+KrX8W1zci8sZK0sDttswXbgtQfh6sznCploC5VEHBxhxV1zdoADUlS0ENfyNWQeIxJbpFAD76LjtIUZp+hGcGAMiyeUoJDHH+XUBGB/ZsedojKHoDLssehzG6phcLT3FfRtdtWmUFiRvC01xGhKn8U1llYAX/Edu0c9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hammerspace.com; dmarc=pass action=none header.from=hammerspace.com; dkim=pass header.d=hammerspace.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hammerspace.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Lk5m7dlrdqolYeHaIZhuZHynpUFfatlrJ9qa2t2yeyA=; b=cVcZJsk/Y4MTNOyVUIA8s0ZrJTpxv0yTECSthicj9dxFc40MeEXatfITpngmAcE7sDCepD4pTtqT86ys3q4SYAqEIiLNF4cNz9ZbaXAItHWpCuTLpEQkdCixexZV6YmgPsrStVwW9js2/PcI5MNHwaOaXPJR+7in5idXqI4cZos= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=hammerspace.com; Received: from SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) by SA5PR13MB7587.namprd13.prod.outlook.com (2603:10b6:806:47d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.11; Thu, 20 Nov 2025 15:57:57 +0000 Received: from SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d]) by SN6PR13MB2365.namprd13.prod.outlook.com ([fe80::9127:c65a:b5c5:a9d%7]) with mapi id 15.20.9343.009; Thu, 20 Nov 2025 15:57:57 +0000 From: Benjamin Coddington To: Alexander Viro , Christian Brauner , Jan Kara , Chuck Lever , Jeff Layton , NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Mike Snitzer Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org Subject: [PATCH v2 3/3] VFS/knfsd: Teach dentry_create() to use atomic_open() Date: Thu, 20 Nov 2025 10:57:48 -0500 Message-ID: X-Mailer: git-send-email 2.50.1 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PH1PEPF000132F7.NAMP220.PROD.OUTLOOK.COM (2603:10b6:518:1::3c) To SN6PR13MB2365.namprd13.prod.outlook.com (2603:10b6:805:5a::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR13MB2365:EE_|SA5PR13MB7587:EE_ X-MS-Office365-Filtering-Correlation-Id: 0832e297-3f48-4ef2-ce58-08de284d92e1 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?foHYLlp2zrIE0fvdgKfVQt9NIXrYl6CcAQGX9c7xX7H/j0OCMLiYJRYG1PQs?= =?us-ascii?Q?29Zuu7KF/5HRsRKKFNXh20evLRKheEsL4i9O07HMzDUOhPEZy8LqBgy0ZqnU?= =?us-ascii?Q?pdzJJu3992+hAoIPjC7GefcJ6H2HTxlqt0iNOXgUEp4mY1v3kCNqmLI+T6/v?= =?us-ascii?Q?Gl2ZgI0lNULVdKSlDnlI7KCqPeleQ5pu1ik5WR/PDW3duzr3CxopruGFUoTy?= =?us-ascii?Q?yyJkXddyVmAOSApI+n7h6ek6h0X2N609RL0ttgcCIwlvKvLo5p1YHi5n+lMu?= =?us-ascii?Q?5UKJ7v3vmzW5TwtJln9S1bUfmmdPU4EM/WDCQSVshq6aB7Yct9V4WMCKJlNW?= =?us-ascii?Q?uWvjIuq8pJsglC9dC+7ulHXLlt9azENIs4jFwF7r8wJkSagExARncxU1Y5Gn?= =?us-ascii?Q?Lsn4tWV5odwKw0g1Io4mlHoNsyvsV976NZPl5mTGDdHiwjcFFN1VHpzDAPWi?= =?us-ascii?Q?W866n2p4A6VQ5DD6ckt1jd1XCfNGqztBXinA0fLlGy8Tmd2zc/IRJDfEJ6zA?= =?us-ascii?Q?E61dFefb3InyG+wzVyd4+OKC/dtMqO02MHE9i6h3gC2bIu4FbeC0rRfCUw0a?= =?us-ascii?Q?TtGHs6yb8dmir8+1/8N5/WgsSw5hM0c0rejDMVjle+LZjyrPSkDloOjIowC6?= =?us-ascii?Q?Kg4rwrA4rxdzVYl+cQVydZabZWPbnhJv5Sy5dai4Xkg712gBgz/UE1miXdyq?= =?us-ascii?Q?Y7bnfXIlTERgbiWW9HdAghASKpOW+9kImnpYkXf511pzpGBB4D5k5sBI2dQF?= =?us-ascii?Q?uDzel9jOF6a79KYDf51G18h15g3EM28Fuy9HETPvyQ0nt01UEUZ34maMzSLy?= =?us-ascii?Q?Tfes/BQTGznWZen4466CW5hZ1C5dzD6jR5YNbu9YB4AyS/FO2Dqfv9NqVgxH?= =?us-ascii?Q?dLda8NCrqAuuDjv72wO3haLj+k3Parkf1FuQwIpRCE4nLcO6KGnJjUO71yF8?= =?us-ascii?Q?bdNwz+mIv5QNZVLsmTGn7gcOzXFIf8ebG72qK+vPSL3yVV1VfrSEfOTm14dt?= =?us-ascii?Q?kk6e4azlbxV52Y5lXFx1r6NcQbQJlDS8Z/kKiR6oWOcDr+ABuKgLYX5ASSws?= =?us-ascii?Q?vUvgnxxQWXm1PbrAg07yZOFIJJ+OuIVMOO++t5MVePbHVe1dQT+1NRDIY/LJ?= =?us-ascii?Q?rx9hqn59Oldl3b0175KaiGAdoiU6CyXZQiHp73I6gF+HG84d/uCBgKc5AWFc?= =?us-ascii?Q?O7dRv3zbMpIuNzA9KZLBI2Lo21YYi2s0tidicgb8qOD3/HzlLwrWdweZT+3I?= =?us-ascii?Q?NI5NtncCqsO2wLR+q2jYD+B2lfZgroMNl/B1yRhcCKNN00iibbZOwRwxn84N?= =?us-ascii?Q?GT9v3yDykyBXTWoXD/fN0yHVTQF/dA8pXk4N0vq2exKfE83pCT8GrSm6nDxa?= =?us-ascii?Q?bLd7jwQnEZMfRBMXpYXPeAu4tjdB1IzUJlXR3FhAsN7lmVs6mB0DScbc1CAs?= =?us-ascii?Q?4gTBV9/C4gzBkSRrQoY8/UvwCn2rrKRhgjK88Nx7IzThTgUYvnle9FfUObz7?= =?us-ascii?Q?BXc13nCO1KpBUEA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR13MB2365.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XB7vtp4ogzfhfoHqiml9GgujOmNyPUM3WBle3ne4c/ZgDSuEtVLHCrw9Mjza?= =?us-ascii?Q?yGU2NCYBZhh3WHFchEovh37W7EumsLrgUNXUOssD05E1QTWLIIo7XU46dXoA?= =?us-ascii?Q?+L7oNarm5YIG0Zh+z5STJxo0BOc1SUOqRMbJkO4jo0yWHOKaySKzKjAQKZ1e?= =?us-ascii?Q?CUNf3+KDkHdlqRsFotjt+80sV9TZ7GEzY8jCqPR2QkRiZBoxlwyPW8yJ1vfQ?= =?us-ascii?Q?8ybIhPsPwsYve6Sjmx+Ck3dZElkEmrrZS/hpE/HRVnQMGL9YywFlutdtyxbo?= =?us-ascii?Q?wJ/3tlzQA6uuECvUDyA1IznJapTTPo1vpxvjS5zRxVRYktw62mWOw2IPzRQh?= =?us-ascii?Q?a8kdJTtTHtwv5F9rIrR/z/QPoYeyrQYQ2YHIoH9OyFRnfNQ1ohOhOi5JTZWm?= =?us-ascii?Q?UoVw4N13VHQpYlU40iKJtb1OOycux+ye3ZEU/akUO+Ep+tkOfH4YiJ1ZD3/s?= =?us-ascii?Q?mEV51m+AX6tjsnAG4LSiaZeuv5KsoWH8ja0fKK0YYYGfv8myXcztTAP64jEw?= =?us-ascii?Q?+IlBASH+t7kXanL5hAxAOPnYuozbR3hksN0L3zGMHb6qPd5stAYqr3HX81xR?= =?us-ascii?Q?iP0dDuyFqbgDdhTJ1vGS07afLas+Xy+oz74XAwzHdp4dqYxEA96WFYDO+abx?= =?us-ascii?Q?sJvCRp2JL78BnIUKK1U0fSh8+eBxIi2WzaraBPgc6ukU6LQRiczmjW5Fkg4c?= =?us-ascii?Q?aKBiOcKIaKAonDIvWql58aBByEt+yjS4JEnqqaqCLHp1o8NNoSqiV3WDTGJ1?= =?us-ascii?Q?wd6tO34bjw/KbrRX3iQEqmC8EY/xBbR5uwP7/VI8N7yk0svfORP0Ve7V54LX?= =?us-ascii?Q?5gsqnYI7B3xuUVD0eo2m10aLbQUv5zEB8QNFhtaRgyLZz9yIThlV1qGSlvuB?= =?us-ascii?Q?C7v5CZ+IAYNx9nMdB22k3WX1ekrG+/EN35DIlmlOe8DYmw/7RfAXsDHcf19L?= =?us-ascii?Q?l/iuLIWQkSg7EyCogjSnztcVDxKTXfdlbId3WVM1TDuAmydYZ5Xpqlk3Fsw+?= =?us-ascii?Q?tk7xYhrWE6jQo/HpFSjVkqlIzXq0siIVA6ZCDcfAj5XKkvoiYQ1c0KS0CeJ5?= =?us-ascii?Q?r9IUtBBGEWpt6g1UfzDCXmqXFPugGgRHJsE2ZD4Gfce6D8iGOvC5ym4l+0xv?= =?us-ascii?Q?rTBZS2Zr1y89G+oUq+ledwom+Z3Jv13JiK4kMk8/nUAhP7wq73SnH5cn9YWA?= =?us-ascii?Q?VIQd72cfmwMuz3rAUk6SYUQyhPCkjwrQABeqpg28EHRh8dcUJbjcup4vMq0d?= =?us-ascii?Q?msZGzVzQiBnSc/ZWz5ZZ8RBEPd+hF3jW6TZFCIJLsMqMNvo5j7SKydKgSbeZ?= =?us-ascii?Q?V5CRlPzSRdkM3P+0qyQcRBhtLGpsnsEamjSewjqW4kwOgyuE8KpC2rjR21GW?= =?us-ascii?Q?0nr+ILb0RJd8wDJLQOxLtzPSRwQg9b7o+JiboWQnP1YsXcabIq8y5BvIPoIc?= =?us-ascii?Q?kQ7eOBJCrxn/VxwGQEoYlydf6Vr8UWJla6uyvYUUMHIpOtiJ2DHk5mArBflE?= =?us-ascii?Q?cJMvNEdTt20yfCnIsHsVQ7sfgKwTec4s1oE087Qg720BXweXnK/MI0gATR/m?= =?us-ascii?Q?aOdgQ1NBQ1APh+d+avFOtjdD3JGsG0xjUx/IXxNQgG1lj9i0hSXHke4aurva?= =?us-ascii?Q?uA=3D=3D?= X-OriginatorOrg: hammerspace.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0832e297-3f48-4ef2-ce58-08de284d92e1 X-MS-Exchange-CrossTenant-AuthSource: SN6PR13MB2365.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Nov 2025 15:57:57.6173 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0d4fed5c-3a70-46fe-9430-ece41741f59e X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SEVEF4n76fiO5Ld8hokvXSdjAOm/KGTB12+sWvx5FpWKFmN1bPwV1BnH1vxSOnX6qdiFIdCffmmA2SDXaBmDQ9saKuCwMlP6VPXQh3s/QgM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PR13MB7587 Content-Type: text/plain; charset="utf-8" While knfsd offers combined exclusive create and open results to clients, on some filesystems those results may not be atomic. This behavior can be observed. For example, an open O_CREAT with mode 0 will succeed in creating the file but unexpectedly return -EACCES from vfs_open(). Additionally reducing the number of remote RPC calls required for O_CREAT on network filesystem provides a performance benefit in the open path. Teach knfsd's helper dentry_create() to use atomic_open() for filesystems that support it. The previously const @path is passed up to atomic_open() and may be modified depending on whether an existing entry was found or if the atomic_open() returned an error and consumed the passed-in dentry. Signed-off-by: Benjamin Coddington Reviewed-by: Jeff Layton Reviewed-by: Chuck Lever --- fs/namei.c | 46 +++++++++++++++++++++++++++++++++++++++------- fs/nfsd/nfs4proc.c | 8 +++++--- include/linux/fs.h | 2 +- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index 9c0aad5bbff7..941b9fcebd1b 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -4200,6 +4200,9 @@ EXPORT_SYMBOL(user_path_create); * * Caller must hold the parent directory's lock, and have prepared * a negative dentry, placed in @path->dentry, for the new file. + * If the file was looked up only or didn't need to be created, + * FMODE_OPENED will not be set, and @path will be updated with the + * new dentry. The dentry may be negative. * * Caller sets @path->mnt to the vfsmount of the filesystem where * the new file is to be created. The parent directory and the @@ -4208,21 +4211,50 @@ EXPORT_SYMBOL(user_path_create); * On success, returns a "struct file *". Otherwise a ERR_PTR * is returned. */ -struct file *dentry_create(const struct path *path, int flags, umode_t mod= e, +struct file *dentry_create(struct path *path, int flags, umode_t mode, const struct cred *cred) { + struct dentry *dentry =3D path->dentry; + struct dentry *dir =3D dentry->d_parent; + struct inode *dir_inode =3D d_inode(dir); + struct mnt_idmap *idmap; struct file *file; - int error; + int error, create_error; =20 file =3D alloc_empty_file(flags, cred); if (IS_ERR(file)) return file; =20 - error =3D vfs_create(mnt_idmap(path->mnt), - d_inode(path->dentry->d_parent), - path->dentry, mode, true); - if (!error) - error =3D vfs_open(path, file); + idmap =3D mnt_idmap(path->mnt); + + if (dir_inode->i_op->atomic_open) { + path->dentry =3D dir; + mode =3D vfs_prepare_mode(idmap, dir_inode, mode, S_IALLUGO, S_IFREG); + + create_error =3D may_o_create(idmap, path, dentry, mode); + if (create_error) + flags &=3D ~O_CREAT; + + dentry =3D atomic_open(path, dentry, file, flags, mode); + error =3D PTR_ERR_OR_ZERO(dentry); + + if (unlikely(create_error) && error =3D=3D -ENOENT) + error =3D create_error; + + if (!error) { + if (file->f_mode & FMODE_CREATED) + fsnotify_create(dir->d_inode, dentry); + if (file->f_mode & FMODE_OPENED) + fsnotify_open(file); + } + + path->dentry =3D dentry; + + } else { + error =3D vfs_create(idmap, dir_inode, dentry, mode, true); + if (!error) + error =3D vfs_open(path, file); + } =20 if (unlikely(error)) { fput(file); diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 71b428efcbb5..7ff7e5855e58 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -194,7 +194,7 @@ static inline bool nfsd4_create_is_exclusive(int create= mode) } =20 static __be32 -nfsd4_vfs_create(struct svc_fh *fhp, struct dentry *child, +nfsd4_vfs_create(struct svc_fh *fhp, struct dentry **child, struct nfsd4_open *open) { struct file *filp; @@ -214,9 +214,11 @@ nfsd4_vfs_create(struct svc_fh *fhp, struct dentry *ch= ild, } =20 path.mnt =3D fhp->fh_export->ex_path.mnt; - path.dentry =3D child; + path.dentry =3D *child; filp =3D dentry_create(&path, oflags, open->op_iattr.ia_mode, current_cred()); + *child =3D path.dentry; + if (IS_ERR(filp)) return nfserrno(PTR_ERR(filp)); =20 @@ -353,7 +355,7 @@ nfsd4_create_file(struct svc_rqst *rqstp, struct svc_fh= *fhp, status =3D fh_fill_pre_attrs(fhp); if (status !=3D nfs_ok) goto out; - status =3D nfsd4_vfs_create(fhp, child, open); + status =3D nfsd4_vfs_create(fhp, &child, open); if (status !=3D nfs_ok) goto out; open->op_created =3D true; diff --git a/include/linux/fs.h b/include/linux/fs.h index 601d036a6c78..772b734477e5 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2878,7 +2878,7 @@ struct file *dentry_open(const struct path *path, int= flags, const struct cred *creds); struct file *dentry_open_nonotify(const struct path *path, int flags, const struct cred *cred); -struct file *dentry_create(const struct path *path, int flags, umode_t mod= e, +struct file *dentry_create(struct path *path, int flags, umode_t mode, const struct cred *cred); struct path *backing_file_user_path(const struct file *f); =20 --=20 2.50.1