diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index 8b560abe37b..af05618f163 100644 --- a/sys/geom/geom_dev.c +++ b/sys/geom/geom_dev.c @@ -323,7 +323,12 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread return (ENOENT); strlcpy(data, pp->name, i); break; - + case DIOCGSTRIPESIZE: + *(off_t *)data = cp->provider->stripesize; + break; + case DIOCGSTRIPEOFFSET: + *(off_t *)data = cp->provider->stripeoffset; + break; default: if (cp->provider->geom->ioctl != NULL) { error = cp->provider->geom->ioctl(cp->provider, cmd, data, fflag, td); diff --git a/sys/sys/disk.h b/sys/sys/disk.h index 4fe2e09c22f..422229ef69c 100644 --- a/sys/sys/disk.h +++ b/sys/sys/disk.h @@ -104,4 +104,16 @@ void disk_err(struct bio *bp, const char *what, int blkdone, int nl); * must be at least MAXPATHLEN bytes long. */ +#define DIOCGSTRIPESIZE _IOR('d', 139, off_t) /* Get stripe size in bytes */ + /*- + * Get the size of the device's optimal access block in bytes. + * This should be a multiple of the sectorsize. + */ + +#define DIOCGSTRIPEOFFSET _IOR('d', 140, off_t) /* Get stripe offset in bytes */ + /*- + * Get the offset of the first device's optimal access block in bytes. + * This should be a multiple of the sectorsize. + */ + #endif /* _SYS_DISK_H_ */