Add two disk ioctls, giving user-level tools information about disk/array

stripe (optimal access block) size and offset.
This commit is contained in:
Alexander Motin 2009-12-24 11:05:23 +00:00
parent f00919d2fc
commit 8b30323843
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=200934
2 changed files with 18 additions and 1 deletions

View File

@ -323,7 +323,12 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread
return (ENOENT); return (ENOENT);
strlcpy(data, pp->name, i); strlcpy(data, pp->name, i);
break; break;
case DIOCGSTRIPESIZE:
*(off_t *)data = cp->provider->stripesize;
break;
case DIOCGSTRIPEOFFSET:
*(off_t *)data = cp->provider->stripeoffset;
break;
default: default:
if (cp->provider->geom->ioctl != NULL) { if (cp->provider->geom->ioctl != NULL) {
error = cp->provider->geom->ioctl(cp->provider, cmd, data, fflag, td); error = cp->provider->geom->ioctl(cp->provider, cmd, data, fflag, td);

View File

@ -104,4 +104,16 @@ void disk_err(struct bio *bp, const char *what, int blkdone, int nl);
* must be at least MAXPATHLEN bytes long. * 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_ */ #endif /* _SYS_DISK_H_ */