diff options
author | phk <phk@FreeBSD.org> | 2001-02-25 13:12:57 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2001-02-25 13:12:57 +0000 |
commit | f547e06fc7704325a983ab3cd65e7dca8c2ff5fc (patch) | |
tree | ceb0b50f91d4a329a6a280591e66651dfb0f828b /sys/dev | |
parent | 292085c2c12f53507fafb6423983ac0153495991 (diff) | |
download | FreeBSD-src-f547e06fc7704325a983ab3cd65e7dca8c2ff5fc.zip FreeBSD-src-f547e06fc7704325a983ab3cd65e7dca8c2ff5fc.tar.gz |
Make "md" and "mdctl" macroized parameters.
Implement "-l" option to mdconfig which can list one or all md devices.
Submitted by: Dima Dorfman <dima@unixfreak.org>
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/md/md.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 48ff0b3..dc53517 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -133,7 +133,7 @@ static struct cdevsw md_cdevsw = { /* poll */ nopoll, /* mmap */ nommap, /* strategy */ mdstrategy, - /* name */ "md", + /* name */ MD_NAME, /* maj */ CDEV_MAJOR, /* dump */ nodump, /* psize */ nopsize, @@ -149,7 +149,7 @@ static struct cdevsw mdctl_cdevsw = { /* poll */ nopoll, /* mmap */ nommap, /* strategy */ nostrategy, - /* name */ "md", + /* name */ MD_NAME, /* maj */ CDEV_MAJOR }; @@ -533,7 +533,7 @@ mdinit(struct md_s *sc) { bioq_init(&sc->bio_queue); - devstat_add_entry(&sc->stats, "md", sc->unit, sc->secsize, + devstat_add_entry(&sc->stats, MD_NAME, sc->unit, sc->secsize, DEVSTAT_NO_ORDERED_TAGS, DEVSTAT_TYPE_DIRECT | DEVSTAT_TYPE_IF_OTHER, DEVSTAT_PRIORITY_OTHER); @@ -608,7 +608,7 @@ mdcreate_malloc(struct md_ioctl *mdio) for (u = 0; u < sc->nsect; u++) MALLOC(sc->secp[u], u_char *, DEV_BSIZE, M_MDSECT, M_WAITOK | M_ZERO); } - printf("md%d: Malloc disk\n", sc->unit); + printf("%s%d: Malloc disk\n", MD_NAME, sc->unit); mdinit(sc); return (0); } @@ -833,6 +833,30 @@ mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p) default: return (EOPNOTSUPP); } + case MDIOCQUERY: + sc = mdfind(mdio->md_unit); + if (sc == NULL) + return (ENOENT); + mdio->md_type = sc->type; + mdio->md_options = sc->flags; + switch (sc->type) { + case MD_MALLOC: + mdio->md_size = sc->nsect; + break; + case MD_PRELOAD: + mdio->md_size = sc->nsect; + (u_char *)(uintptr_t)mdio->md_base = sc->pl_ptr; + break; + case MD_SWAP: + mdio->md_size = sc->nsect * (PAGE_SIZE / DEV_BSIZE); + break; + case MD_VNODE: + mdio->md_size = sc->nsect; + /* XXX fill this in */ + mdio->md_file = NULL; + break; + } + return (0); default: return (ENOIOCTL); }; |