All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Masayoshi Mizuma <msys.mizuma@gmail.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>,
	Eric Sandeen <sandeen@sandeen.net>,
	"Darrick J. Wong" <darrick.wong@oracle.com>,
	Christoph Hellwig <hch@infradead.org>,
	Theodore Ts'o <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>,
	linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-xfs <linux-xfs@vger.kernel.org>
Subject: Re: [PATCH] fs: i_version mntopt gets visible through /proc/mounts
Date: Fri, 19 Jun 2020 08:39:48 +1000	[thread overview]
Message-ID: <20200618223948.GI2005@dread.disaster.area> (raw)
In-Reply-To: <20200618034535.h5ho7pd4eilpbj3f@gabell>

On Wed, Jun 17, 2020 at 11:45:35PM -0400, Masayoshi Mizuma wrote:
> On Thu, Jun 18, 2020 at 01:05:39PM +1000, Dave Chinner wrote:
> > On Wed, Jun 17, 2020 at 09:30:26PM -0400, Masayoshi Mizuma wrote:
> > > On Wed, Jun 17, 2020 at 02:45:07PM -0400, J. Bruce Fields wrote:
> > > > On Wed, Jun 17, 2020 at 01:28:11PM -0500, Eric Sandeen wrote:
> > > > > but mount(8) has already exposed this interface:
> > > > > 
> > > > >        iversion
> > > > >               Every time the inode is modified, the i_version field will be incremented.
> > > > > 
> > > > >        noiversion
> > > > >               Do not increment the i_version inode field.
> > > > > 
> > > > > so now what?
> > > > 
> > > > It's not like anyone's actually depending on i_version *not* being
> > > > incremented.  (Can you even observe it from userspace other than over
> > > > NFS?)
> > > > 
> > > > So, just silently turn on the "iversion" behavior and ignore noiversion,
> > > > and I doubt you're going to break any real application.
> > > 
> > > I suppose it's probably good to remain the options for user compatibility,
> > > however, it seems that iversion and noiversiont are useful for
> > > only ext4.
> > > How about moving iversion and noiversion description on mount(8)
> > > to ext4 specific option?
> > > 
> > > And fixing the remount issue for XFS (maybe btrfs has the same
> > > issue as well)?
> > > For XFS like as:
> > > 
> > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> > > index 379cbff438bc..2ddd634cfb0b 100644
> > > --- a/fs/xfs/xfs_super.c
> > > +++ b/fs/xfs/xfs_super.c
> > > @@ -1748,6 +1748,9 @@ xfs_fc_reconfigure(
> > >                         return error;
> > >         }
> > > 
> > > +       if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
> > > +               mp->m_super->s_flags |= SB_I_VERSION;
> > > +
> > >         return 0;
> > >  }
> > 
> > no this doesn't work, because the sueprblock flags are modified
> > after ->reconfigure is called.
> > 
> > i.e. reconfigure_super() does this:
> > 
> > 	if (fc->ops->reconfigure) {
> > 		retval = fc->ops->reconfigure(fc);
> > 		if (retval) {
> > 			if (!force)
> > 				goto cancel_readonly;
> > 			/* If forced remount, go ahead despite any errors */
> > 			WARN(1, "forced remount of a %s fs returned %i\n",
> > 			     sb->s_type->name, retval);
> > 		}
> > 	}
> > 
> > 	WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) |
> > 				 (fc->sb_flags & fc->sb_flags_mask)));
> > 
> > And it's the WRITE_ONCE() line that clears SB_I_VERSION out of
> > sb->s_flags. Hence adding it in ->reconfigure doesn't help.
> > 
> > What we actually want to do here in xfs_fc_reconfigure() is this:
> > 
> > 	if (XFS_SB_VERSION_NUM(&mp->m_sb) == XFS_SB_VERSION_5)
> > 		fc->sb_flags_mask |= SB_I_VERSION;
> > 
> > So that the SB_I_VERSION is not cleared from sb->s_flags.
> > 
> > I'll also note that btrfs will need the same fix, because it also
> > sets SB_I_VERSION unconditionally, as will any other filesystem that
> > does this, too.
> 
> Thank you for pointed it out.
> How about following change? I believe it works both xfs and btrfs...
> 
> diff --git a/fs/super.c b/fs/super.c
> index b0a511bef4a0..42fc6334d384 100644
> --- a/fs/super.c
> +++ b/fs/super.c
> @@ -973,6 +973,9 @@ int reconfigure_super(struct fs_context *fc)
>                 }
>         }
> 
> +       if (sb->s_flags & SB_I_VERSION)
> +               fc->sb_flags |= MS_I_VERSION;
> +
>         WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) |
>                                  (fc->sb_flags & fc->sb_flags_mask)));
>         /* Needs to be ordered wrt mnt_is_readonly() */

