Changeset View
Changeset View
Standalone View
Standalone View
head/sys/geom/eli/g_eli_ctl.c
Show First 20 Lines • Show All 649 Lines • ▼ Show 20 Lines | for (i = 0; i < *nargs; i++) { | ||||
error = g_write_data(cp, pp->mediasize - pp->sectorsize, sector, | error = g_write_data(cp, pp->mediasize - pp->sectorsize, sector, | ||||
pp->sectorsize); | pp->sectorsize); | ||||
if (error != 0) { | if (error != 0) { | ||||
gctl_error(req, | gctl_error(req, | ||||
"Cannot store metadata on %s (error=%d).", | "Cannot store metadata on %s (error=%d).", | ||||
prov, error); | prov, error); | ||||
} | } | ||||
explicit_bzero(&md, sizeof(md)); | explicit_bzero(&md, sizeof(md)); | ||||
explicit_bzero(sector, pp->sectorsize); | zfree(sector, M_ELI); | ||||
free(sector, M_ELI); | |||||
} | } | ||||
} | } | ||||
static void | static void | ||||
g_eli_ctl_setkey(struct gctl_req *req, struct g_class *mp) | g_eli_ctl_setkey(struct gctl_req *req, struct g_class *mp) | ||||
{ | { | ||||
struct g_eli_softc *sc; | struct g_eli_softc *sc; | ||||
struct g_eli_metadata md; | struct g_eli_metadata md; | ||||
▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | g_eli_ctl_setkey(struct gctl_req *req, struct g_class *mp) | ||||
} | } | ||||
sector = malloc(pp->sectorsize, M_ELI, M_WAITOK | M_ZERO); | sector = malloc(pp->sectorsize, M_ELI, M_WAITOK | M_ZERO); | ||||
/* Store metadata with fresh key. */ | /* Store metadata with fresh key. */ | ||||
eli_metadata_encode(&md, sector); | eli_metadata_encode(&md, sector); | ||||
explicit_bzero(&md, sizeof(md)); | explicit_bzero(&md, sizeof(md)); | ||||
error = g_write_data(cp, pp->mediasize - pp->sectorsize, sector, | error = g_write_data(cp, pp->mediasize - pp->sectorsize, sector, | ||||
pp->sectorsize); | pp->sectorsize); | ||||
explicit_bzero(sector, pp->sectorsize); | zfree(sector, M_ELI); | ||||
free(sector, M_ELI); | |||||
if (error != 0) { | if (error != 0) { | ||||
gctl_error(req, "Cannot store metadata on %s (error=%d).", | gctl_error(req, "Cannot store metadata on %s (error=%d).", | ||||
pp->name, error); | pp->name, error); | ||||
return; | return; | ||||
} | } | ||||
G_ELI_DEBUG(1, "Key %u changed on %s.", nkey, pp->name); | G_ELI_DEBUG(1, "Key %u changed on %s.", nkey, pp->name); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | for (i = 0; i <= g_eli_overwrites; i++) { | ||||
} | } | ||||
/* | /* | ||||
* Flush write cache so we don't overwrite data N times in cache | * Flush write cache so we don't overwrite data N times in cache | ||||
* and only once on disk. | * and only once on disk. | ||||
*/ | */ | ||||
(void)g_io_flush(cp); | (void)g_io_flush(cp); | ||||
} | } | ||||
explicit_bzero(&md, sizeof(md)); | explicit_bzero(&md, sizeof(md)); | ||||
explicit_bzero(sector, pp->sectorsize); | zfree(sector, M_ELI); | ||||
free(sector, M_ELI); | |||||
if (*all) | if (*all) | ||||
G_ELI_DEBUG(1, "All keys removed from %s.", pp->name); | G_ELI_DEBUG(1, "All keys removed from %s.", pp->name); | ||||
else | else | ||||
G_ELI_DEBUG(1, "Key %d removed from %s.", nkey, pp->name); | G_ELI_DEBUG(1, "Key %d removed from %s.", nkey, pp->name); | ||||
} | } | ||||
static void | static void | ||||
g_eli_suspend_one(struct g_eli_softc *sc, struct gctl_req *req) | g_eli_suspend_one(struct g_eli_softc *sc, struct gctl_req *req) | ||||
▲ Show 20 Lines • Show All 348 Lines • Show Last 20 Lines |