summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2009-12-24 11:05:23 +0000
committermav <mav@FreeBSD.org>2009-12-24 11:05:23 +0000
commitf90d8324367d5d579faf67e2a84261d958916058 (patch)
treea2fd3264b860fd9b4d26648a1c3776d37606a4b0
parent5908bf1b9fa686f7864c16aae75e08714dc56192 (diff)
downloadFreeBSD-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.c7
-rw-r--r--sys/sys/disk.h12
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_ */
OpenPOWER on IntegriCloud