Re: [REPOST PATCH v3 11/16] xfs: mount-api - add xfs_remount_ro() helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2019-09-24 at 10:38 -0400, Brian Foster wrote:
> On Tue, Sep 24, 2019 at 09:22:59PM +0800, Ian Kent wrote:
> > Factor the remount read only code into a helper to simplify the
> > subsequent change from the super block method .remount_fs to the
> > mount-api fs_context_operations method .reconfigure.
> > 
> > Signed-off-by: Ian Kent <raven@xxxxxxxxxx>
> > ---
> 
> This (and the next patch) looks exactly like the previous version
> (please retain review tags).

Right, will do.

> 
> Brian
> 
> >  fs/xfs/xfs_super.c |   73 +++++++++++++++++++++++++++++++---------
> > ------------
> >  1 file changed, 43 insertions(+), 30 deletions(-)
> > 
> > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> > index aaee32162950..de75891c5551 100644
> > --- a/fs/xfs/xfs_super.c
> > +++ b/fs/xfs/xfs_super.c
> > @@ -1433,6 +1433,47 @@ xfs_remount_rw(
> >  	return 0;
> >  }
> >  
> > +STATIC int
> > +xfs_remount_ro(
> > +	struct xfs_mount	*mp)
> > +{
> > +	int error;
> > +
> > +	/*
> > +	 * Cancel background eofb scanning so it cannot race with the
> > +	 * final log force+buftarg wait and deadlock the remount.
> > +	 */
> > +	xfs_stop_block_reaping(mp);
> > +
> > +	/* Get rid of any leftover CoW reservations... */
> > +	error = xfs_icache_free_cowblocks(mp, NULL);
> > +	if (error) {
> > +		xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> > +		return error;
> > +	}
> > +
> > +	/* Free the per-AG metadata reservation pool. */
> > +	error = xfs_fs_unreserve_ag_blocks(mp);
> > +	if (error) {
> > +		xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
> > +		return error;
> > +	}
> > +
> > +	/*
> > +	 * Before we sync the metadata, we need to free up the reserve
> > +	 * block pool so that the used block count in the superblock on
> > +	 * disk is correct at the end of the remount. Stash the current
> > +	 * reserve pool size so that if we get remounted rw, we can
> > +	 * return it to the same size.
> > +	 */
> > +	xfs_save_resvblks(mp);
> > +
> > +	xfs_quiesce_attr(mp);
> > +	mp->m_flags |= XFS_MOUNT_RDONLY;
> > +
> > +	return 0;
> > +}
> > +
> >  STATIC int
> >  xfs_fs_remount(
> >  	struct super_block	*sb,
> > @@ -1503,37 +1544,9 @@ xfs_fs_remount(
> >  
> >  	/* rw -> ro */
> >  	if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & SB_RDONLY))
> > {
> > -		/*
> > -		 * Cancel background eofb scanning so it cannot race
> > with the
> > -		 * final log force+buftarg wait and deadlock the
> > remount.
> > -		 */
> > -		xfs_stop_block_reaping(mp);
> > -
> > -		/* Get rid of any leftover CoW reservations... */
> > -		error = xfs_icache_free_cowblocks(mp, NULL);
> > -		if (error) {
> > -			xfs_force_shutdown(mp,
> > SHUTDOWN_CORRUPT_INCORE);
> > -			return error;
> > -		}
> > -
> > -		/* Free the per-AG metadata reservation pool. */
> > -		error = xfs_fs_unreserve_ag_blocks(mp);
> > -		if (error) {
> > -			xfs_force_shutdown(mp,
> > SHUTDOWN_CORRUPT_INCORE);
> > +		error = xfs_remount_ro(mp);
> > +		if (error)
> >  			return error;
> > -		}
> > -
> > -		/*
> > -		 * Before we sync the metadata, we need to free up the
> > reserve
> > -		 * block pool so that the used block count in the
> > superblock on
> > -		 * disk is correct at the end of the remount. Stash the
> > current
> > -		 * reserve pool size so that if we get remounted rw, we
> > can
> > -		 * return it to the same size.
> > -		 */
> > -		xfs_save_resvblks(mp);
> > -
> > -		xfs_quiesce_attr(mp);
> > -		mp->m_flags |= XFS_MOUNT_RDONLY;
> >  	}
> >  
> >  	return 0;
> > 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux