linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/9] tmpfs: Add case-insensitive support for tmpfs
@ 2024-09-05 19:02 André Almeida
  2024-09-05 19:02 ` [PATCH v3 1/9] libfs: Create the helper function generic_ci_validate_strict_name() André Almeida
                   ` (8 more replies)
  0 siblings, 9 replies; 15+ messages in thread
From: André Almeida @ 2024-09-05 19:02 UTC (permalink / raw)
  To: Hugh Dickins, Andrew Morton, Alexander Viro, Christian Brauner,
	Jan Kara, krisman
  Cc: linux-mm, linux-kernel, linux-fsdevel, kernel-dev,
	Daniel Rosenberg, smcv, Christoph Hellwig, Theodore Ts'o,
	André Almeida

Hi,

This series is based on [0].

This patchset adds support for case-insensitive file names lookups in
tmpfs. The main difference from other casefold filesystems is that tmpfs
has no information on disk, just on RAM, so we can't use mkfs to create a
case-insensitive tmpfs.  For this implementation, I opted to have a mount
option for casefolding. The rest of the patchset follows a similar approach
as ext4 and f2fs.

* Use case (from the original cover letter)

The use case for this feature is similar to the use case for ext4, to
better support compatibility layers (like Wine), particularly in
combination with sandboxing/container tools (like Flatpak). Those
containerization tools can share a subset of the host filesystem with an
application. In the container, the root directory and any parent
directories required for a shared directory are on tmpfs, with the
shared directories bind-mounted into the container's view of the
filesystem.

If the host filesystem is using case-insensitive directories, then the
application can do lookups inside those directories in a
case-insensitive way, without this needing to be implemented in
user-space. However, if the host is only sharing a subset of a
case-insensitive directory with the application, then the parent
directories of the mount point will be part of the container's root
tmpfs. When the application tries to do case-insensitive lookups of
those parent directories on a case-sensitive tmpfs, the lookup will
fail.

For example, if /srv/games is a case-insensitive directory on the host,
then applications will expect /srv/games/Steam/Half-Life and
/srv/games/steam/half-life to be interchangeable; but if the
container framework is only sharing /srv/games/Steam/Half-Life and
/srv/games/Steam/Portal (and not the rest of /srv/games) with the
container, with /srv, /srv/games and /srv/games/Steam as part of the
container's tmpfs root, then making /srv/games a case-insensitive
directory inside the container would be necessary to meet that
expectation.

* Testing

I send a patch for xfstests to enable the casefold test (generic/556) for
tmpfs.[1] The test succeed.

You can test this patchset using:

  sudo mount -t tmpfs -o casefold tmpfs mnt/

And making a dir case-insensitive:

  mkdir mnt/dir
  chattr +F mnt/dir

[0] https://lore.kernel.org/linux-fsdevel/20210323195941.69720-1-andrealmeid@collabora.com/
[1] https://lore.kernel.org/fstests/20240823173008.280917-1-andrealmeid@igalia.com/

Changes in v3:
 - Renamed utf8_check_strict_name() to generic_ci_validate_strict_name(), and
 reworked the big if(...) to be more clear
 - Expose the latest UTF-8 version in include/linux/unicode.h
 - shmem_lookup() now sets d_ops
 - reworked shmem_parse_opt_casefold()
 - if `mount -o casefold` has no param, load latest UTF-8 version
 - using (IS_ENABLED(CONFIG_UNICODE) && IS_CASEFOLDED(dir) when possible
 - Fixed bug when adding a non-casefold flag in a non-empty dir
v2: https://lore.kernel.org/lkml/20240902225511.757831-1-andrealmeid@igalia.com/

Changes in v2:
 - Found and fixed a bug in utf8_load()
 - Created a helper for checking strict file names (Krisman)
 - Merged patch 1/ and 3/ together (Krisman)
 - Reworded the explanation about d_compare (Krisman)
 - Removed bool casefold from shmem_sb_info (Krisman)
 - Reworked d_add(dentry, NULL) to be called as d_add(dentry, inode) (Krisman)
 - Moved utf8_parse_version to common unicode code
 - Fixed some smatch/sparse warnings (kernel test bot/Dan Carpenter)
v1: https://lore.kernel.org/linux-fsdevel/20240823173332.281211-1-andrealmeid@igalia.com/

André Almeida (9):
  libfs: Create the helper function generic_ci_validate_strict_name()
  ext4: Use generic_ci_validate_strict_name helper
  unicode: Recreate utf8_parse_version()
  unicode: Export latest available UTF-8 version number
  libfs: Create the helper struct generic_ci_always_del_dentry_ops
  tmpfs: Add casefold lookup support
  tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs
  tmpfs: Expose filesystem features via sysfs
  docs: tmpfs: Add casefold options

 Documentation/filesystems/tmpfs.rst |  23 +++
 fs/ext4/namei.c                     |   3 +-
 fs/libfs.c                          |  53 ++++++
 fs/unicode/utf8-core.c              |  29 ++++
 fs/unicode/utf8-selftest.c          |   3 -
 include/linux/fs.h                  |   2 +
 include/linux/shmem_fs.h            |   6 +-
 include/linux/unicode.h             |   5 +
 mm/shmem.c                          | 249 ++++++++++++++++++++++++++--
 9 files changed, 355 insertions(+), 18 deletions(-)

-- 
2.46.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-09-09 14:15 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-05 19:02 [PATCH v3 0/9] tmpfs: Add case-insensitive support for tmpfs André Almeida
2024-09-05 19:02 ` [PATCH v3 1/9] libfs: Create the helper function generic_ci_validate_strict_name() André Almeida
2024-09-05 19:02 ` [PATCH v3 2/9] ext4: Use generic_ci_validate_strict_name helper André Almeida
2024-09-05 19:02 ` [PATCH v3 3/9] unicode: Recreate utf8_parse_version() André Almeida
2024-09-05 19:02 ` [PATCH v3 4/9] unicode: Export latest available UTF-8 version number André Almeida
2024-09-05 19:57   ` Gabriel Krisman Bertazi
2024-09-05 19:02 ` [PATCH v3 5/9] libfs: Create the helper struct generic_ci_always_del_dentry_ops André Almeida
2024-09-05 19:02 ` [PATCH v3 6/9] tmpfs: Add casefold lookup support André Almeida
2024-09-05 21:28   ` Gabriel Krisman Bertazi
2024-09-06 14:59     ` André Almeida
2024-09-09 14:15       ` Gabriel Krisman Bertazi
2024-09-05 19:02 ` [PATCH v3 7/9] tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs André Almeida
2024-09-05 19:02 ` [PATCH v3 8/9] tmpfs: Expose filesystem features via sysfs André Almeida
2024-09-05 19:02 ` [PATCH v3 9/9] docs: tmpfs: Add casefold options André Almeida
2024-09-05 19:48   ` Gabriel Krisman Bertazi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).