[PATCH mmotm] tmpfs: support 64-bit inums per-sb fix
From: Hugh Dickins
Date: Sat Aug 01 2020 - 22:37:57 EST
Expanded Chris's Documentation and Kconfig help on tmpfs inode64.
TMPFS_INODE64 still there, still default N, but writing down its very
limited limitation does make me wonder again if we want the option.
Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx>
---
Andrew, please fold into tmpfs-support-64-bit-inums-per-sb.patch later.
Randy, you're very active on Documentation and linux-next: may I ask you
please to try applying this patch to latest, and see if tmpfs.rst comes
out looking right to you? I'm an old dog still stuck in the days of
tmpfs.txt, hoping to avoid new tricks for a while. Thanks! (Bonus
points if you can explain what the "::" on line 122 is about. I started
out reading Documentation/doc-guide/sphinx.rst, but... got diverted.
Perhaps I should ask Mauro or Jon, but turning for help first to you.)
Documentation/filesystems/tmpfs.rst | 13 ++++++++++---
fs/Kconfig | 16 +++++++++++-----
2 files changed, 21 insertions(+), 8 deletions(-)
--- mmotm/Documentation/filesystems/tmpfs.rst 2020-07-27 18:54:51.116524795 -0700
+++ linux/Documentation/filesystems/tmpfs.rst 2020-08-01 18:37:07.719713987 -0700
@@ -153,11 +153,18 @@ parameters with chmod(1), chown(1) and c
tmpfs has a mount option to select whether it will wrap at 32- or 64-bit inode
numbers:
+======= ========================
inode64 Use 64-bit inode numbers
inode32 Use 32-bit inode numbers
+======= ========================
+
+On a 32-bit kernel, inode32 is implicit, and inode64 is refused at mount time.
+On a 64-bit kernel, CONFIG_TMPFS_INODE64 sets the default. inode64 avoids the
+possibility of multiple files with the same inode number on a single device;
+but risks glibc failing with EOVERFLOW once 33-bit inode numbers are reached -
+if a long-lived tmpfs is accessed by 32-bit applications so ancient that
+opening a file larger than 2GiB fails with EINVAL.
-On 64-bit, the default is set by CONFIG_TMPFS_INODE64. On 32-bit, inode64 is
-not legal and will produce an error at mount time.
So 'mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs'
will give you tmpfs instance on /mytmpfs which can allocate 10GB
@@ -170,5 +177,5 @@ RAM/SWAP in 10240 inodes and it is only
Hugh Dickins, 4 June 2007
:Updated:
KOSAKI Motohiro, 16 Mar 2010
-Updated:
+:Updated:
Chris Down, 13 July 2020
--- mmotm/fs/Kconfig 2020-07-27 18:54:59.384550639 -0700
+++ linux/fs/Kconfig 2020-08-01 18:11:33.749236321 -0700
@@ -223,12 +223,18 @@ config TMPFS_INODE64
default n
help
tmpfs has historically used only inode numbers as wide as an unsigned
- int. In some cases this can cause wraparound, potentially resulting in
- multiple files with the same inode number on a single device. This option
- makes tmpfs use the full width of ino_t by default, similarly to the
- inode64 mount option.
+ int. In some cases this can cause wraparound, potentially resulting
+ in multiple files with the same inode number on a single device. This
+ option makes tmpfs use the full width of ino_t by default, without
+ needing to specify the inode64 option when mounting.
- To override this default, use the inode32 or inode64 mount options.
+ But if a long-lived tmpfs is to be accessed by 32-bit applications so
+ ancient that opening a file larger than 2GiB fails with EINVAL, then
+ the INODE64 config option and inode64 mount option risk operations
+ failing with EOVERFLOW once 33-bit inode numbers are reached.
+
+ To override this configured default, use the inode32 or inode64
+ option when mounting.
If unsure, say N.