diff options
author | lulf <lulf@FreeBSD.org> | 2008-09-07 13:54:57 +0000 |
---|---|---|
committer | lulf <lulf@FreeBSD.org> | 2008-09-07 13:54:57 +0000 |
commit | 8c52b542c0de3a703a273d3ef92e1d9ba8ea23e1 (patch) | |
tree | 16f2ffcdc41f0c11cebb1b3f34481ddf1a5d05cc /sys/geom/geom_dev.c | |
parent | cb1cd5ee09eb37bf756225d7f27b846e17599cf1 (diff) | |
download | FreeBSD-src-8c52b542c0de3a703a273d3ef92e1d9ba8ea23e1.zip FreeBSD-src-8c52b542c0de3a703a273d3ef92e1d9ba8ea23e1.tar.gz |
- Add a new ioctl for getting the provider name of a geom provider.
- Add a routine for looking up a device and checking if it is a valid geom
provider given a partial or full path to its device node.
Reviewed by: phk
Approved by: pjd (mentor)
Diffstat (limited to 'sys/geom/geom_dev.c')
-rw-r--r-- | sys/geom/geom_dev.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c index 4abbfc0..eeb3b09 100644 --- a/sys/geom/geom_dev.c +++ b/sys/geom/geom_dev.c @@ -244,6 +244,7 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread { struct g_geom *gp; struct g_consumer *cp; + struct g_provider *pp; struct g_kerneldump kd; off_t offset, length, chunk; int i, error; @@ -251,6 +252,7 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread gp = dev->si_drv1; cp = dev->si_drv2; + pp = cp->provider; error = 0; KASSERT(cp->acr || cp->acw, @@ -329,6 +331,11 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread case DIOCGIDENT: error = g_io_getattr("GEOM::ident", cp, &i, data); break; + case DIOCGPROVIDERNAME: + if (pp == NULL) + return (ENOENT); + strlcpy(data, pp->name, i); + break; default: if (cp->provider->geom->ioctl != NULL) { |