summaryrefslogtreecommitdiffstats
path: root/sys/geom/part/g_part.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/part/g_part.c')
-rw-r--r--sys/geom/part/g_part.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index 1583122..31b535a 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -1352,16 +1352,20 @@ g_part_ctl_setunset(struct gctl_req *req, struct g_part_parms *gpp,
table = gp->softc;
- LIST_FOREACH(entry, &table->gpt_entry, gpe_entry) {
- if (entry->gpe_deleted || entry->gpe_internal)
- continue;
- if (entry->gpe_index == gpp->gpp_index)
- break;
- }
- if (entry == NULL) {
- gctl_error(req, "%d index '%d'", ENOENT, gpp->gpp_index);
- return (ENOENT);
- }
+ if (gpp->gpp_parms & G_PART_PARM_INDEX) {
+ LIST_FOREACH(entry, &table->gpt_entry, gpe_entry) {
+ if (entry->gpe_deleted || entry->gpe_internal)
+ continue;
+ if (entry->gpe_index == gpp->gpp_index)
+ break;
+ }
+ if (entry == NULL) {
+ gctl_error(req, "%d index '%d'", ENOENT,
+ gpp->gpp_index);
+ return (ENOENT);
+ }
+ } else
+ entry = NULL;
error = G_PART_SETUNSET(table, entry, gpp->gpp_attrib, set);
if (error) {
@@ -1374,8 +1378,11 @@ g_part_ctl_setunset(struct gctl_req *req, struct g_part_parms *gpp,
sb = sbuf_new_auto();
sbuf_printf(sb, "%s %sset on ", gpp->gpp_attrib,
(set) ? "" : "un");
- G_PART_FULLNAME(table, entry, sb, gp->name);
- sbuf_printf(sb, "\n");
+ if (entry)
+ G_PART_FULLNAME(table, entry, sb, gp->name);
+ else
+ sbuf_cat(sb, gp->name);
+ sbuf_cat(sb, "\n");
sbuf_finish(sb);
gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1);
sbuf_delete(sb);
@@ -1581,8 +1588,8 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
case 's':
if (!strcmp(verb, "set")) {
ctlreq = G_PART_CTL_SET;
- mparms |= G_PART_PARM_ATTRIB | G_PART_PARM_GEOM |
- G_PART_PARM_INDEX;
+ mparms |= G_PART_PARM_ATTRIB | G_PART_PARM_GEOM;
+ oparms |= G_PART_PARM_INDEX;
}
break;
case 'u':
@@ -1592,8 +1599,8 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
modifies = 0;
} else if (!strcmp(verb, "unset")) {
ctlreq = G_PART_CTL_UNSET;
- mparms |= G_PART_PARM_ATTRIB | G_PART_PARM_GEOM |
- G_PART_PARM_INDEX;
+ mparms |= G_PART_PARM_ATTRIB | G_PART_PARM_GEOM;
+ oparms |= G_PART_PARM_INDEX;
}
break;
}
OpenPOWER on IntegriCloud