Cover Letter Detail
Show a cover letter.
GET /api/1.1/covers/2230412/?format=api
{ "id": 2230412, "url": "http://patchwork.ozlabs.org/api/1.1/covers/2230412/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/cover/20260429-case-sensitivity-v12-0-8057123bebe0@oracle.com/", "project": { "id": 12, "url": "http://patchwork.ozlabs.org/api/1.1/projects/12/?format=api", "name": "Linux CIFS Client", "link_name": "linux-cifs-client", "list_id": "linux-cifs.vger.kernel.org", "list_email": "linux-cifs@vger.kernel.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260429-case-sensitivity-v12-0-8057123bebe0@oracle.com>", "date": "2026-04-29T18:07:11", "name": "[v12,00/15] Exposing case folding behavior", "submitter": { "id": 86689, "url": "http://patchwork.ozlabs.org/api/1.1/people/86689/?format=api", "name": "Chuck Lever", "email": "cel@kernel.org" }, "mbox": "http://patchwork.ozlabs.org/project/linux-cifs-client/cover/20260429-case-sensitivity-v12-0-8057123bebe0@oracle.com/mbox/", "series": [ { "id": 502123, "url": "http://patchwork.ozlabs.org/api/1.1/series/502123/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/list/?series=502123", "date": "2026-04-29T18:07:11", "name": "Exposing case folding behavior", "version": 12, "mbox": "http://patchwork.ozlabs.org/series/502123/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/covers/2230412/comments/", "headers": { "Return-Path": "\n <linux-cifs+bounces-11280-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-cifs@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=rbpvfHDM;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-cifs+bounces-11280-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"rbpvfHDM\"", "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201" ], "Received": [ "from sto.lore.kernel.org (sto.lore.kernel.org\n [IPv6:2600:3c09:e001:a7::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5QJC4Fq2z1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 04:07:39 +1000 (AEST)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id 10FA33004935\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 18:07:36 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6635E41324C;\n\tWed, 29 Apr 2026 18:07:29 +0000 (UTC)", "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id C09FE38D688;\n\tWed, 29 Apr 2026 18:07:28 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id EFD87C19425;\n\tWed, 29 Apr 2026 18:07:25 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777486048; cv=none;\n b=RyGTXhMc24N+39SgumPPRZnRu6+oGMlZOw8NfBvnD2MKQy4E6tWZ68BpInvkgRR4loOUdINtK2KKIl2i+C+3gZedlpA1h4kMH2Pph4G8uRwpR2BWhe7iE0gGYw+TaKLxJn9WzRVWdXrF2zSFab8IcFAKiIoKwVVHvxXTxhXwGcM=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777486048; c=relaxed/simple;\n\tbh=nGIAvTon0zs9b1xP0r8i5cYHOhAA/ZjGGgXeoFYtSA0=;\n\th=From:Subject:Date:Message-Id:MIME-Version:Content-Type:To:Cc;\n b=pp5p6l9o7NcThaY3K07xtIu2tgMorrCrjj9U69RgbmnmNB01aBC0wEBMUtkj4bHDr/CrfWPm3FQr6VzkJL5ml06UP4/g8r++2vQV4cR0PNSo7HOWSiAJ+kNGwwSl2Q4C24yIg0+xOnsbtq1F1/81QI1Oqrg5qy3PzgxiCWOaB5M=", "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=rbpvfHDM; arc=none smtp.client-ip=10.30.226.201", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1777486048;\n\tbh=nGIAvTon0zs9b1xP0r8i5cYHOhAA/ZjGGgXeoFYtSA0=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=rbpvfHDMiWhiox01PdHgWiDajLy46O57SvBnNBUKJF5rY7CeK0XMvUpeyCnSZtD+M\n\t czBdnUPUXQOZ8uTgetzcOdw5qA0Jyqmrqvmm69zYx8CO/MWX4988jXwneseeqF8bjn\n\t XCMhT4tBKBbrBzBZdyo1qKAxI99stL20jhATDEAmstQIXnBprsZkztF8pyvQBib75J\n\t zIyZ/hBX6tDWqbnzD17epgB7MmmPW/apvdI7qTiqpwWXQIYur6AeEImgwRMtkhXTEc\n\t 9CJLuov5syAnb6Sgzi0tx+YofaHT22pMRWsrlgDwL79ATA0hdKElKNIdYNYhU8HQra\n\t d6ImeZTBwVbkg==", "From": "Chuck Lever <cel@kernel.org>", "Subject": "[PATCH v12 00/15] Exposing case folding behavior", "Date": "Wed, 29 Apr 2026 14:07:11 -0400", "Message-Id": "<20260429-case-sensitivity-v12-0-8057123bebe0@oracle.com>", "Precedence": "bulk", "X-Mailing-List": "linux-cifs@vger.kernel.org", "List-Id": "<linux-cifs.vger.kernel.org>", "List-Subscribe": "<mailto:linux-cifs+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-cifs+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "X-B4-Tracking": "v=1; b=H4sIAM9I8mkC/33OTW7DIBAF4KtErIsL2Pgnq96j6gKGoZ4qMRG4q\n FHkuxeSTaJGXcxiRm8+vQtLGAkT2+8uLGKmRGEpi1QvOwazWT6RkysHpoTqRacUB5OQJ1wSrZR\n pPXMN1nsYvdR6ZOXtFNHTz9V8/7jt6dt+IazVqQlbCRvNAnM9ZZ9ey/ChUU3VfTi4GpsprSGer\n 93yVLl/WuSJC25RqBZADALVW4gGDthAOLJaI0txT7RPCCmKAe2oXT90pgf/15D3RvfMkMVwqHs\n 5WXTOPBrbtv0CS7SfZ3MBAAA=", "X-Change-ID": "20260422-case-sensitivity-5cbffc8f1558", "To": "Al Viro <viro@zeniv.linux.org.uk>,\n Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>", "Cc": "linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org,\n linux-xfs@vger.kernel.org, linux-cifs@vger.kernel.org,\n linux-nfs@vger.kernel.org, linux-api@vger.kernel.org,\n linux-f2fs-devel@lists.sourceforge.net, hirofumi@mail.parknet.co.jp,\n linkinjeon@kernel.org, sj1557.seo@samsung.com, yuezhang.mo@sony.com,\n almaz.alexandrovich@paragon-software.com, slava@dubeyko.com,\n glaubitz@physik.fu-berlin.de, frank.li@vivo.com, tytso@mit.edu,\n adilger.kernel@dilger.ca, cem@kernel.org, sfrench@samba.org,\n pc@manguebit.org, ronniesahlberg@gmail.com, sprasad@microsoft.com,\n trondmy@kernel.org, anna@kernel.org, jaegeuk@kernel.org, chao@kernel.org,\n hansg@kernel.org, senozhatsky@chromium.org,\n Chuck Lever <chuck.lever@oracle.com>, \"Darrick J. Wong\" <djwong@kernel.org>,\n Roland Mainz <roland.mainz@nrubsig.org>,\n Steve French <stfrench@microsoft.com>", "X-Mailer": "b4 0.16-dev", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=10117;\n i=chuck.lever@oracle.com; h=from:subject:message-id;\n bh=nGIAvTon0zs9b1xP0r8i5cYHOhAA/ZjGGgXeoFYtSA0=;\n b=owEBbQKS/ZANAwAKATNqszNvZn+XAcsmYgBp8kjUruCj6HSCo8h/ROV63cWR/oVu16zwqghlT\n mPK1ER4ZuWJAjMEAAEKAB0WIQQosuWwEobfJDzyPv4zarMzb2Z/lwUCafJI1AAKCRAzarMzb2Z/\n l60jD/wOFP5Liv/4++jhg7MCr4gC8zrGZH6SLe53mUycIA01Yl4fSZlymrf+2x/ZbrtzvPJsQMz\n tdRHlxlJVf7t8N03MaxrwXGis+ciyJyJhjg1WTVKRHhNdGC+eOEpX1ptetE0rU8axoVTge0c+1a\n 4qjf9lDvy70V8AStRqezRJn51vNjMt14XBRWo+R6HmKVpnM0GPzEj5oPWs+Vu74/d0hNN9cV5if\n U/e/a9AnV8vm40EmwIHtrgf3DwEdM8kdPu/3seRyspTFDMLuyixZ+4YZaMyF/ruCDI0F/e9g6Rn\n GO+bAmOEvn4VLXQfEgcAO1lfzIyShSsB7uqAUhDkLaUiGNeRLZE3/oVUzcS3+AuC8ov0rEHAAhZ\n uEmvXxjJsHL1ESfV6YkxDRWu/a+WmwTwPy0xQ8LwghSSFL80RuuLk1kfW06IxH5jJYnzYMpny4g\n SX3mKds5MKYu2sO4xjkIKJA9mY9KDBBV3tRZiMZch2buj60MPlW0f7Fe4KxwSS3WN8HxSEC5OIB\n 5nOiMO2L87RiuMda0PTn7Yb9iH8mEOzsX6omLFnC8m4Zm40B5xG3PlEfNsqOAM7O/nVlKUFShNZ\n kHL6rF/gMEfTqQmJIXDy/ARe6JSajQpZmtQtQrPJSaG8UnV4pgb354onxVVMYdBXi+i+eZerZL1\n DfDyZzX3FJpTM7Q==", "X-Developer-Key": "i=chuck.lever@oracle.com; a=openpgp;\n fpr=28B2E5B01286DF243CF23EFE336AB3336F667F97" }, "content": "Following on from:\n\nhttps://lore.kernel.org/linux-nfs/20251021-zypressen-bazillus-545a44af57fd@brauner/T/#m0ba197d75b7921d994cf284f3cef3a62abb11aaa\n\nI'm attempting to implement enough support in the Linux VFS to\nenable file services like NFSD and ksmbd (and user space\nequivalents) to provide the actual status of case folding support\nin local file systems. The default behavior for local file systems\nnot explicitly supported in this series is to reflect the usual\nPOSIX behaviors:\n\n case-insensitive = false\n case-nonpreserving = false\n\nThe case-insensitivity and case-nonpreserving booleans can be\nconsumed immediately by NFSD. These two attributes have been part of\nthe NFSv3 and NFSv4 protocols for decades, in order to support NFS\nclient implementations on non-POSIX systems.\n\nSupport for user space file servers is why this series exposes case\nfolding information via a user-space API. I don't know of any other\ncategory of user-space application that requires access to case\nfolding info.\n\nThe Linux NFS community has a growing interest in supporting NFS\nclients on Windows and MacOS platforms, where file name behavior does\nnot align with traditional POSIX semantics.\n\nOne example of a Windows-based NFS client is [1]. This client\nimplementation explicitly requires servers to report\nFATTR4_WORD0_CASE_INSENSITIVE = TRUE for proper operation, a hard\nrequirement for Windows client interoperability because Windows\napplications expect case-insensitive behavior. When an NFS client\nknows the server is case-insensitive, it can avoid issuing multiple\nLOOKUP/READDIR requests to search for case variants, and applications\nlike Win32 programs work correctly without manual workarounds or\ncode changes.\n\nEven the Linux client can take advantage of this information. Trond\nmerged patches 4 years ago [2] that introduce support for case\ninsensitivity, in support of the Hammerspace NFS server. In\nparticular, when a client detects a case-insensitive NFS share,\nnegative dentry caching must be disabled (a lookup for \"FILE.TXT\"\nfailing shouldn't cache a negative entry when \"file.txt\" exists)\nand directory change invalidation must clear all cached case-folded\nfile name variants.\n\nHammerspace servers and several other NFS server implementations\noperate in multi-protocol environments, where a single file service\ninstance caters to both NFS and SMB clients. In those cases, things\nwork more smoothly for everyone when the NFS client can see and adapt\nto the case folding behavior that SMB users rely on and expect. NFSD\nneeds to support the case-insensitivity and case-nonpreserving\nbooleans properly in order to participate as a first-class citizen\nin such environments.\n\n[1] https://github.com/kofemann/ms-nfs41-client\n\n[2] https://patchwork.kernel.org/project/linux-nfs/cover/20211217203658.439352-1-trondmy@kernel.org/\n\n---\nChanges since v11:\n- isofs: Wire .fileattr_get only on directory inodes, since\n NFSD and ksmbd query casefolding on directories (Jan Kara)\n- xfs, hfsplus: Drop the FS_CASEFOLD_FL fileattr_get mask;\n admit the bit through fileattr_set's allowlist instead\n- Address findings from sashiko(gemini-3) and gpt-5.5:\n - cifs: Wire .fileattr_get on cifs_namespace_inode_operations\n so DFS referral / automount directories report case handling\n - fat, ntfs3: Fill FS_IMMUTABLE_FL in fileattr_get\n - hfsplus: Hide FS_CASEFOLD_FL from the legacy flags view so\n chattr round-trips do not hit the setflags whitelist\n - nfs: Clear NFS_CAP_CASE_INSENSITIVE and\n NFS_CAP_CASE_NONPRESERVING before re-OR'ing in the v3 and\n v4 probe paths so re-probe / TSM does not retain stale caps\n - nfsd: Switch nfsd_get_case_info() to errno return so\n v3 PATHCONF and v4 GETATTR can apply version-appropriate\n policy on failure\n - nfsd: Use dget_parent() in v4 case-attr probe to keep\n the parent dentry referenced across the query\n - isofs: Report FS_XFLAG_CASENONPRESERVING for map=n/map=a\n\nChanges since v10:\n- cifs: Source case-handling flags from the server's cached\n FS_ATTRIBUTE_INFORMATION reply instead of the nocase mount\n option, with a nocase fallback when the reply is absent\n- Address findings from sashiko(gemini-3) and gpt-5.5:\n - nfs: Skip pathconf case bits on NFSv4 (set via FATTR4_CASE_*\n instead)\n - xfs: Hide FS_CASEFOLD_FL from the legacy flags view so\n chattr round-trips do not hit the setflags whitelist\n - ext4, f2fs: Drop redundant fileattr_get patches; the\n FS_CASEFOLD_FL translation in fileattr_fill_flags() already\n reports FS_XFLAG_CASEFOLD for casefolded directories\n - nfsd: Report FATTR4_HOMOGENEOUS = FALSE when the exported\n filesystem has a Unicode encoding, since per-directory\n casefold makes the fs-scoped case attributes inhomogeneous\n - nfsd: Document in nfsd_get_case_info() why -ENOIOCTLCMD and\n -ENOTTY are swallowed while other errors propagate\n - fat: Honor vfat 'check=strict' when reporting FS_XFLAG_CASEFOLD\n - Set FS_CASEFOLD_FL so FS_IOC_GETFLAGS reflects case-insensitive\n mount\n - isofs: Register fileattr_get on regular file and symlink inodes,\n not just directories\n - nfsd: Query NFSv4 FATTR4_CASE_* from the parent directory for\n non-directory objects, since casefold lives on the directory\n\nChanges since v9:\n- nfs: always probe PATHCONF for case caps. Default to case-\n preserving when the server does not report case_preserving\n- nfsd, ksmbd: tolerate -ENOTTY from vfs_fileattr_get() so\n overlayfs exports on backing filesystems without fileattr_get\n do not fail the RPC\n- xfs: map FS_XFLAG_CASEFOLD inside xfs_ip2xflags() so BULKSTAT\n and FS_IOC_FSGETXATTR report the flag consistently\n- vboxsf: reject a short host reply to SHFL_INFO_VOLUME before\n trusting volinfo.properties.case_sensitive\n\nChanges since v8:\n- Rebase on v7.0-rc1\n\nChanges since v7:\n- Split file_attr initialization changes into a separate patch\n\nChanges since v6:\n- Remove the memset from vfs_fileattr_get\n\nChanges since v5:\n- Finish the conversion to FS_XFLAGs\n- NFSv4 GETATTR now clears the attr mask bit if nfsd_get_case_info()\n fails\n\nChanges since v4:\n- Observe the MSDOS \"nocase\" mount option\n- Define new FS_XFLAGs for the user API\n\nChanges since v3:\n- Change fa->case_preserving to fa_case_nonpreserving\n- VFAT is case preserving\n- Make new fields available to user space\n\nChanges since v2:\n- Remove unicode labels\n- Replace vfs_get_case_info\n- Add support for several more local file system implementations\n- Add support for in-kernel SMB server\n\nChanges since RFC:\n- Use file_getattr instead of statx\n- Postpone exposing Unicode version until later\n- Support NTFS and ext4 in addition to FAT\n- Support NFSv4 fattr4 in addition to NFSv3 PATHCONF\n\n---\nChuck Lever (15):\n fs: Move file_kattr initialization to callers\n fs: Add case sensitivity flags to file_kattr\n fat: Implement fileattr_get for case sensitivity\n exfat: Implement fileattr_get for case sensitivity\n ntfs3: Implement fileattr_get for case sensitivity\n hfs: Implement fileattr_get for case sensitivity\n hfsplus: Report case sensitivity in fileattr_get\n xfs: Report case sensitivity in fileattr_get\n cifs: Implement fileattr_get for case sensitivity\n nfs: Implement fileattr_get for case sensitivity\n vboxsf: Implement fileattr_get for case sensitivity\n isofs: Implement fileattr_get for case sensitivity\n nfsd: Report export case-folding via NFSv3 PATHCONF\n nfsd: Implement NFSv4 FATTR4_CASE_INSENSITIVE and FATTR4_CASE_PRESERVING\n ksmbd: Report filesystem case sensitivity via FS_ATTRIBUTE_INFORMATION\n\n fs/exfat/exfat_fs.h | 2 ++\n fs/exfat/file.c | 18 +++++++++--\n fs/exfat/namei.c | 1 +\n fs/fat/fat.h | 3 ++\n fs/fat/file.c | 36 +++++++++++++++++++++\n fs/fat/namei_msdos.c | 1 +\n fs/fat/namei_vfat.c | 1 +\n fs/file_attr.c | 16 +++++-----\n fs/hfs/dir.c | 1 +\n fs/hfs/hfs_fs.h | 2 ++\n fs/hfs/inode.c | 14 ++++++++\n fs/hfsplus/inode.c | 16 +++++++++-\n fs/isofs/dir.c | 16 ++++++++++\n fs/isofs/isofs.h | 3 ++\n fs/nfs/client.c | 25 +++++++++++----\n fs/nfs/inode.c | 15 +++++++++\n fs/nfs/internal.h | 3 ++\n fs/nfs/namespace.c | 2 ++\n fs/nfs/nfs3proc.c | 2 ++\n fs/nfs/nfs3xdr.c | 7 ++--\n fs/nfs/nfs4proc.c | 10 ++++--\n fs/nfs/proc.c | 3 ++\n fs/nfs/symlink.c | 3 ++\n fs/nfsd/nfs3proc.c | 36 ++++++++++++++++-----\n fs/nfsd/nfs4xdr.c | 52 ++++++++++++++++++++++++++++--\n fs/nfsd/vfs.c | 72 ++++++++++++++++++++++++++++++++++++++++++\n fs/nfsd/vfs.h | 3 ++\n fs/nfsd/xdr3.h | 4 +--\n fs/ntfs3/file.c | 29 +++++++++++++++++\n fs/ntfs3/inode.c | 1 +\n fs/ntfs3/namei.c | 2 ++\n fs/ntfs3/ntfs_fs.h | 1 +\n fs/smb/client/cifsfs.c | 41 ++++++++++++++++++++++++\n fs/smb/client/cifsfs.h | 3 ++\n fs/smb/client/namespace.c | 1 +\n fs/smb/server/smb2pdu.c | 30 ++++++++++++++----\n fs/vboxsf/dir.c | 1 +\n fs/vboxsf/file.c | 6 ++--\n fs/vboxsf/super.c | 7 ++++\n fs/vboxsf/utils.c | 30 ++++++++++++++++++\n fs/vboxsf/vfsmod.h | 6 ++++\n fs/xfs/libxfs/xfs_inode_util.c | 2 ++\n fs/xfs/xfs_ioctl.c | 22 ++++++++++---\n include/linux/fileattr.h | 3 +-\n include/linux/nfs_fs_sb.h | 2 +-\n include/linux/nfs_xdr.h | 2 ++\n include/uapi/linux/fs.h | 7 ++++\n 47 files changed, 513 insertions(+), 50 deletions(-)\n---\nbase-commit: 6596a02b207886e9e00bb0161c7fd59fea53c081\nchange-id: 20260422-case-sensitivity-5cbffc8f1558\n\nBest regards,\n-- \nChuck Lever" }