Thread (18 messages) 18 messages, 5 authors, 2015-06-25

i_version vs iversion (Was: Re: [RFC PATCH v2 1/2] Btrfs: add noi_version option to disable MS_I_VERSION)

From: David Sterba <hidden>
Date: 2015-06-18 14:38:58
Also in: linux-fsdevel

Moving the discussion to fsdevel.

Summary: disabling MS_I_VERSION brings some speedups to btrfs, but the
generic 'noiversion' option cannot be used to achieve that. It is
processed before it reaches btrfs superblock callback, where
MS_I_VERSION is forced.

The proposed fix is to add btrfs-specific i_version/noi_version to btrfs,
to which I object.

Continued below.

On Thu, Jun 18, 2015 at 10:46:09AM +0800, Liu Bo wrote:
On Wed, Jun 17, 2015 at 07:01:18PM +0200, David Sterba wrote:
quoted
On Wed, Jun 17, 2015 at 11:52:36PM +0800, Liu Bo wrote:
quoted
On Wed, Jun 17, 2015 at 05:33:06PM +0200, David Sterba wrote:
quoted
On Wed, Jun 17, 2015 at 03:54:31PM +0800, Liu Bo wrote:
quoted
MS_I_VERSION is enabled by default for btrfs, this adds an alternative
option to toggle it off.
There's an existing generic iversion/noiversion mount option pair, no
need to extra add it to btrfs.
I know, it doesn't work though.
Sigh, I see, btrfs forces MS_I_VERSION flag,
0c4d2d95d06e920e0c61707e62c7fffc9c57f63a. I read 'enabled by default' as
that there's a standard way to override the defaults.

So the right way is not to do that but this will break everyhing that
relies on that behaviour at the moment. This means to add the exception
to the upper layers, either VFS or 'mount', which is not very likely to
happen.

The generic options do not reach the filesystem specific callbacks, so
we can't check it.
Ext4 also makes its own "i_version" option, so I think we can do the
same thing until more filesystems require to do it in a generic way.
AFAICS, ext4 had added it's own i_version before iversion was added to
mount:

ext4:

Commit:      25ec56b518257a56d2ff41a941d288e4b5ff9488
Commit date: Mon Jan 28 23:58:27 2008 -0500
Subject:     ext4: Add inode version support in ext4

util-linux:

Commti:      4fa5e73d16828c94234ba0aeafaec2470f79011c
Commit date: Thu Nov 27 12:08:44 2008 +0100
Subject:     mount: add i_version support

I don't know the history, this looks like adding the options was not
coordinated.
The performance benefit with no_iversion is obvious for fsync
related workloads since we would avoid some expensive log commits.
It is obviuos, but I'd like to avoid cluttering the mount options
interface further.

xfs also forces I_VERSION if it detects the superblock version 5, so it
could use the same fix that would work for btrfs.

I see two possibilities that pretend to be generic and clean:

1) the filesystem MS_I_* defaults would be exported and processed up the
   mount call stack

2) pass the full mount options to the filesystem (if requested eg. by
   file_system_type::fs_flags bits).

The other ideas contain 'make an exception to ... ' which does not sound
appealing.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help