diff options
author | mav <mav@FreeBSD.org> | 2009-12-24 11:05:23 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2009-12-24 11:05:23 +0000 |
commit | f90d8324367d5d579faf67e2a84261d958916058 (patch) | |
tree | a2fd3264b860fd9b4d26648a1c3776d37606a4b0 | |
parent | 5908bf1b9fa686f7864c16aae75e08714dc56192 (diff) | |
download | FreeBSD-src-f90d8324367d5d579faf67e2a84261d958916058.zip FreeBSD-src-f90d8324367d5d579faf67e2a84261d958916058.tar.gz |
Add two disk ioctls, giving user-level tools information about disk/array
stripe (optimal access block) size and offset.
-rw-r--r-- | sys/geom/geom_dev.c | 7 | ||||
-rw-r--r-- | sys/sys/disk.h | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index 8b560ab..af05618 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 4fe2e09..422229e 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_ */ |