Expose stripe offset and stripe size through libgeom and geom(8) userland
utilities. Reviewed by: pjd, mav (earlier version)
This commit is contained in:
parent
f212a61d5f
commit
35daa28f30
@ -113,6 +113,32 @@ g_sectorsize(int fd)
|
||||
return ((ssize_t)sectorsize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return stripe size of the given provider.
|
||||
*/
|
||||
off_t
|
||||
g_stripesize(int fd)
|
||||
{
|
||||
off_t stripesize;
|
||||
|
||||
if (g_ioctl_arg(fd, DIOCGSTRIPESIZE, &stripesize) == -1)
|
||||
return (-1);
|
||||
return (stripesize);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return stripe size of the given provider.
|
||||
*/
|
||||
off_t
|
||||
g_stripeoffset(int fd)
|
||||
{
|
||||
off_t stripeoffset;
|
||||
|
||||
if (g_ioctl_arg(fd, DIOCGSTRIPEOFFSET, &stripeoffset) == -1)
|
||||
return (-1);
|
||||
return (stripeoffset);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the correct provider name.
|
||||
*/
|
||||
|
@ -230,6 +230,16 @@ EndElement(void *userData, const char *name)
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
if (!strcmp(name, "stripesize") && mt->provider != NULL) {
|
||||
mt->provider->lg_stripesize = strtoumax(p, NULL, 0);
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
if (!strcmp(name, "stripeoffset") && mt->provider != NULL) {
|
||||
mt->provider->lg_stripeoffset = strtoumax(p, NULL, 0);
|
||||
free(p);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strcmp(name, "config")) {
|
||||
mt->config = NULL;
|
||||
|
@ -28,7 +28,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 8, 2008
|
||||
.Dd January 16, 2010
|
||||
.Dt LIBGEOM 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -50,6 +50,8 @@
|
||||
.Nm g_close ,
|
||||
.Nm g_mediasize ,
|
||||
.Nm g_sectorsize ,
|
||||
.Nm g_stripeoffset ,
|
||||
.Nm g_stripesize ,
|
||||
.Nm g_flush ,
|
||||
.Nm g_delete ,
|
||||
.Nm g_device_path ,
|
||||
@ -101,6 +103,10 @@
|
||||
.Fn g_mediasize "int fd"
|
||||
.Ft ssize_t
|
||||
.Fn g_sectorsize "int fd"
|
||||
.Ft ssize_t
|
||||
.Fn g_stripeoffset "int fd"
|
||||
.Ft ssize_t
|
||||
.Fn g_stripesize "int fd"
|
||||
.Ft int
|
||||
.Fn g_flush "int fd"
|
||||
.Ft int
|
||||
@ -297,6 +303,14 @@ The
|
||||
function returns sector size of the given provider.
|
||||
.Pp
|
||||
The
|
||||
.Fn g_stripeoffset
|
||||
function returns stripe size of the given provider.
|
||||
.Pp
|
||||
The
|
||||
.Fn g_stripesize
|
||||
function returns stripe size of the given provider.
|
||||
.Pp
|
||||
The
|
||||
.Fn g_flush
|
||||
function sends
|
||||
.Dv BIO_FLUSH
|
||||
|
@ -123,6 +123,8 @@ struct gprovider {
|
||||
char *lg_mode;
|
||||
off_t lg_mediasize;
|
||||
u_int lg_sectorsize;
|
||||
off_t lg_stripeoffset;
|
||||
off_t lg_stripesize;
|
||||
struct gconf lg_config;
|
||||
};
|
||||
|
||||
@ -149,6 +151,8 @@ int g_open(const char *, int);
|
||||
int g_close(int);
|
||||
off_t g_mediasize(int);
|
||||
ssize_t g_sectorsize(int);
|
||||
off_t g_stripeoffset(int);
|
||||
off_t g_stripesize(int);
|
||||
int g_flush(int);
|
||||
int g_delete(int, off_t, off_t);
|
||||
int g_get_ident(int, char *, size_t);
|
||||
|
@ -772,6 +772,10 @@ list_one_provider(struct gprovider *pp, const char *prefix)
|
||||
printf("%sMediasize: %jd (%s)\n", prefix, (intmax_t)pp->lg_mediasize,
|
||||
buf);
|
||||
printf("%sSectorsize: %u\n", prefix, pp->lg_sectorsize);
|
||||
if (pp->lg_stripesize > 0) {
|
||||
printf("%sStripesize: %ju\n", prefix, pp->lg_stripesize);
|
||||
printf("%sStripeoffset: %ju\n", prefix, pp->lg_stripeoffset);
|
||||
}
|
||||
printf("%sMode: %s\n", prefix, pp->lg_mode);
|
||||
LIST_FOREACH(conf, &pp->lg_config, lg_config) {
|
||||
printf("%s%s: %s\n", prefix, conf->lg_name, conf->lg_val);
|
||||
@ -796,6 +800,10 @@ list_one_consumer(struct gconsumer *cp, const char *prefix)
|
||||
printf("%sMediasize: %jd (%s)\n", prefix,
|
||||
(intmax_t)pp->lg_mediasize, buf);
|
||||
printf("%sSectorsize: %u\n", prefix, pp->lg_sectorsize);
|
||||
if (pp->lg_stripesize > 0) {
|
||||
printf("%sStripesize: %ju\n", prefix, pp->lg_stripesize);
|
||||
printf("%sStripeoffset: %ju\n", prefix, pp->lg_stripeoffset);
|
||||
}
|
||||
printf("%sMode: %s\n", prefix, cp->lg_mode);
|
||||
}
|
||||
LIST_FOREACH(conf, &cp->lg_config, lg_config) {
|
||||
|
@ -185,6 +185,10 @@ g_conf_provider(struct sbuf *sb, struct g_provider *pp)
|
||||
sbuf_printf(sb, "\t <mediasize>%jd</mediasize>\n",
|
||||
(intmax_t)pp->mediasize);
|
||||
sbuf_printf(sb, "\t <sectorsize>%u</sectorsize>\n", pp->sectorsize);
|
||||
if (pp->stripesize > 0) {
|
||||
sbuf_printf(sb, "\t <stripesize>%u</stripesize>\n", pp->stripesize);
|
||||
sbuf_printf(sb, "\t <stripeoffset>%u</stripeoffset>\n", pp->stripeoffset);
|
||||
}
|
||||
if (pp->geom->flags & G_GEOM_WITHER)
|
||||
;
|
||||
else if (pp->geom->dumpconf != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user