summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_disk.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2001-05-26 08:27:58 +0000
committerphk <phk@FreeBSD.org>2001-05-26 08:27:58 +0000
commit2072a71f0e5186928f3cb8cfac61fe8199029442 (patch)
treeb40e6ace9e559eda88dc8e88344909bffdde59e4 /sys/kern/subr_disk.c
parent32df247d021a07cb6a2425587a871d41f24660e6 (diff)
downloadFreeBSD-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.c21
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);
}
OpenPOWER on IntegriCloud