This will prevent SB_I_VERSION from being turned off at all. That
will break existing filesystems that allow SB_I_VERSION to be turned
off on remount, such as ext4.

The manipulations here need to be in the filesystem specific code;
we screwed this one up so badly there is no "one size fits all"
behaviour that we can implement in the generic code...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

  reply	other threads:[~2020-06-18 22:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-16 20:21 [PATCH] fs: i_version mntopt gets visible through /proc/mounts Masayoshi Mizuma
2020-06-17  8:03 ` Christoph Hellwig
2020-06-17 13:33   ` Masayoshi Mizuma
2020-06-17 15:58   ` J. Bruce Fields
2020-06-17 17:14     ` Eric Sandeen
2020-06-17 17:24       ` Darrick J. Wong
2020-06-17 17:55         ` Eric Sandeen
2020-06-17 18:18           ` J. Bruce Fields
2020-06-17 18:28             ` Eric Sandeen
2020-06-17 18:45               ` J. Bruce Fields
2020-06-18  1:30                 ` Masayoshi Mizuma
2020-06-18  1:44                   ` Darrick J. Wong
2020-06-18  3:33                     ` Masayoshi Mizuma
2020-06-18  3:05                   ` Dave Chinner
2020-06-18  3:45                     ` Masayoshi Mizuma
2020-06-18 22:39                       ` Dave Chinner [this message]
2020-06-19  2:20                         ` J. Bruce Fields
2020-06-19  2:44                           ` Dave Chinner
2020-06-19 12:04                             ` Jeff Layton
2020-06-19 20:40                             ` J. Bruce Fields
2020-06-19 22:10                               ` Dave Chinner
2020-06-19 22:28                                 ` J. Bruce Fields
2020-06-20  1:49                                   ` Dave Chinner
2020-06-20  1:56                                     ` J. Bruce Fields
2020-06-20 17:00                                       ` Eric Sandeen
2020-06-20 17:09                                         ` J. Bruce Fields
2020-06-20 23:54                                       ` Dave Chinner
2020-06-22 21:26                                         ` J. Bruce Fields
2020-06-22 22:03                                           ` Dave Chinner
2020-06-19 13:17                         ` Christoph Hellwig
2020-07-13 23:45                         ` Eric Sandeen
2020-07-14  8:30                           ` Christoph Hellwig
2020-07-14 20:26                             ` Eric Sandeen
2020-06-27  8:29 ` [fs] 089633dad0: kmsg.xfs:Unknown_parameter'i_version' kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200618223948.GI2005@dread.disaster.area \
    --to=david@fromorbit.com \
    --cc=adilger.kernel@dilger.ca \
    --cc=bfields@fieldses.org \
    --cc=darrick.wong@oracle.com \
    --cc=hch@infradead.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=m.mizuma@jp.fujitsu.com \
    --cc=msys.mizuma@gmail.com \
    --cc=sandeen@sandeen.net \
    --cc=tytso@mit.edu \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.