Re: [PATCH 04/23] libxfs: remove the volname concept

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

 



On Mon, Dec 11, 2023 at 05:37:23PM +0100, Christoph Hellwig wrote:
> IRIX has the concept of a volume that has data/log/rt subvolumes (that's
> where the subvolume name in Linux comes from), but in the current
> Linux-only xfsprogs version trying to pretend we do anything with that
> it is just utterly confusing.  The volname is basically just a very
> obsfucated second way to pass the data device name, so get rid of it
> in the libxfs and progs internals.

Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>

And thanks for the history lecture.

Carlos
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  copy/xfs_copy.c   |  7 ++----
>  db/info.c         |  2 +-
>  db/init.c         | 13 +++-------
>  db/init.h         |  1 -
>  db/output.c       |  2 +-
>  include/libxfs.h  |  1 -
>  libxfs/init.c     | 24 ++++--------------
>  libxfs/topology.c | 10 ++++----
>  mkfs/xfs_mkfs.c   | 63 ++++++++++-------------------------------------
>  repair/init.c     | 11 ++-------
>  10 files changed, 33 insertions(+), 101 deletions(-)
> 
> diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c
> index 79f659467..66728f199 100644
> --- a/copy/xfs_copy.c
> +++ b/copy/xfs_copy.c
> @@ -718,11 +718,8 @@ main(int argc, char **argv)
>  	xargs.isdirect = LIBXFS_DIRECT;
>  	xargs.isreadonly = LIBXFS_ISREADONLY;
> 
> -	if (source_is_file)  {
> -		xargs.dname = source_name;
> -		xargs.disfile = 1;
> -	} else
> -		xargs.volname = source_name;
> +	xargs.dname = source_name;
> +	xargs.disfile = source_is_file;
> 
>  	if (!libxfs_init(&xargs))  {
>  		do_log(_("%s: couldn't initialize XFS library\n"
> diff --git a/db/info.c b/db/info.c
> index 0f6c29429..b30ada3aa 100644
> --- a/db/info.c
> +++ b/db/info.c
> @@ -30,7 +30,7 @@ info_f(
>  	struct xfs_fsop_geom	geo;
> 
>  	libxfs_fs_geometry(mp, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
> -	xfs_report_geom(&geo, fsdevice, x.logname, x.rtname);
> +	xfs_report_geom(&geo, x.dname, x.logname, x.rtname);
>  	return 0;
>  }
> 
> diff --git a/db/init.c b/db/init.c
> index 4599cc00d..18d9dfdd9 100644
> --- a/db/init.c
> +++ b/db/init.c
> @@ -19,7 +19,6 @@
> 
>  static char		**cmdline;
>  static int		ncmdline;
> -char			*fsdevice;
>  int			blkbb;
>  int			exitcode;
>  int			expert_mode;
> @@ -91,11 +90,7 @@ init(
>  	if (optind + 1 != argc)
>  		usage();
> 
> -	fsdevice = argv[optind];
> -	if (!x.disfile)
> -		x.volname = fsdevice;
> -	else
> -		x.dname = fsdevice;
> +	x.dname = argv[optind];
>  	x.isdirect = LIBXFS_DIRECT;
> 
>  	x.bcache_flags = CACHE_MISCOMPARE_PURGE;
> @@ -115,7 +110,7 @@ init(
>  			1 << (XFS_MAX_SECTORSIZE_LOG - BBSHIFT), 0, &bp, NULL);
>  	if (error) {
>  		fprintf(stderr, _("%s: %s is invalid (cannot read first 512 "
> -			"bytes)\n"), progname, fsdevice);
> +			"bytes)\n"), progname, x.dname);
>  		exit(1);
>  	}
> 
> @@ -126,7 +121,7 @@ init(
>  	sbp = &xmount.m_sb;
>  	if (sbp->sb_magicnum != XFS_SB_MAGIC) {
>  		fprintf(stderr, _("%s: %s is not a valid XFS filesystem (unexpected SB magic number 0x%08x)\n"),
> -			progname, fsdevice, sbp->sb_magicnum);
> +			progname, x.dname, sbp->sb_magicnum);
>  		if (!force) {
>  			fprintf(stderr, _("Use -F to force a read attempt.\n"));
>  			exit(EXIT_FAILURE);
> @@ -139,7 +134,7 @@ init(
>  	if (!mp) {
>  		fprintf(stderr,
>  			_("%s: device %s unusable (not an XFS filesystem?)\n"),
> -			progname, fsdevice);
> +			progname, x.dname);
>  		exit(1);
>  	}
>  	mp->m_log = &xlog;
> diff --git a/db/init.h b/db/init.h
> index 16dc13f2b..05e75c100 100644
> --- a/db/init.h
> +++ b/db/init.h
> @@ -4,7 +4,6 @@
>   * All Rights Reserved.
>   */
> 
> -extern char		*fsdevice;
>  extern int		blkbb;
>  extern int		exitcode;
>  extern int		expert_mode;
> diff --git a/db/output.c b/db/output.c
> index 422148afa..30ae82ced 100644
> --- a/db/output.c
> +++ b/db/output.c
> @@ -34,7 +34,7 @@ dbprintf(const char *fmt, ...)
>  	blockint();
>  	i = 0;
>  	if (dbprefix)
> -		i += printf("%s: ", fsdevice);
> +		i += printf("%s: ", x.dname);
>  	i += vprintf(fmt, ap);
>  	unblockint();
>  	va_end(ap);
> diff --git a/include/libxfs.h b/include/libxfs.h
> index 9b0294cb8..b35dc2184 100644
> --- a/include/libxfs.h
> +++ b/include/libxfs.h
> @@ -94,7 +94,6 @@ struct iomap;
>   */
>  typedef struct libxfs_xinit {
>  				/* input parameters */
> -	char            *volname;       /* pathname of volume */
>  	char            *dname;         /* pathname of data "subvolume" */
>  	char            *logname;       /* pathname of log "subvolume" */
>  	char            *rtname;        /* pathname of realtime "subvolume" */
> diff --git a/libxfs/init.c b/libxfs/init.c
> index 9cfd20e3f..894d84057 100644
> --- a/libxfs/init.c
> +++ b/libxfs/init.c
> @@ -294,10 +294,8 @@ int
>  libxfs_init(libxfs_init_t *a)
>  {
>  	char		*dname;
> -	int		fd;
>  	char		*logname;
>  	char		*rtname;
> -	int		rval = 0;
>  	int		flags;
> 
>  	dname = a->dname;
> @@ -308,20 +306,12 @@ libxfs_init(libxfs_init_t *a)
>  	a->dsize = a->lbsize = a->rtbsize = 0;
>  	a->dbsize = a->logBBsize = a->logBBstart = a->rtsize = 0;
> 
> -	fd = -1;
>  	flags = (a->isreadonly | a->isdirect);
> 
>  	rcu_init();
>  	rcu_register_thread();
>  	radix_tree_init();
> 
> -	if (a->volname) {
> -		if (!check_open(a->volname, flags))
> -			goto done;
> -		fd = open(a->volname, O_RDONLY);
> -		dname = a->dname = a->volname;
> -		a->volname = NULL;
> -	}
>  	if (dname) {
>  		if (a->disfile) {
>  			a->ddev= libxfs_device_open(dname, a->dcreat, flags,
> @@ -398,16 +388,12 @@ libxfs_init(libxfs_init_t *a)
>  	use_xfs_buf_lock = a->usebuflock;
>  	xfs_dir_startup();
>  	init_caches();
> -	rval = 1;
> -done:
> -	if (fd >= 0)
> -		close(fd);
> -	if (!rval) {
> -		libxfs_close_devices(a);
> -		rcu_unregister_thread();
> -	}
> +	return 1;
> 
> -	return rval;
> +done:
> +	libxfs_close_devices(a);
> +	rcu_unregister_thread();
> +	return 0;
>  }
> 
> 
> diff --git a/libxfs/topology.c b/libxfs/topology.c
> index a17c19691..25f47beda 100644
> --- a/libxfs/topology.c
> +++ b/libxfs/topology.c
> @@ -292,7 +292,6 @@ void get_topology(
>  	int			force_overwrite)
>  {
>  	struct stat statbuf;
> -	char *dfile = xi->volname ? xi->volname : xi->dname;
> 
>  	/*
>  	 * If our target is a regular file, use platform_findsizes
> @@ -300,7 +299,7 @@ void get_topology(
>  	 * for direct IO; we'll set our sector size to that if possible.
>  	 */
>  	if (xi->disfile ||
> -	    (!stat(dfile, &statbuf) && S_ISREG(statbuf.st_mode))) {
> +	    (!stat(xi->dname, &statbuf) && S_ISREG(statbuf.st_mode))) {
>  		int fd;
>  		int flags = O_RDONLY;
>  		long long dummy;
> @@ -309,15 +308,16 @@ void get_topology(
>  		if (xi->disfile)
>  			flags |= O_CREAT;
> 
> -		fd = open(dfile, flags, 0666);
> +		fd = open(xi->dname, flags, 0666);
>  		if (fd >= 0) {
> -			platform_findsizes(dfile, fd, &dummy, &ft->lsectorsize);
> +			platform_findsizes(xi->dname, fd, &dummy,
> +					&ft->lsectorsize);
>  			close(fd);
>  			ft->psectorsize = ft->lsectorsize;
>  		} else
>  			ft->psectorsize = ft->lsectorsize = BBSIZE;
>  	} else {
> -		blkid_get_topology(dfile, &ft->dsunit, &ft->dswidth,
> +		blkid_get_topology(xi->dname, &ft->dsunit, &ft->dswidth,
>  				   &ft->lsectorsize, &ft->psectorsize,
>  				   force_overwrite);
>  	}
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index c522cb4df..19849ed21 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -1959,7 +1959,6 @@ validate_sectorsize(
>  	struct cli_params	*cli,
>  	struct mkfs_default_params *dft,
>  	struct fs_topology	*ft,
> -	char			*dfile,
>  	int			dry_run,
>  	int			force_overwrite)
>  {
> @@ -1967,7 +1966,8 @@ validate_sectorsize(
>  	 * Before anything else, verify that we are correctly operating on
>  	 * files or block devices and set the control parameters correctly.
>  	 */
> -	check_device_type(dfile, &cli->xi->disfile, !cli->dsize, !dfile,
> +	check_device_type(cli->xi->dname, &cli->xi->disfile,
> +			  !cli->dsize, !cli->xi->dname,
>  			  dry_run ? NULL : &cli->xi->dcreat, "d");
>  	if (!cli->loginternal)
>  		check_device_type(cli->xi->logname, &cli->xi->lisfile,
> @@ -2929,36 +2929,17 @@ reported by the device (%u).\n"),
>  	}
>  }
> 
> -/*
> - * This is more complex than it needs to be because we still support volume
> - * based external logs. They are only discovered *after* the devices have been
> - * opened, hence the crazy "is this really an internal log" checks here.
> - */
>  static void
>  validate_logdev(
>  	struct mkfs_params	*cfg,
> -	struct cli_params	*cli,
> -	char			**devname)
> +	struct cli_params	*cli)
>  {
>  	struct libxfs_xinit	*xi = cli->xi;
> 
> -	*devname = NULL;
> -
> -	/* check for volume log first */
> -	if (cli->loginternal && xi->volname && xi->logdev) {
> -		*devname = _("volume log");
> -		cfg->loginternal = false;
> -	} else
> -		cfg->loginternal = cli->loginternal;
> +	cfg->loginternal = cli->loginternal;
> 
>  	/* now run device checks */
>  	if (cfg->loginternal) {
> -		if (xi->logdev) {
> -			fprintf(stderr,
> -_("can't have both external and internal logs\n"));
> -			usage();
> -		}
> -
>  		/*
>  		 * if no sector size has been specified on the command line,
>  		 * use what has been configured and validated for the data
> @@ -2980,14 +2961,11 @@ _("log size %lld too large for internal log\n"),
>  				(long long)cfg->logblocks);
>  			usage();
>  		}
> -		*devname = _("internal log");
>  		return;
>  	}
> 
>  	/* External/log subvolume checks */
> -	if (xi->logname)
> -		*devname = xi->logname;
> -	if (!*devname || !xi->logdev) {
> +	if (!*xi->logname || !xi->logdev) {
>  		fprintf(stderr, _("no log subvolume or external log.\n"));
>  		usage();
>  	}
> @@ -3018,13 +2996,10 @@ reported by the device (%u).\n"),
>  static void
>  validate_rtdev(
>  	struct mkfs_params	*cfg,
> -	struct cli_params	*cli,
> -	char			**devname)
> +	struct cli_params	*cli)
>  {
>  	struct libxfs_xinit	*xi = cli->xi;
> 
> -	*devname = NULL;
> -
>  	if (!xi->rtdev) {
>  		if (cli->rtsize) {
>  			fprintf(stderr,
> @@ -3032,7 +3007,6 @@ _("size specified for non-existent rt subvolume\n"));
>  			usage();
>  		}
> 
> -		*devname = _("none");
>  		cfg->rtblocks = 0;
>  		cfg->rtextents = 0;
>  		cfg->rtbmblocks = 0;
> @@ -3043,12 +3017,6 @@ _("size specified for non-existent rt subvolume\n"));
>  		usage();
>  	}
> 
> -	/* volume rtdev */
> -	if (xi->volname)
> -		*devname = _("volume rt");
> -	else
> -		*devname = xi->rtname;
> -
>  	if (cli->rtsize) {
>  		if (cfg->rtblocks > DTOBT(xi->rtsize, cfg->blocklog)) {
>  			fprintf(stderr,
> @@ -4080,9 +4048,6 @@ main(
>  	xfs_agnumber_t		agno;
>  	struct xfs_buf		*buf;
>  	int			c;
> -	char			*dfile = NULL;
> -	char			*logfile = NULL;
> -	char			*rtfile = NULL;
>  	int			dry_run = 0;
>  	int			discard = 1;
>  	int			force_overwrite = 0;
> @@ -4222,9 +4187,8 @@ main(
>  		fprintf(stderr, _("extra arguments\n"));
>  		usage();
>  	} else if (argc - optind == 1) {
> -		dfile = xi.volname = getstr(argv[optind], &dopts, D_NAME);
> -	} else
> -		dfile = xi.dname;
> +		xi.dname = getstr(argv[optind], &dopts, D_NAME);
> +	}
> 
>  	/*
>  	 * Now we have all the options parsed, we can read in the option file
> @@ -4241,8 +4205,7 @@ main(
>  	 * before opening the libxfs devices.
>  	 */
>  	validate_blocksize(&cfg, &cli, &dft);
> -	validate_sectorsize(&cfg, &cli, &dft, &ft, dfile, dry_run,
> -			    force_overwrite);
> +	validate_sectorsize(&cfg, &cli, &dft, &ft, dry_run, force_overwrite);
> 
>  	/*
>  	 * XXX: we still need to set block size and sector size global variables
> @@ -4277,10 +4240,10 @@ main(
>  	 * Open and validate the device configurations
>  	 */
>  	open_devices(&cfg, &xi);
> -	validate_overwrite(dfile, force_overwrite);
> +	validate_overwrite(xi.dname, force_overwrite);
>  	validate_datadev(&cfg, &cli);
> -	validate_logdev(&cfg, &cli, &logfile);
> -	validate_rtdev(&cfg, &cli, &rtfile);
> +	validate_logdev(&cfg, &cli);
> +	validate_rtdev(&cfg, &cli);
>  	calc_stripe_factors(&cfg, &cli, &ft);
> 
>  	/*
> @@ -4321,7 +4284,7 @@ main(
>  		struct xfs_fsop_geom	geo;
> 
>  		libxfs_fs_geometry(mp, &geo, XFS_FS_GEOM_MAX_STRUCT_VER);
> -		xfs_report_geom(&geo, dfile, logfile, rtfile);
> +		xfs_report_geom(&geo, xi.dname, xi.logname, xi.rtname);
>  		if (dry_run)
>  			exit(0);
>  	}
> diff --git a/repair/init.c b/repair/init.c
> index 0d5bfabcf..6d019b393 100644
> --- a/repair/init.c
> +++ b/repair/init.c
> @@ -54,15 +54,8 @@ xfs_init(libxfs_init_t *args)
>  {
>  	memset(args, 0, sizeof(libxfs_init_t));
> 
> -	if (isa_file)  {
> -		args->disfile = 1;
> -		args->dname = fs_name;
> -		args->volname = NULL;
> -	} else  {
> -		args->disfile = 0;
> -		args->volname = fs_name;
> -		args->dname = NULL;
> -	}
> +	args->dname = fs_name;
> +	args->disfile = isa_file;
> 
>  	if (log_spec)  {	/* External log specified */
>  		args->logname = log_name;
> --
> 2.39.2
> 




[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