svn commit: r271499 - user/nwhitehorn/bsdinstall_zfspartedit/partedit

Nathan Whitehorn nwhitehorn at FreeBSD.org
Sat Sep 13 06:29:38 UTC 2014


Author: nwhitehorn
Date: Sat Sep 13 06:29:38 2014
New Revision: 271499
URL: http://svnweb.freebsd.org/changeset/base/271499

Log:
  Derive the zpool name from its mountpoint for lack of a better alternative.
  We could conceivably use the label field for this, but that isn't present
  for MBR or BSD.
  
  This lets the partition editor (and sade) produce working ZFS systems. The
  next task is making it so that the installer knows that only sparc64 and
  BIOS-booted x86 systems can have / on ZFS.

Modified:
  user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c

Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c	Sat Sep 13 06:13:55 2014	(r271498)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c	Sat Sep 13 06:29:38 2014	(r271499)
@@ -38,7 +38,6 @@
 #include "partedit.h"
 
 #define GPART_FLAGS "x" /* Do not commit changes by default */
-#define DEFAULT_ZPOOL_NAME "sys"	/* default name for zpool */
 
 static void
 gpart_show_error(const char *title, const char *explanation, const char *errstr)
@@ -159,8 +158,6 @@ newfs_command(const char *fstype, char *
 			else if (strcmp(items[i].name, "atime") == 0)
 				strcat(command, "-O atime=off ");
 		}
-		strcat(command, DEFAULT_ZPOOL_NAME);
-		strcat(command, " ");
 	} else if (strcmp(fstype, "fat32") == 0 || strcmp(fstype, "efi") == 0) {
 		int i;
 		DIALOG_LISTITEM items[] = {
@@ -607,6 +604,8 @@ set_default_part_metadata(const char *na
     const char *type, const char *mountpoint, const char *newfs)
 {
 	struct partition_metadata *md;
+	char *zpool_name = NULL;
+	int i;
 
 	/* Set part metadata */
 	md = get_part_metadata(name, 1);
@@ -619,8 +618,17 @@ set_default_part_metadata(const char *na
 
 		if (newfs != NULL && newfs[0] != '\0') {
 			md->newfs = malloc(strlen(newfs) + strlen(" /dev/") +
-			    strlen(name) + 1);
-			sprintf(md->newfs, "%s /dev/%s", newfs, name);
+			    strlen(mountpoint) + 1 + strlen(name) + 1);
+			if (strcmp("freebsd-zfs", type) == 0) {
+				zpool_name = strdup(&mountpoint[1]);
+				for (i = 0; zpool_name[i] != 0; i++)
+					if (!isalnum(zpool_name[i]))
+						zpool_name[i] = '_';
+				sprintf(md->newfs, "%s %s /dev/%s", newfs,
+				    zpool_name, name);
+			} else {
+				sprintf(md->newfs, "%s /dev/%s", newfs, name);
+			}
 		}
 	}
 
@@ -654,8 +662,13 @@ set_default_part_metadata(const char *na
 			free(md->fstab->fs_mntops);
 			free(md->fstab->fs_type);
 		}
-		md->fstab->fs_spec = malloc(strlen(name) + strlen("/dev/") + 1);
-		sprintf(md->fstab->fs_spec, "/dev/%s", name);
+		if (strcmp("freebsd-zfs", type) == 0) {
+			md->fstab->fs_spec = strdup(zpool_name);
+		} else {
+			md->fstab->fs_spec = malloc(strlen(name) +
+			    strlen("/dev/") + 1);
+			sprintf(md->fstab->fs_spec, "/dev/%s", name);
+		}
 		md->fstab->fs_file = strdup(mountpoint);
 		/* Get VFS from text after freebsd-, if possible */
 		if (strncmp("freebsd-", type, 8) == 0)
@@ -669,15 +682,7 @@ set_default_part_metadata(const char *na
 			md->fstab->fs_freq = 0;
 			md->fstab->fs_passno = 0;
 		} else {
-			if (strcmp(md->fstab->fs_vfstype, "zfs") == 0) {
-				md->fstab->fs_type = strdup(FSTAB_XX ",noauto");
-				free(md->fstab->fs_spec);
-				md->fstab->fs_spec = malloc(strlen(name) +
-				    strlen("#/dev/") + 1);
-				sprintf(md->fstab->fs_spec, "#/dev/%s", name);
-			} else {
-				md->fstab->fs_type = strdup(FSTAB_RW);
-			}
+			md->fstab->fs_type = strdup(FSTAB_RW);
 			if (strcmp(mountpoint, "/") == 0) {
 				md->fstab->fs_freq = 1;
 				md->fstab->fs_passno = 1;
@@ -688,6 +693,9 @@ set_default_part_metadata(const char *na
 		}
 		md->fstab->fs_mntops = strdup(md->fstab->fs_type);
 	}
+
+	if (zpool_name != NULL)
+		free(zpool_name);
 }
 
 static


More information about the svn-src-user mailing list