On 7/29/20 11:32 AM, Josef Bacik wrote: > Hello, > > Eric reported a problem to me where we were clearing SB_I_VERSION on remount > of a btrfs file system. After digging through I discovered it's because we > expect the proper flags that we want to be passed in via the mount() syscall, > and because we didn't have "iversion" in our show_options entry the mount > binary (form util-linux) wasn't setting MS_I_VERSION for the remount, and > thus the VFS was clearing SB_I_VERSION from our s_flags. > > No big deal, I'll fix show_mount. Except Eric then noticed that mount -o > noiversion didn't do anything, we still get iversion set. That's because > btrfs just defaults to having SB_I_VERSION set. Furthermore -o noiversion > doesn't get sent into mount, it's handled by the mount binary itself, and it > does this by not having MS_I_VERSION set in the mount flags.
This was beaten^Wdiscussed to death in an earlier thread, [PATCH] fs: i_version mntopt gets visible through /proc/mounts https://lore.kernel.org/linux-fsdevel/20200616202123.12656-1-msys.miz...@gmail.com/ tl;dr: hch doesn't think [no]iversion should be exposed as an option /at all/ so exposing it in /proc/mounts in show_mnt_opts for mount(8)'s benefit was nacked. > This happens as well for -o relatime, it's the default and so if you do mount > -o norelatime it won't do anything, you still get relatime behavior. I think that's a different issue. > The only time this changes is if you do mount -o remount,norelatime. Hm, not on xfs: # mount -o loop,norelatime xfsfile mnt # grep loop /proc/mounts /dev/loop0 /tmp/mnt xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0 # mount -o remount,norelatime mnt # grep loop /proc/mounts /dev/loop0 /tmp/mnt xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0 Here, "norelatime" only makes the mount binary omit the MS_RELATIME flag. The only way to override relatime behavior is mount -o strictatime, AFAICT. IOWS "norelatime" and "strictatime" are the same (right?); perhaps mount -o norelatime should set the MS_STRICTATIME flag. > So my question is, what do we do here? I know Christoph has the strong > opinion that we just don't expose I_VERSION at all, which frankly I'm ok > with. However more what I'm asking is what do we do with these weird > inverted flags that we all just kind of ignore on mount? The current setup > is just broken if we want to allow overriding the defaults at mount time. > Are we ok with it just being broken? Are we ok with things like mount -o > noiversion not working because the file system has decided that I_VERSION (or > relatime) is the default, and we're going to ignore what the user asks for > unless we're remounting? Thanks, Are there other oddities besides iversion and relatime? -Eric