PERFORCE change 96396 for review

John Birrell jb at FreeBSD.org
Sun Apr 30 05:43:11 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=96396

Change 96396 by jb at jb_freebsd2 on 2006/04/30 05:42:27

	Create all the dtrace device nodes below /dev/dtrace so that provides
	don't use the same name space as other devices.
	
	This exposes a quirk with the device cloning code. The first time
	after booting that /dev/dtrace/dtrace is opened, the clone function
	gets the name 'dtrace' it then creates /dev/dtrace/dtrace1. If
	the module is unloaded and reloaded, the next time that /dev/dtrace/dtrace
	is opened, the clone function gets the name 'dtrace/dtrace'. This
	is non-intuitive.

Affected files ...

.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_open.c#9 edit
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_clone.c#4 edit

Differences ...

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_open.c#9 (text) ====

@@ -782,7 +782,7 @@
 				dfp->df_size = size;
 			}
 
-			(void) snprintf(path, sizeof (path), "/dev/%s", p1);
+			(void) snprintf(path, sizeof (path), "/dev/dtrace/%s", p1);
 
 			if ((fd = open(path, O_RDONLY)) == -1)
 				continue; /* failed to open driver; just skip it */
@@ -919,17 +919,13 @@
 	 */
 	dt_provmod_open(&provmod, &df);
 
-#if defined(sun)
 	dtfd = open("/dev/dtrace/dtrace", O_RDWR);
-#else
-	dtfd = open("/dev/dtrace", O_RDWR | O_DEBUG);
-#endif
 	err = errno; /* save errno from opening dtfd */
 
 #if defined(sun)
 	ftfd = open("/dev/dtrace/provider/fasttrap", O_RDWR);
 #else
-	ftfd = open("/dev/fasttrap", O_RDWR);
+	ftfd = open("/dev/dtrace/fasttrap", O_RDWR);
 #endif
 	fterr = ftfd == -1 ? errno : 0; /* save errno from open ftfd */
 

==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_clone.c#4 (text+ko) ====

@@ -33,11 +33,20 @@
 dtrace_clone(void *arg, struct ucred *cred, char *name, int namelen, struct cdev **dev)
 {
 	int u;
+	size_t len;
 
 	if (*dev != NULL)
 		return;
 
-	if (strlen(name) != 6 || bcmp(name,"dtrace",6) != 0)
+	len = strlen(name);
+
+	if (len != 6 && len != 13)
+		return;
+
+	if (bcmp(name,"dtrace",6) != 0)
+		return;
+
+	if (len == 13 && bcmp(name,"dtrace/dtrace",13) != 0)
 		return;
 
 	/* Allocate a unique minor number. */
@@ -45,9 +54,9 @@
 
 	/* Clone the device to the new minor number. */
 	if (clone_create(&dtrace_clones, &dtrace_cdevsw, &u, dev, 0) != 0)
-		/* Create the /dev/dtraceNN entry. */
+		/* Create the /dev/dtrace/dtraceNN entry. */
 		*dev = make_dev_cred(&dtrace_cdevsw, unit2minor(u), cred,
-		     UID_ROOT, GID_WHEEL, 0600, "dtrace%d", u);
+		     UID_ROOT, GID_WHEEL, 0600, "dtrace/dtrace%d", u);
 	if (*dev != NULL) {
 		dev_ref(*dev);
 		(*dev)->si_flags |= SI_CHEAPCLONE;


More information about the p4-projects mailing list