Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/part/g_part.c
Show First 20 Lines • Show All 990 Lines • ▼ Show 20 Lines | if (gp != NULL) { | ||||
null = NULL; | null = NULL; | ||||
if ((gpp->gpp_parms & G_PART_PARM_ENTRIES) && | if ((gpp->gpp_parms & G_PART_PARM_ENTRIES) && | ||||
(gpp->gpp_entries < scheme->gps_minent || | (gpp->gpp_entries < scheme->gps_minent || | ||||
gpp->gpp_entries > scheme->gps_maxent)) { | gpp->gpp_entries > scheme->gps_maxent)) { | ||||
gctl_error(req, "%d entries '%d'", EINVAL, gpp->gpp_entries); | gctl_error(req, "%d entries '%d'", EINVAL, gpp->gpp_entries); | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
if ((gpp->gpp_parms & G_PART_PARM_TBLPRI_START) && | |||||
(gpp->gpp_tblpri_start < 256 || | |||||
gpp->gpp_tblpri_start > pp->mediasize - 512)) { | |||||
gctl_error(req, "%d tblpri_start '%jd'", EINVAL, | |||||
(intmax_t)gpp->gpp_tblpri_start); | |||||
return (EINVAL); | |||||
} | |||||
if ((gpp->gpp_parms & G_PART_PARM_TBLSEC_START) && | |||||
(gpp->gpp_tblsec_start < 512 || | |||||
gpp->gpp_tblsec_start > pp->mediasize)) { | |||||
cem: Should it be somewhat smaller than mediasize? | |||||
bzAuthorUnsubmitted Done Inline ActionsIndeed by at least 1 sector. bz: Indeed by at least 1 sector. | |||||
gctl_error(req, "%d tblsec_start '%jd'", EINVAL, | |||||
(intmax_t)gpp->gpp_tblsec_start); | |||||
return (EINVAL); | |||||
} | |||||
if (null == NULL) | if (null == NULL) | ||||
gp = g_new_geomf(&g_part_class, "%s", pp->name); | gp = g_new_geomf(&g_part_class, "%s", pp->name); | ||||
gp->softc = kobj_create((kobj_class_t)gpp->gpp_scheme, M_GEOM, | gp->softc = kobj_create((kobj_class_t)gpp->gpp_scheme, M_GEOM, | ||||
M_WAITOK); | M_WAITOK); | ||||
table = gp->softc; | table = gp->softc; | ||||
table->gpt_gp = gp; | table->gpt_gp = gp; | ||||
table->gpt_scheme = gpp->gpp_scheme; | table->gpt_scheme = gpp->gpp_scheme; | ||||
table->gpt_entries = (gpp->gpp_parms & G_PART_PARM_ENTRIES) ? | table->gpt_entries = (gpp->gpp_parms & G_PART_PARM_ENTRIES) ? | ||||
gpp->gpp_entries : scheme->gps_minent; | gpp->gpp_entries : scheme->gps_minent; | ||||
table->gpt_tblpri_start = (gpp->gpp_parms & G_PART_PARM_TBLPRI_START) ? | |||||
gpp->gpp_tblpri_start : 0; | |||||
table->gpt_tblsec_start = (gpp->gpp_parms & G_PART_PARM_TBLSEC_START) ? | |||||
gpp->gpp_tblsec_start : 0; | |||||
LIST_INIT(&table->gpt_entry); | LIST_INIT(&table->gpt_entry); | ||||
if (null == NULL) { | if (null == NULL) { | ||||
cp = g_new_consumer(gp); | cp = g_new_consumer(gp); | ||||
cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; | cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE; | ||||
error = g_attach(cp, pp); | error = g_attach(cp, pp); | ||||
if (error == 0) | if (error == 0) | ||||
error = g_access(cp, 1, 1, 1); | error = g_access(cp, 1, 1, 1); | ||||
if (error != 0) { | if (error != 0) { | ||||
▲ Show 20 Lines • Show All 620 Lines • ▼ Show 20 Lines | case 'c': | ||||
if (!strcmp(verb, "commit")) { | if (!strcmp(verb, "commit")) { | ||||
ctlreq = G_PART_CTL_COMMIT; | ctlreq = G_PART_CTL_COMMIT; | ||||
mparms |= G_PART_PARM_GEOM; | mparms |= G_PART_PARM_GEOM; | ||||
modifies = 0; | modifies = 0; | ||||
} else if (!strcmp(verb, "create")) { | } else if (!strcmp(verb, "create")) { | ||||
ctlreq = G_PART_CTL_CREATE; | ctlreq = G_PART_CTL_CREATE; | ||||
mparms |= G_PART_PARM_PROVIDER | G_PART_PARM_SCHEME; | mparms |= G_PART_PARM_PROVIDER | G_PART_PARM_SCHEME; | ||||
oparms |= G_PART_PARM_ENTRIES; | oparms |= G_PART_PARM_ENTRIES; | ||||
oparms |= G_PART_PARM_TBLPRI_START; | |||||
oparms |= G_PART_PARM_TBLSEC_START; | |||||
} | } | ||||
break; | break; | ||||
case 'd': | case 'd': | ||||
if (!strcmp(verb, "delete")) { | if (!strcmp(verb, "delete")) { | ||||
ctlreq = G_PART_CTL_DELETE; | ctlreq = G_PART_CTL_DELETE; | ||||
mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX; | mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX; | ||||
} else if (!strcmp(verb, "destroy")) { | } else if (!strcmp(verb, "destroy")) { | ||||
ctlreq = G_PART_CTL_DESTROY; | ctlreq = G_PART_CTL_DESTROY; | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | case 's': | ||||
else if (!strcmp(ap->name, "start")) | else if (!strcmp(ap->name, "start")) | ||||
parm = G_PART_PARM_START; | parm = G_PART_PARM_START; | ||||
else if (!strcmp(ap->name, "skip_dsn")) | else if (!strcmp(ap->name, "skip_dsn")) | ||||
parm = G_PART_PARM_SKIP_DSN; | parm = G_PART_PARM_SKIP_DSN; | ||||
break; | break; | ||||
case 't': | case 't': | ||||
if (!strcmp(ap->name, "type")) | if (!strcmp(ap->name, "type")) | ||||
parm = G_PART_PARM_TYPE; | parm = G_PART_PARM_TYPE; | ||||
if (!strcmp(ap->name, "tblpri_start")) | |||||
parm = G_PART_PARM_TBLPRI_START; | |||||
if (!strcmp(ap->name, "tblsec_start")) | |||||
parm = G_PART_PARM_TBLSEC_START; | |||||
break; | break; | ||||
case 'v': | case 'v': | ||||
if (!strcmp(ap->name, "verb")) | if (!strcmp(ap->name, "verb")) | ||||
continue; | continue; | ||||
else if (!strcmp(ap->name, "version")) | else if (!strcmp(ap->name, "version")) | ||||
parm = G_PART_PARM_VERSION; | parm = G_PART_PARM_VERSION; | ||||
break; | break; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | case G_PART_PARM_SIZE: | ||||
break; | break; | ||||
case G_PART_PARM_SKIP_DSN: | case G_PART_PARM_SKIP_DSN: | ||||
error = g_part_parm_uint32(req, ap->name, | error = g_part_parm_uint32(req, ap->name, | ||||
&gpp.gpp_skip_dsn); | &gpp.gpp_skip_dsn); | ||||
break; | break; | ||||
case G_PART_PARM_START: | case G_PART_PARM_START: | ||||
error = g_part_parm_quad(req, ap->name, | error = g_part_parm_quad(req, ap->name, | ||||
&gpp.gpp_start); | &gpp.gpp_start); | ||||
break; | |||||
case G_PART_PARM_TBLPRI_START: | |||||
error = g_part_parm_quad(req, ap->name, | |||||
&gpp.gpp_tblpri_start); | |||||
break; | |||||
case G_PART_PARM_TBLSEC_START: | |||||
error = g_part_parm_quad(req, ap->name, | |||||
&gpp.gpp_tblsec_start); | |||||
break; | break; | ||||
case G_PART_PARM_TYPE: | case G_PART_PARM_TYPE: | ||||
error = g_part_parm_str(req, ap->name, &gpp.gpp_type); | error = g_part_parm_str(req, ap->name, &gpp.gpp_type); | ||||
break; | break; | ||||
case G_PART_PARM_VERSION: | case G_PART_PARM_VERSION: | ||||
error = g_part_parm_uint32(req, ap->name, | error = g_part_parm_uint32(req, ap->name, | ||||
&gpp.gpp_version); | &gpp.gpp_version); | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 602 Lines • Show Last 20 Lines |
Should it be somewhat smaller than mediasize?