diff options
Diffstat (limited to 'sys/geom/part/g_part.c')
-rw-r--r-- | sys/geom/part/g_part.c | 39 |
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; } |