diff options
author | phk <phk@FreeBSD.org> | 2004-03-11 14:11:02 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-03-11 14:11:02 +0000 |
commit | 7ad97e57ad3c487fa3acbe425df6e2756c27e563 (patch) | |
tree | a2fcc243846fd1f43a869c2f18bf2dee004d4e03 | |
parent | b841b4a2f11e244d84862fa93523a3a7a766f582 (diff) | |
download | FreeBSD-src-7ad97e57ad3c487fa3acbe425df6e2756c27e563.zip FreeBSD-src-7ad97e57ad3c487fa3acbe425df6e2756c27e563.tar.gz |
Correctly account for extra bits in unit numbers when looking for
next free unit.
-rw-r--r-- | sys/kern/kern_conf.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 6ca948d..1a3eaea 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -727,7 +727,7 @@ clone_create(struct clonedevs **cdp, struct cdevsw *csw, int *up, dev_t *dp, u_i * the end of the list. */ unit = *up; - low = 0; + low = extra; de = dl = NULL; cd = *cdp; LIST_FOREACH(dev, &cd->head, si_clone) { @@ -741,14 +741,14 @@ clone_create(struct clonedevs **cdp, struct cdevsw *csw, int *up, dev_t *dp, u_i de = dev; continue; } - if (u > unit) { + if (u > (unit | extra)) { dl = dev; break; } de = dev; } if (unit == -1) - unit = low; + unit = low & CLONE_UNITMASK; dev = makedev(csw->d_maj, unit2minor(unit | extra)); KASSERT(!(dev->si_flags & SI_CLONELIST), ("Dev %p should not be on clonelist", dev)); |