diff options
author | phk <phk@FreeBSD.org> | 2001-05-26 08:27:58 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2001-05-26 08:27:58 +0000 |
commit | 2072a71f0e5186928f3cb8cfac61fe8199029442 (patch) | |
tree | b40e6ace9e559eda88dc8e88344909bffdde59e4 /sys/kern/subr_disk.c | |
parent | 32df247d021a07cb6a2425587a871d41f24660e6 (diff) | |
download | FreeBSD-src-2072a71f0e5186928f3cb8cfac61fe8199029442.zip FreeBSD-src-2072a71f0e5186928f3cb8cfac61fe8199029442.tar.gz |
Create a general facility for making dev_t's depend on another
dev_t. The dev_depends(dev_t, dev_t) function is for tying them
to each other.
When destroy_dev() is called on a dev_t, all dev_t's depending
on it will also be destroyed (depth first order).
Rewrite the make_dev_alias() to use this dependency facility.
kern/subr_disk.c:
Make the disk mini-layer use dependencies to make sure all
relevant dev_t's are removed when the disk disappears.
Make the disk mini-layer precreate some magic sub devices
which the disk/slice/label code expects to be there.
kern/subr_disklabel.c:
Remove some now unneeded variables.
kern/subr_diskmbr.c:
Remove some ancient, commented out code.
kern/subr_diskslice.c:
Minor cleanup. Use name from dev_t instead of dsname()
Diffstat (limited to 'sys/kern/subr_disk.c')
-rw-r--r-- | sys/kern/subr_disk.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index c50c21a..3ac9525 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -86,6 +86,7 @@ disk_clone(void *arg, char *name, int namelen, dev_t *dev) *dev = make_dev(pdev->si_devsw, dkmakeminor(u, s, p), UID_ROOT, GID_OPERATOR, 0640, name); + dev_depends(pdev, *dev); return; } } @@ -105,7 +106,14 @@ dev_t disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, struct cdevsw *proto) { static int once; - dev_t dev; + dev_t dev, cdev; + int i; + char buf[20]; + + if (!once) { + EVENTHANDLER_REGISTER(dev_clone, disk_clone, 0, 1000); + once++; + } bzero(dp, sizeof(*dp)); @@ -128,9 +136,14 @@ disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, struct dp->d_dsflags = flags; dp->d_devsw = cdevsw; LIST_INSERT_HEAD(&disklist, dp, d_list); - if (!once) { - EVENTHANDLER_REGISTER(dev_clone, disk_clone, 0, 1000); - once++; + + sprintf(buf, "%sc", dev->si_name); + cdev = NODEV; + disk_clone(NULL, buf, strlen(buf), &cdev); + for (i = 1; i < 5; i++) { + sprintf(buf, "%ss%d", dev->si_name, i); + cdev = NODEV; + disk_clone(NULL, buf, strlen(buf), &cdev); } return (dev); } |