summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_mount.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2000-08-24 15:36:55 +0000
committerphk <phk@FreeBSD.org>2000-08-24 15:36:55 +0000
commitec761116e25ef0a9e43ec5670c7c6565a4848a0b (patch)
tree526f85e393c165d9f02f974b9d8214c9b1605bc4 /sys/kern/vfs_mount.c
parentf234fce050713400cc0e6419a59b0f6df01a2501 (diff)
downloadFreeBSD-src-ec761116e25ef0a9e43ec5670c7c6565a4848a0b.zip
FreeBSD-src-ec761116e25ef0a9e43ec5670c7c6565a4848a0b.tar.gz
Fix panic when removing open device (found by bp@)
Implement subdirs. Build the full "devicename" for cloning functions. Fix panic when deleted device goes away. Collaps devfs_dir and devfs_dirent structures. Add proper cloning to the /dev/fd* "device-"driver. Fix a bug in make_dev_alias() handling which made aliases appear multiple times. Use devfs_clone to implement getdiskbyname() Make specfs maintain the stat(2) timestamps per dev_t
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r--sys/kern/vfs_mount.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 9a0ca2c..c75ba40 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -43,6 +43,7 @@
*/
#include "opt_rootdevname.h"
+#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/kernel.h>
@@ -62,6 +63,11 @@
#include <ddb/ddb.h>
#endif
+#ifdef DEVFS
+#include <sys/eventhandler.h>
+#include <fs/devfs/devfs.h>
+#endif
+
MALLOC_DEFINE(M_MOUNT, "mount", "vfs mount structure");
#define ROOTNAME "root_device"
@@ -320,6 +326,19 @@ gets(char *cp)
*/
dev_t
getdiskbyname(char *name) {
+#ifdef DEVFS
+ char *cp;
+ dev_t dev;
+
+ cp = name;
+ if (!bcmp(cp, "/dev/", 5))
+ cp += 5;
+
+ dev = NODEV;
+ EVENTHANDLER_INVOKE(devfs_clone, cp, strlen(cp), &dev);
+ return (dev);
+
+#else
char *cp;
int cd, unit, slice, part;
dev_t dev;
@@ -367,6 +386,7 @@ gotit:
return (NODEV);
}
return (makedev(cd, dkmakeminor(unit, slice, part)));
+#endif
}
/*
OpenPOWER on IntegriCloud