linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ian Kent <raven@themaw.net>
To: "Darrick J. Wong" <darrick.wong@oracle.com>
Cc: linux-xfs <linux-xfs@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Brian Foster <bfoster@redhat.com>,
	Eric Sandeen <sandeen@sandeen.net>,
	David Howells <dhowells@redhat.com>,
	Dave Chinner <dchinner@redhat.com>,
	Al Viro <viro@ZenIV.linux.org.uk>
Subject: Re: [PATCH v8 12/16] xfs: dont set sb in xfs_mount_alloc()
Date: Tue, 05 Nov 2019 10:47:56 +0800	[thread overview]
Message-ID: <193f1fa8f5c93779aba1b52259215581f7e81637.camel@themaw.net> (raw)
In-Reply-To: <20191104211205.GL4153244@magnolia>

On Mon, 2019-11-04 at 13:12 -0800, Darrick J. Wong wrote:
> On Sat, Nov 02, 2019 at 12:41:39PM +0800, Ian Kent wrote:
> > On Fri, 2019-11-01 at 13:15 -0700, Darrick J. Wong wrote:
> > > On Fri, Nov 01, 2019 at 03:51:06PM +0800, Ian Kent wrote:
> > > > When changing to use the new mount api the super block won't be
> > > > available when the xfs_mount struct is allocated so move
> > > > setting
> > > > the
> > > > super block in xfs_mount to xfs_fs_fill_super().
> > > > 
> > > > Signed-off-by: Ian Kent <raven@themaw.net>
> > > > Reviewed-by: Brian Foster <bfoster@redhat.com>
> > > > ---
> > > >  fs/xfs/xfs_super.c |    7 +++----
> > > >  1 file changed, 3 insertions(+), 4 deletions(-)
> > > > 
> > > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> > > > index 4b570ba3456a..62dfc678c415 100644
> > > > --- a/fs/xfs/xfs_super.c
> > > > +++ b/fs/xfs/xfs_super.c
> > > > @@ -1560,8 +1560,7 @@ xfs_destroy_percpu_counters(
> > > >  }
> > > >  
> > > >  static struct xfs_mount *
> > > > -xfs_mount_alloc(
> > > > -	struct super_block	*sb)
> > > > +xfs_mount_alloc(void)
> > > >  {
> > > >  	struct xfs_mount	*mp;
> > > >  
> > > > @@ -1569,7 +1568,6 @@ xfs_mount_alloc(
> > > >  	if (!mp)
> > > >  		return NULL;
> > > >  
> > > > -	mp->m_super = sb;
> > > 
> > > Just out of curiosity, is there any place where we need m_super
> > > in
> > > between here...
> > > 
> > > >  	spin_lock_init(&mp->m_sb_lock);
> > > >  	spin_lock_init(&mp->m_agirotor_lock);
> > > >  	INIT_RADIX_TREE(&mp->m_perag_tree, GFP_ATOMIC);
> > > > @@ -1605,9 +1603,10 @@ xfs_fs_fill_super(
> > > >  	 * allocate mp and do all low-level struct
> > > > initializations
> > > > before we
> > > >  	 * attach it to the super
> > > >  	 */
> > > > -	mp = xfs_mount_alloc(sb);
> > > > +	mp = xfs_mount_alloc();
> > > >  	if (!mp)
> > > >  		goto out;
> > > > +	mp->m_super = sb;
> > > 
> > > ...and here?  For example, logging errors?  AFAICT the only thing
> > > that
> > > goes on between these two points is option parsing, right?  (And
> > > the
> > > parsing has its own prefixed logging, etc.)
> > 
> > Yes, only option parsing is going on between these two points.
> > 
> > And, for now, the error reporting is caught by the VFS.
> > 
> > There is one location in xfs_fc_parse_param() where an xfs log
> > message could be emitted although it's never reached (because of
> > the return if the fs_parse() call fails).
> > 
> > If log messages were issued in between these two points the
> > consequence
> > is a missing block device name in the message. You remember, a
> > check on
> > mp->m_super was added to __xfs_printk() to cover this case when
> > struct
> > xfs_mount field m_fsname was eliminated.
> 
> It's true that (AFAICT) this is the only place where xfs might need
> mp->m_super but it doesn't yet have one, but you'd agree that this is
> a
> significant change to the scoping rules, right?  In the past there
> was
> never a place in xfs where we'd have to check mp->m_super == NULL,
> but
> now we have to keep that possibility in mind, at least for any
> function
> that can be called before get_tree_bdev.

Yes, it is, but that is forced on file systems by the VFS.

I'm not certain this design is needed to support the new
fsopen()/fsconfig()/fsmount() system calls though I think it is
due to the way in which they are called.

For example I don't think the VFS has enough information to obtain
the super block at the time fsconfig() is being called so it must
be deferred until fsmount() and fsconfig() is about parameter parsing.

> 
> > This potential lack of device name in log messages is a problem I
> > can't
> > fix because the block device isn't obtained until after parameter
> > parsing, just before the super block is acquired. Changing that in
> > the
> > VFS would be quite significant so I'm stuck!
> 
> Um, we used to obtain the block device and the superblock before we
> started option parsing.  I guess the worst that happens is that
> anything
> trying to dereference mp->m_super is just going to crash...

Yes, but the xfs logging is probably the most important thing that
would be needed prior to calling get_tree_bdev() and that's currently
ok except for the missing block device name.

There may be ways to change this but I'm pretty sure they would cause
fairly significant challenges for the overall design and support of
those new system calls and that's one of the key elements of the new
mount-api.

Ian


  reply	other threads:[~2019-11-05  2:48 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-01  7:49 [PATCH v8 00/16] xfs: mount API patch series Ian Kent
2019-11-01  7:50 ` [PATCH v8 01/16] xfs: remove unused struct xfs_mount field m_fsname_len Ian Kent
2019-11-01  7:50 ` [PATCH v8 02/16] xfs: use super s_id instead of struct xfs_mount m_fsname Ian Kent
2019-11-01  7:50 ` [PATCH v8 03/16] xfs: dont use XFS_IS_QUOTA_RUNNING() for option check Ian Kent
2019-11-01 17:01   ` Christoph Hellwig
2019-11-01 18:50   ` Darrick J. Wong
2019-11-01  7:50 ` [PATCH v8 04/16] xfs: use kmem functions for struct xfs_mount Ian Kent
2019-11-01  7:50 ` [PATCH v8 05/16] xfs: merge freeing of mp names and mp Ian Kent
2019-11-01  7:50 ` [PATCH v8 06/16] xfs: add xfs_remount_rw() helper Ian Kent
2019-11-01 19:35   ` Darrick J. Wong
2019-11-01  7:50 ` [PATCH v8 07/16] xfs: add xfs_remount_ro() helper Ian Kent
2019-11-01 19:35   ` Darrick J. Wong
2019-11-01  7:50 ` [PATCH v8 08/16] xfs: refactor suffix_kstrtoint() Ian Kent
2019-11-01 19:35   ` Darrick J. Wong
2019-11-01  7:50 ` [PATCH v8 09/16] xfs: avoid redundant checks when options is empty Ian Kent
2019-11-01  7:50 ` [PATCH v8 10/16] xfs: refactor xfs_parseags() Ian Kent
2019-11-01  7:51 ` [PATCH v8 11/16] xfs: move xfs_parseargs() validation to a helper Ian Kent
2019-11-01 17:03   ` Christoph Hellwig
2019-11-01  7:51 ` [PATCH v8 12/16] xfs: dont set sb in xfs_mount_alloc() Ian Kent
2019-11-01 20:15   ` Darrick J. Wong
2019-11-02  4:41     ` Ian Kent
2019-11-04 21:12       ` Darrick J. Wong
2019-11-05  2:47         ` Ian Kent [this message]
2019-11-01  7:51 ` [PATCH v8 13/16] xfs: switch to use the new mount-api Ian Kent
2019-11-02 16:18   ` Christoph Hellwig
2019-11-01  7:51 ` [PATCH v8 14/16] xfs: move xfs_fc_reconfigure() above xfs_fc_free() Ian Kent
2019-11-01 20:16   ` Darrick J. Wong
2019-11-02  4:48     ` Ian Kent
2019-11-02 16:19   ` Christoph Hellwig
2019-11-01  7:51 ` [PATCH v8 15/16] xfs: move xfs_fc_get_tree() above xfs_fc_reconfigure() Ian Kent
2019-11-01 20:17   ` Darrick J. Wong
2019-11-02 16:19   ` Christoph Hellwig
2019-11-01  7:51 ` [PATCH v8 16/16] xfs: move xfs_fc_parse_param() above xfs_fc_get_tree() Ian Kent
2019-11-01 20:17   ` Darrick J. Wong
2019-11-02 16:19   ` Christoph Hellwig

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=193f1fa8f5c93779aba1b52259215581f7e81637.camel@themaw.net \
    --to=raven@themaw.net \
    --cc=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=dchinner@redhat.com \
    --cc=dhowells@redhat.com \
    --cc=hch@infradead.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=sandeen@sandeen.net \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).