summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMickaël Salaün <mic@digikod.net>2023-06-12 21:14:25 +0200
committerMickaël Salaün <mic@digikod.net>2023-06-12 21:26:19 +0200
commit74ce793bcbde5cef0f82d6ccb3c47cb651295a9a (patch)
treeaf52b942aba6e0539e65ebfced7d46f8bb770cfd /arch
parent858fd168a95c5b9669aac8db6c14a9aeab446375 (diff)
downloadlinux-stable-74ce793bcbde5cef0f82d6ccb3c47cb651295a9a.tar.gz
linux-stable-74ce793bcbde5cef0f82d6ccb3c47cb651295a9a.tar.bz2
linux-stable-74ce793bcbde5cef0f82d6ccb3c47cb651295a9a.zip
hostfs: Fix ephemeral inodes
hostfs creates a new inode for each opened or created file, which created useless inode allocations and forbade identifying a host file with a kernel inode. Fix this uncommon filesystem behavior by tying kernel inodes to host file's inode and device IDs. Even if the host filesystem inodes may be recycled, this cannot happen while a file referencing it is opened, which is the case with hostfs. It should be noted that hostfs inode IDs may not be unique for the same hostfs superblock because multiple host's (backed) superblocks may be used. Delete inodes when dropping them to force backed host's file descriptors closing. This enables to entirely remove ARCH_EPHEMERAL_INODES, and then makes Landlock fully supported by UML. This is very useful for testing changes. These changes also factor out and simplify some helpers thanks to the new hostfs_inode_update() and the hostfs_iget() revamp: read_name(), hostfs_create(), hostfs_lookup(), hostfs_mknod(), and hostfs_fill_sb_common(). A following commit with new Landlock tests check this new hostfs inode consistency. Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com> Cc: Johannes Berg <johannes@sipsolutions.net> Acked-by: Richard Weinberger <richard@nod.at> Link: https://lore.kernel.org/r/20230612191430.339153-2-mic@digikod.net Signed-off-by: Mickaël Salaün <mic@digikod.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/Kconfig7
-rw-r--r--arch/um/Kconfig1
2 files changed, 0 insertions, 8 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index 205fd23e0cad..49996ee9e33b 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -1188,13 +1188,6 @@ config COMPAT_32BIT_TIME
config ARCH_NO_PREEMPT
bool
-config ARCH_EPHEMERAL_INODES
- def_bool n
- help
- An arch should select this symbol if it doesn't keep track of inode
- instances on its own, but instead relies on something else (e.g. the
- host kernel for an UML kernel).
-
config ARCH_SUPPORTS_RT
bool
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index 541a9b18e343..4057d5267c6a 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -5,7 +5,6 @@ menu "UML-specific options"
config UML
bool
default y
- select ARCH_EPHEMERAL_INODES
select ARCH_HAS_FORTIFY_SOURCE
select ARCH_HAS_GCOV_PROFILE_ALL
select ARCH_HAS_KCOV