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

Reply via email to