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;
