summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_dev.c
diff options
context:
space:
mode:
authorlulf <lulf@FreeBSD.org>2008-09-07 13:54:57 +0000
committerlulf <lulf@FreeBSD.org>2008-09-07 13:54:57 +0000
commit8c52b542c0de3a703a273d3ef92e1d9ba8ea23e1 (patch)
tree16f2ffcdc41f0c11cebb1b3f34481ddf1a5d05cc /sys/geom/geom_dev.c
parentcb1cd5ee09eb37bf756225d7f27b846e17599cf1 (diff)
downloadFreeBSD-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.c7
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) {
OpenPOWER on IntegriCloud