svn commit: r266656 - user/nwhitehorn/bsdinstall_zfspartedit/partedit
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun May 25 16:42:35 UTC 2014
Author: nwhitehorn
Date: Sun May 25 16:42:33 2014
New Revision: 266656
URL: http://svnweb.freebsd.org/changeset/base/266656
Log:
Commit patch to add ZFS support. This is compile-tested only and needs some
further work, but it's a start.
Submitted by: Kurt Lidl (thanks!)
Modified:
user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/part_wizard.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.h
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_generic.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_pc98.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_powerpc.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_sparc64.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_x86.c
user/nwhitehorn/bsdinstall_zfspartedit/partedit/scripted.c
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/gpart_ops.c Sun May 25 16:42:33 2014 (r266656)
@@ -38,6 +38,7 @@
#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)
@@ -79,6 +80,16 @@ scheme_supports_labels(const char *schem
}
static void
+gnop_command(const char *fstype, char *command, int use_default)
+{
+ if (strcmp(fstype, "freebsd-zfs") == 0) {
+ strcpy(command, "gnop create -S 4096 ");
+ } else {
+ command[0] = '\0';
+ }
+}
+
+static void
newfs_command(const char *fstype, char *command, int use_default)
{
if (strcmp(fstype, "freebsd-ufs") == 0) {
@@ -119,6 +130,47 @@ newfs_command(const char *fstype, char *
else if (strcmp(items[i].name, "TRIM") == 0)
strcat(command, "-t ");
}
+ } else if (strcmp(fstype, "freebsd-zfs") == 0) {
+ int i;
+ DIALOG_LISTITEM items[] = {
+ {"fletcher4", "checksum algorithm: fletcher4",
+ "Use fletcher4 for data integrity checking. "
+ "(default)", 1 },
+ {"fletcher2", "checksum algorithm: fletcher2",
+ "Use fletcher2 for data integrity checking. "
+ "(not recommended)", 0 },
+ {"sha256", "checksum algorithm: sha256",
+ "Use sha256 for data integrity checking. "
+ "(not recommended)", 0 },
+ {"atime", "Update atimes for files",
+ "Disable atime update", 0 },
+ };
+
+ if (!use_default) {
+ int choice;
+ choice = dlg_checklist("ZFS Options", "", 0, 0, 0,
+ sizeof(items)/sizeof(items[0]), items, NULL,
+ FLAG_CHECK, &i);
+ if (choice == 1) /* Cancel */
+ return;
+ }
+
+ strcpy(command, "zpool create -f -o cachefile=none"
+ " -m none -R /mnt ");
+ for (i = 0; i < (int)(sizeof(items)/sizeof(items[0])); i++) {
+ if (items[i].state == 0)
+ continue;
+ if (strcmp(items[i].name, "fletcher4") == 0)
+ strcat(command, "-O checksum=fletcher4 ");
+ else if (strcmp(items[i].name, "fletcher2") == 0)
+ strcat(command, "-O checksum=fletcher2 ");
+ else if (strcmp(items[i].name, "sha256") == 0)
+ strcat(command, "-O checksum=sha256 ");
+ 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[] = {
@@ -329,7 +381,7 @@ gpart_bootcode(struct ggeom *gp)
}
static void
-gpart_partcode(struct gprovider *pp)
+gpart_partcode(struct gprovider *pp, const char *fstype)
{
struct gconfig *gc;
const char *scheme;
@@ -344,7 +396,7 @@ gpart_partcode(struct gprovider *pp)
}
/* Make sure this partition scheme needs partcode on this platform */
- if (partcode_path(scheme) == NULL)
+ if (partcode_path(scheme, fstype) == NULL)
return;
LIST_FOREACH(gc, &pp->lg_config, lg_config) {
@@ -356,8 +408,12 @@ gpart_partcode(struct gprovider *pp)
/* Shell out to gpart for partcode for now */
sprintf(command, "gpart bootcode -p %s -i %s %s",
- partcode_path(scheme), indexstr, pp->lg_geom->lg_name);
- if (system(command) != 0) {
+ partcode_path(scheme, fstype), indexstr, pp->lg_geom->lg_name);
+ sprintf(message, "(echo %s; %s) >>%s 2>>%s",
+ command, command, getenv("BSDINSTALL_LOG"),
+ getenv("BSDINSTALL_LOG"));
+
+ if (system(message) != 0) {
sprintf(message, "Error installing partcode on partition %s",
pp->lg_name);
dialog_msgbox("Error", message, 0, 0, TRUE);
@@ -416,15 +472,15 @@ gpart_edit(struct gprovider *pp)
const char *errstr, *oldtype, *scheme;
struct partition_metadata *md;
char sizestr[32];
- char newfs[64];
+ char gnop[255], newfs[255];
intmax_t idx;
int hadlabel, choice, junk, nitems;
unsigned i;
DIALOG_FORMITEM items[] = {
{0, "Type:", 5, 0, 0, FALSE, "", 11, 0, 12, 15, 0,
- FALSE, "Filesystem type (e.g. freebsd-ufs, freebsd-swap)",
- FALSE},
+ FALSE, "Filesystem type (e.g. freebsd-ufs, freebsd-zfs, "
+ "freebsd-swap)", FALSE},
{0, "Size:", 5, 1, 0, FALSE, "", 11, 1, 12, 0, 0,
FALSE, "Partition size. Append K, M, G for kilobytes, "
"megabytes or gigabytes.", FALSE},
@@ -544,9 +600,11 @@ editpart:
gctl_free(r);
newfs_command(items[0].text, newfs, 1);
+ gnop_command(items[0].text, gnop, 1);
set_default_part_metadata(pp->lg_name, scheme, items[0].text,
- items[2].text, (strcmp(oldtype, items[0].text) != 0) ?
- newfs : NULL);
+ items[2].text,
+ (strcmp(oldtype, items[0].text) != 0) ? gnop : NULL,
+ (strcmp(oldtype, items[0].text) != 0) ? newfs : NULL);
endedit:
if (strcmp(oldtype, items[0].text) != 0 && cp != NULL)
@@ -562,13 +620,27 @@ endedit:
void
set_default_part_metadata(const char *name, const char *scheme,
- const char *type, const char *mountpoint, const char *newfs)
+ const char *type, const char *mountpoint, const char *gnop,
+ const char *newfs)
{
struct partition_metadata *md;
/* Set part metadata */
md = get_part_metadata(name, 1);
+ if (gnop) {
+ if (md->gnop != NULL) {
+ free(md->gnop);
+ md->gnop = NULL;
+ }
+
+ if (gnop != NULL && gnop[0] != '\0') {
+ md->gnop = malloc(strlen(gnop) + strlen(" /dev/") +
+ strlen(name) + 1);
+ sprintf(md->gnop, "%s /dev/%s", gnop, name);
+ }
+ }
+
if (newfs) {
if (md->newfs != NULL) {
free(md->newfs);
@@ -577,8 +649,10 @@ set_default_part_metadata(const char *na
if (newfs != NULL && newfs[0] != '\0') {
md->newfs = malloc(strlen(newfs) + strlen(" /dev/") +
- strlen(name) + 1);
+ strlen(name) + strlen(".nop") + 1);
sprintf(md->newfs, "%s /dev/%s", newfs, name);
+ if (gnop != NULL)
+ strcat(md->newfs, ".nop");
}
}
@@ -587,8 +661,9 @@ set_default_part_metadata(const char *na
if (strcmp(type, bootpart_type(scheme)) == 0)
md->bootcode = 1;
- /* VTOC8 needs partcode in UFS partitions */
- if (strcmp(scheme, "VTOC8") == 0 && strcmp(type, "freebsd-ufs") == 0)
+ /* VTOC8 needs partcode at the start of partitions */
+ if (strcmp(scheme, "VTOC8") == 0 && (strcmp(type, "freebsd-ufs") == 0
+ || strcmp(type, "freebsd-zfs") == 0))
md->bootcode = 1;
if (mountpoint == NULL || mountpoint[0] == '\0') {
@@ -611,7 +686,7 @@ set_default_part_metadata(const char *na
free(md->fstab->fs_mntops);
free(md->fstab->fs_type);
}
- md->fstab->fs_spec = malloc(strlen(name) + 6);
+ 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 */
@@ -626,7 +701,15 @@ set_default_part_metadata(const char *na
md->fstab->fs_freq = 0;
md->fstab->fs_passno = 0;
} else {
- md->fstab->fs_type = strdup(FSTAB_RW);
+ 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);
+ }
if (strcmp(mountpoint, "/") == 0) {
md->fstab->fs_freq = 1;
md->fstab->fs_passno = 1;
@@ -748,7 +831,7 @@ gpart_create(struct gprovider *pp, char
struct ggeom *geom;
const char *errstr, *scheme;
char sizestr[32], startstr[32], output[64], *newpartname;
- char newfs[64], options_fstype[64];
+ char gnop[255], newfs[255], options_fstype[64];
intmax_t maxsize, size, sector, firstfree, stripe;
uint64_t bytes;
int nitems, choice, junk;
@@ -756,8 +839,8 @@ gpart_create(struct gprovider *pp, char
DIALOG_FORMITEM items[] = {
{0, "Type:", 5, 0, 0, FALSE, "freebsd-ufs", 11, 0, 12, 15, 0,
- FALSE, "Filesystem type (e.g. freebsd-ufs, freebsd-swap)",
- FALSE},
+ FALSE, "Filesystem type (e.g. freebsd-ufs, freebsd-zfs, "
+ "freebsd-swap)", FALSE},
{0, "Size:", 5, 1, 0, FALSE, "", 11, 1, 12, 15, 0,
FALSE, "Partition size. Append K, M, G for kilobytes, "
"megabytes or gigabytes.", FALSE},
@@ -846,6 +929,7 @@ gpart_create(struct gprovider *pp, char
strncpy(options_fstype, items[0].text,
sizeof(options_fstype));
newfs_command(options_fstype, newfs, 1);
+ gnop_command(options_fstype, gnop, 1);
addpartform:
if (interactive) {
dialog_vars.extra_label = "Options";
@@ -862,6 +946,7 @@ addpartform:
strncpy(options_fstype, items[0].text,
sizeof(options_fstype));
newfs_command(options_fstype, newfs, 0);
+ gnop_command(options_fstype, gnop, 0);
goto addpartform;
}
}
@@ -873,6 +958,7 @@ addpartform:
if (strcmp(options_fstype, items[0].text) != 0) {
strncpy(options_fstype, items[0].text, sizeof(options_fstype));
newfs_command(options_fstype, newfs, 1);
+ gnop_command(options_fstype, gnop, 1);
}
size = maxsize;
@@ -976,6 +1062,11 @@ addpartform:
snprintf(sizestr, sizeof(sizestr), "%jd",
bootpart_size(scheme) / sector);
gctl_ro_param(r, "size", -1, sizestr);
+#if 0
+// XXX I don't understand the following part of the patch
++ if (34 == firstfree)
++ firstfree += 30+64; /* round to 64K boundary */
+#endif
snprintf(startstr, sizeof(startstr), "%jd", firstfree);
gctl_ro_param(r, "start", -1, startstr);
gctl_rw_param(r, "output", sizeof(output), output);
@@ -1038,7 +1129,7 @@ addpartform:
gpart_partition(newpartname, "BSD");
else
set_default_part_metadata(newpartname, scheme,
- items[0].text, items[2].text, newfs);
+ items[0].text, items[2].text, gnop, newfs);
for (i = 0; i < (sizeof(items) / sizeof(items[0])); i++)
if (items[i].text_free)
@@ -1222,7 +1313,7 @@ gpart_commit(struct gmesh *mesh)
break;
if (cp == NULL) /* No sub-partitions */
- gpart_partcode(pp);
+ gpart_partcode(pp, md->fstab->fs_vfstype);
}
r = gctl_get_handle();
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/part_wizard.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/part_wizard.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/part_wizard.c Sun May 25 16:42:33 2014 (r266656)
@@ -31,6 +31,9 @@
#include <libutil.h>
#include <inttypes.h>
+#include <sys/sysctl.h>
+#include <string.h>
+
#include <libgeom.h>
#include <dialog.h>
#include <dlg_keys.h>
@@ -42,12 +45,21 @@
static char *boot_disk(struct gmesh *mesh);
static char *wizard_partition(struct gmesh *mesh, const char *disk);
+static intmax_t calc_swapsize(void);
int
-part_wizard(void) {
+part_wizard(const char *fsreq) {
int error;
struct gmesh mesh;
- char *disk, *schemeroot;
+ char *disk, *schemeroot, *fstype;
+ char *fstypes[] = {"ufs", "zfs"};
+
+ if (fsreq != NULL && strcmp(fsreq, "zfs") == 0) {
+ fstype = fstypes[1];
+ } else {
+ /* default to UFS */
+ fstype = fstypes[0];
+ }
startwizard:
error = geom_gettree(&mesh);
@@ -70,11 +82,11 @@ startwizard:
dlg_put_backtitle();
error = geom_gettree(&mesh);
- error = wizard_makeparts(&mesh, schemeroot, 1);
+ error = wizard_makeparts(&mesh, schemeroot, fstype, 1);
if (error)
goto startwizard;
free(schemeroot);
-
+
geom_deletetree(&mesh);
return (0);
@@ -106,9 +118,9 @@ boot_disk(struct gmesh *mesh)
LIST_FOREACH(pp, &gp->lg_provider, lg_provider) {
desc = type = NULL;
LIST_FOREACH(gc, &pp->lg_config, lg_config) {
- if (strcmp(gc->lg_name, "type") == 0)
+ if (strcmp(gc->lg_name, "type") == 0)
type = gc->lg_val;
- if (strcmp(gc->lg_name, "descr") == 0)
+ if (strcmp(gc->lg_name, "descr") == 0)
desc = gc->lg_val;
}
@@ -200,7 +212,7 @@ wizard_partition(struct gmesh *mesh, con
break;
if (classp != NULL) {
- LIST_FOREACH(gpart, &classp->lg_geom, lg_geom)
+ LIST_FOREACH(gpart, &classp->lg_geom, lg_geom)
if (strcmp(gpart->lg_name, disk) == 0)
break;
}
@@ -281,22 +293,54 @@ query:
return (retval);
}
+intmax_t
+calc_swapsize(void)
+{
+ size_t physmem;
+ size_t physmemlen = sizeof(physmem);
+ intmax_t swapsize;
+
+ sysctlbyname("hw.physmem", &physmem, &physmemlen, NULL, 0);
+ fprintf(stderr, "system physmem = %ld\n", physmem);
+ swapsize = physmem;
+ if (physmem > 1024 * 1024 * 1024) {
+ swapsize += 1024LL * 1024 * 1024 + 1024LL * 1024;
+ fprintf(stderr, "swapsize before rounding = %ld\n", swapsize);
+ swapsize = swapsize & 0xFFFFFFFFC0000000LL; // GB
+ } else {
+ swapsize += 2LL * 1024 * 1024;
+ fprintf(stderr, "swapsize before rounding = %ld\n", swapsize);
+ swapsize = swapsize & 0xFFFFFFFFFFF00000LL; // MB
+ }
+ fprintf(stderr, "rounded swapsize = %ld\n", swapsize);
+
+ return swapsize;
+}
+
int
-wizard_makeparts(struct gmesh *mesh, const char *disk, int interactive)
+wizard_makeparts(struct gmesh *mesh, const char *disk, const char *fstype, int interactive)
{
struct gmesh submesh;
struct gclass *classp;
struct ggeom *gp;
struct gprovider *pp;
intmax_t swapsize, available;
- char swapsizestr[10], rootsizestr[10];
+ char swapsizestr[10], rootsizestr[10], *fsname;
+ char *fsnames[] = {"freebsd-ufs", "freebsd-zfs"};
int retval;
+ if (strcmp(fstype, "zfs") == 0) {
+ fsname = fsnames[1];
+ } else {
+ /* default to UFS */
+ fsname = fsnames[0];
+ }
+
LIST_FOREACH(classp, &mesh->lg_class, lg_class)
if (strcmp(classp->lg_name, "PART") == 0)
break;
- LIST_FOREACH(gp, &classp->lg_geom, lg_geom)
+ LIST_FOREACH(gp, &classp->lg_geom, lg_geom)
if (strcmp(gp->lg_name, disk) == 0)
break;
@@ -323,7 +367,7 @@ wizard_makeparts(struct gmesh *mesh, con
return (!retval); /* Editor -> return 0 */
}
- swapsize = SWAP_SIZE(available);
+ swapsize = calc_swapsize();
humanize_number(swapsizestr, 7, swapsize, "B", HN_AUTOSCALE,
HN_NOSPACE | HN_DECIMAL);
humanize_number(rootsizestr, 7, available - swapsize - 1024*1024,
@@ -331,7 +375,7 @@ wizard_makeparts(struct gmesh *mesh, con
geom_gettree(&submesh);
pp = provider_for_name(&submesh, disk);
- gpart_create(pp, "freebsd-ufs", rootsizestr, "/", NULL, 0);
+ gpart_create(pp, fsname, rootsizestr, "/", NULL, 0);
geom_deletetree(&submesh);
geom_gettree(&submesh);
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.c Sun May 25 16:42:33 2014 (r266656)
@@ -95,7 +95,11 @@ main(int argc, const char **argv)
if (strcmp(basename(argv[0]), "autopart") == 0) { /* Guided */
prompt = "Please review the disk setup. When complete, press "
"the Finish button.";
- part_wizard();
+ if (argc > 1 && strcmp(basename(argv[1]), "zfs") == 0) {
+ part_wizard("zfs");
+ } else {
+ part_wizard("ufs");
+ }
} else if (strcmp(basename(argv[0]), "scriptedpart") == 0) {
error = scripted_editor(argc, argv);
prompt = NULL;
@@ -152,6 +156,8 @@ main(int argc, const char **argv)
free(md->fstab->fs_type);
free(md->fstab);
}
+ if (md->gnop != NULL)
+ free(md->gnop);
if (md->newfs != NULL)
free(md->newfs);
free(md->name);
@@ -162,7 +168,7 @@ main(int argc, const char **argv)
init_fstab_metadata();
break;
case 4: /* Auto */
- part_wizard();
+ part_wizard("zfs");
break;
}
@@ -246,6 +252,8 @@ delete_part_metadata(const char *name)
free(md->fstab->fs_type);
free(md->fstab);
}
+ if (md->gnop != NULL)
+ free(md->gnop);
if (md->newfs != NULL)
free(md->newfs);
free(md->name);
@@ -345,6 +353,13 @@ apply_changes(struct gmesh *mesh)
dialog_mixedgauge("Initializing",
"Initializing file systems. Please wait.", 0, 0,
i*100/nitems, nitems, __DECONST(char **, items));
+ if (md->gnop != NULL) {
+ sprintf(message, "(echo %s; %s) >>%s 2>>%s",
+ md->gnop, md->gnop,
+ getenv("BSDINSTALL_LOG"),
+ getenv("BSDINSTALL_LOG"));
+ error = system(message);
+ }
sprintf(message, "(echo %s; %s) >>%s 2>>%s",
md->newfs, md->newfs, getenv("BSDINSTALL_LOG"),
getenv("BSDINSTALL_LOG"));
@@ -372,10 +387,10 @@ apply_changes(struct gmesh *mesh)
dialog_msgbox("Error", message, 0, 0, TRUE);
return (-1);
}
- fprintf(fstab, "# Device\tMountpoint\tFStype\tOptions\tDump\tPass#\n");
+ fprintf(fstab, "# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n");
TAILQ_FOREACH(md, &part_metadata, metadata) {
if (md->fstab != NULL)
- fprintf(fstab, "%s\t%s\t\t%s\t%s\t%d\t%d\n",
+ fprintf(fstab, "%s\t\t%s\t\t%s\t%s\t\t%d\t%d\n",
md->fstab->fs_spec, md->fstab->fs_file,
md->fstab->fs_vfstype, md->fstab->fs_mntops,
md->fstab->fs_freq, md->fstab->fs_passno);
@@ -493,7 +508,9 @@ init_fstab_metadata(void)
md->fstab->fs_freq = fstab->fs_freq;
md->fstab->fs_passno = fstab->fs_passno;
+ md->gnop = NULL;
md->newfs = NULL;
+ md->poolname = NULL;
TAILQ_INSERT_TAIL(&part_metadata, md, metadata);
}
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.h
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.h Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit.h Sun May 25 16:42:33 2014 (r266656)
@@ -44,7 +44,9 @@ struct partition_metadata {
char *name; /* name of this partition, as in GEOM */
struct fstab *fstab; /* fstab data for this partition */
+ char *gnop; /* shell command to initialize gnop */
char *newfs; /* shell command to initialize partition */
+ char *poolname; /* ZFS pool name */
int bootcode;
@@ -54,9 +56,10 @@ struct partition_metadata {
struct partition_metadata *get_part_metadata(const char *name, int create);
void delete_part_metadata(const char *name);
-int part_wizard(void);
+int part_wizard(const char *fstype);
int scripted_editor(int argc, const char **argv);
-int wizard_makeparts(struct gmesh *mesh, const char *disk, int interactive);
+int wizard_makeparts(struct gmesh *mesh, const char *disk, const char *fstype,
+ int interactive);
/* gpart operations */
void gpart_delete(struct gprovider *pp);
@@ -70,7 +73,8 @@ void gpart_revert_all(struct gmesh *mesh
void gpart_commit(struct gmesh *mesh);
int gpart_partition(const char *lg_name, const char *scheme);
void set_default_part_metadata(const char *name, const char *scheme,
- const char *type, const char *mountpoint, const char *newfs);
+ const char *type, const char *mountpoint, const char *gnop,
+ const char *newfs);
/* machine-dependent bootability checks */
const char *default_scheme(void);
@@ -78,6 +82,6 @@ int is_scheme_bootable(const char *schem
size_t bootpart_size(const char *scheme);
const char *bootpart_type(const char *scheme);
const char *bootcode_path(const char *scheme);
-const char *partcode_path(const char *scheme);
+const char *partcode_path(const char *scheme, const char *fs_type);
#endif
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_generic.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_generic.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_generic.c Sun May 25 16:42:33 2014 (r266656)
@@ -68,7 +68,7 @@ bootcode_path(const char *part_type) {
}
const char *
-partcode_path(const char *part_type) {
+partcode_path(const char *part_type, const char *fs_type) {
return (NULL);
}
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_pc98.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_pc98.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_pc98.c Sun May 25 16:42:33 2014 (r266656)
@@ -67,7 +67,7 @@ bootcode_path(const char *part_type) {
}
const char *
-partcode_path(const char *part_type) {
+partcode_path(const char *part_type, const char *fs_type) {
/* No partcode */
return (NULL);
}
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_powerpc.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_powerpc.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_powerpc.c Sun May 25 16:42:33 2014 (r266656)
@@ -84,7 +84,7 @@ bootcode_path(const char *part_type) {
}
const char *
-partcode_path(const char *part_type) {
+partcode_path(const char *part_type, const char *fs_type) {
if (strcmp(part_type, "APM") == 0)
return ("/boot/boot1.hfs");
if (strcmp(part_type, "MBR") == 0)
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_sparc64.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_sparc64.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_sparc64.c Sun May 25 16:42:33 2014 (r266656)
@@ -58,11 +58,16 @@ const char *
bootcode_path(const char *part_type) {
return (NULL);
}
-
+
const char *
-partcode_path(const char *part_type) {
- if (strcmp(part_type, "VTOC8") == 0)
- return ("/boot/boot1");
+partcode_path(const char *part_type, const char *fs_type) {
+ if (strcmp(part_type, "VTOC8") == 0) {
+ if (strcmp(fs_type, "ufs") == 0) {
+ return ("/boot/boot1");
+ } else if (strcmp(fs_type, "zfs") == 0) {
+ return ("/boot/zfsboot");
+ }
+ }
return (NULL);
}
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_x86.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_x86.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/partedit_x86.c Sun May 25 16:42:33 2014 (r266656)
@@ -107,7 +107,7 @@ bootcode_path(const char *part_type) {
}
const char *
-partcode_path(const char *part_type) {
+partcode_path(const char *part_type, const char *fs_type) {
size_t platlen = sizeof(platform);
if (strlen(platform) == 0)
sysctlbyname(platform_sysctl, platform, &platlen, NULL, -1);
@@ -115,6 +115,8 @@ partcode_path(const char *part_type) {
if (strcmp(part_type, "GPT") == 0) {
if (strcmp(platform, "UEFI") == 0)
return ("/boot/boot1.efifat");
+ else if (strcmp(fs_type, "zfs") == 0)
+ return ("/boot/gptzfsboot");
else
return ("/boot/gptboot");
}
Modified: user/nwhitehorn/bsdinstall_zfspartedit/partedit/scripted.c
==============================================================================
--- user/nwhitehorn/bsdinstall_zfspartedit/partedit/scripted.c Sun May 25 16:21:12 2014 (r266655)
+++ user/nwhitehorn/bsdinstall_zfspartedit/partedit/scripted.c Sun May 25 16:42:33 2014 (r266656)
@@ -109,7 +109,7 @@ part_config(char *disk, const char *sche
/* Create partitions */
if (config == NULL) {
- wizard_makeparts(&mesh, disk, 0);
+ wizard_makeparts(&mesh, disk, "zfs", 0);
goto finished;
}
More information about the svn-src-user
mailing list