Bug#1083159: mount: tmpfs size for /tmp is randomly ignored
- To: Vincent Lefevre <vincent@vinc17.net>, 1083159@bugs.debian.org
- Subject: Bug#1083159: mount: tmpfs size for /tmp is randomly ignored
- From: Salvatore Bonaccorso <carnil@debian.org>
- Date: Fri, 21 Feb 2025 20:33:21 +0100
- Message-id: <[🔎] Z7jVAfQzVqdzWDVp@eldamar.lan>
- Reply-to: Salvatore Bonaccorso <carnil@debian.org>, 1083159@bugs.debian.org
- In-reply-to: <20241003132947.GA8516@cventin.lip.ens-lyon.fr>
- References: <20241002124321.GA3948@cventin.lip.ens-lyon.fr> <vmbukdij3ac5rzapwt7mv7metgzkfgc2dffcfixzywaejtzils@62xlswcxqev6> <20241002232401.GA7569@qaa.vinc17.org> <20241002235611.GA23858@qaa.vinc17.org> <20241002124321.GA3948@cventin.lip.ens-lyon.fr> <20241003132947.GA8516@cventin.lip.ens-lyon.fr> <20241002124321.GA3948@cventin.lip.ens-lyon.fr>
Hi Vincent,
On Thu, Oct 03, 2024 at 03:29:47PM +0200, Vincent Lefevre wrote:
> Control: reassign -1 src:linux
> Control: found -1 6.10.12-1
> Control: severity -1 minor
> Control: notforwarded -1
> Control: retitle -1 linux: for tmpfs, /proc/mounts and /proc/self/mountinfo do not always show the size when corresponding to the default, at least on /tmp
>
> Summary: On my Debian/unstable machines, a tmpfs file system is
> mounted on /tmp with the default size=50% option; this is the
> current default in Debian. In this case, /proc/mounts and the
> "mount" command (based on /proc/self/mountinfo) do not always
> show the resulting size (as a number of KB) for /tmp; this is
> random and can change only after a reboot.
I stumpled over this bug while reviewing open bugs, and my take is
that this is actually not a bug. *But* I hope one of my more
experienced colegues in the team might review this claim.
Let's start from:
https://www.kernel.org/doc/html/latest/filesystems/vfs.html#mount-options
The important bits are:
Showing options
---------------
If a filesystem accepts mount options, it must define show_options() to
show all the currently active options. The rules are:
- options MUST be shown which are not default or their values differ
from the default
- options MAY be shown which are enabled by default or have their
default value
tmpfs is defined in "mm/shmem.c and we have (current mainline):
5263 #ifdef CONFIG_TMPFS
5264 .statfs = shmem_statfs,
5265 .show_options = shmem_show_options,
5266 #endif
shmem_show_options() handles showming mount options for tmpfs:
4878 static int shmem_show_options(struct seq_file *seq, struct dentry *root)
4879 {
4880 struct shmem_sb_info *sbinfo = SHMEM_SB(root->d_sb);
4881 struct mempolicy *mpol;
4882
4883 if (sbinfo->max_blocks != shmem_default_max_blocks())
4884 seq_printf(seq, ",size=%luk", K(sbinfo->max_blocks));
[...]
So size is only showed if sbinfo->max_blocks != shmem_default_max_blocks().
Let's look at shmem_default_max_blocks():
147 #ifdef CONFIG_TMPFS
148 static unsigned long shmem_default_max_blocks(void)
149 {
150 return totalram_pages() / 2;
151 }
So this is 50% of ram as *default* which matches tmpfs(5):
Mount options
The tmpfs filesystem supports the following mount options:
size=bytes
Specify an upper limit on the size of the filesystem.
The size is given in bytes, and rounded up to entire
pages. The limit is removed if the size is 0.
The size may have a k, m, or g suffix for Ki, Mi, Gi (bi‐
nary kilo (kibi), binary mega (mebi), and binary giga
(gibi)).
The size may also have a % suffix to limit this instance
to a percentage of physical RAM.
The default, when neither size nor nr_blocks is speci‐
fied, is size=50%.
So my undestanding would be that the code here is coherent with the
specification that if size corresponds to the default value, the code
may, but does not must show it.
Does this make sense?
Regards,
Salvatore
Reply to: