Re: [PATCH 08/10] xfs_repair: allow setting the needsrepair flag

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

 



On Mon, Feb 08, 2021 at 08:10:49PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> Quietly set up the ability to tell xfs_repair to set NEEDSREPAIR at
> program start and (presumably) clear it by the end of the run.  This
> code isn't terribly useful to users; it's mainly here so that fstests
> can exercise the functionality.
> 
> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
> ---
>  repair/globals.c    |    2 ++
>  repair/globals.h    |    2 ++
>  repair/phase1.c     |   23 +++++++++++++++++++++++
>  repair/xfs_repair.c |    9 +++++++++
>  4 files changed, 36 insertions(+)
> 
> 
...
> diff --git a/repair/phase1.c b/repair/phase1.c
> index 00b98584..b26d25f8 100644
> --- a/repair/phase1.c
> +++ b/repair/phase1.c
> @@ -30,6 +30,26 @@ alloc_ag_buf(int size)
>  	return(bp);
>  }
>  
> +static void
> +set_needsrepair(
> +	struct xfs_sb	*sb)
> +{
> +	if (!xfs_sb_version_hascrc(sb)) {
> +		printf(
> +	_("needsrepair flag only supported on V5 filesystems.\n"));
> +		exit(0);
> +	}
> +
> +	if (xfs_sb_version_needsrepair(sb)) {
> +		printf(_("Filesystem already marked as needing repair.\n"));
> +		return;
> +	}

Any reason this doesn't exit the repair like the lazy counter logic
does? Otherwise seems fine:

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

> +
> +	printf(_("Marking filesystem in need of repair.\n"));
> +	primary_sb_modified = 1;
> +	sb->sb_features_incompat |= XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR;
> +}
> +
>  /*
>   * this has got to be big enough to hold 4 sectors
>   */
> @@ -126,6 +146,9 @@ _("Cannot disable lazy-counters on V5 fs\n"));
>  		}
>  	}
>  
> +	if (add_needsrepair)
> +		set_needsrepair(sb);
> +
>  	/* shared_vn should be zero */
>  	if (sb->sb_shared_vn) {
>  		do_warn(_("resetting shared_vn to zero\n"));
> diff --git a/repair/xfs_repair.c b/repair/xfs_repair.c
> index 9dc73854..ee377e8a 100644
> --- a/repair/xfs_repair.c
> +++ b/repair/xfs_repair.c
> @@ -65,11 +65,13 @@ static char *o_opts[] = {
>   */
>  enum c_opt_nums {
>  	CONVERT_LAZY_COUNT = 0,
> +	CONVERT_NEEDSREPAIR,
>  	C_MAX_OPTS,
>  };
>  
>  static char *c_opts[] = {
>  	[CONVERT_LAZY_COUNT]	= "lazycount",
> +	[CONVERT_NEEDSREPAIR]	= "needsrepair",
>  	[C_MAX_OPTS]		= NULL,
>  };
>  
> @@ -302,6 +304,13 @@ process_args(int argc, char **argv)
>  					lazy_count = (int)strtol(val, NULL, 0);
>  					convert_lazy_count = 1;
>  					break;
> +				case CONVERT_NEEDSREPAIR:
> +					if (!val)
> +						do_abort(
> +		_("-c needsrepair requires a parameter\n"));
> +					if (strtol(val, NULL, 0) == 1)
> +						add_needsrepair = true;
> +					break;
>  				default:
>  					unknown('c', val);
>  					break;
> 




[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