[Midnightbsd-cvs] src [6588] trunk/sys/dev/filemon: revert

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Mon Dec 30 01:10:21 EST 2013


Revision: 6588
          http://svnweb.midnightbsd.org/src/?rev=6588
Author:   laffer1
Date:     2013-12-30 01:10:21 -0500 (Mon, 30 Dec 2013)
Log Message:
-----------
revert

Modified Paths:
--------------
    trunk/sys/dev/filemon/filemon.c
    trunk/sys/dev/filemon/filemon_wrapper.c

Modified: trunk/sys/dev/filemon/filemon.c
===================================================================
--- trunk/sys/dev/filemon/filemon.c	2013-12-30 05:54:41 UTC (rev 6587)
+++ trunk/sys/dev/filemon/filemon.c	2013-12-30 06:10:21 UTC (rev 6588)
@@ -28,6 +28,8 @@
 #include <sys/cdefs.h>
 __MBSDID("$MidnightBSD$");
 
+#include "opt_compat.h"
+
 #include <sys/param.h>
 #include <sys/file.h>
 #include <sys/systm.h>
@@ -48,7 +50,9 @@
 #include <sys/sysproto.h>
 #include <sys/uio.h>
 
+#if __FreeBSD_version >= 900041
 #include <sys/capability.h>
+#endif
 
 #include "filemon.h"
 
@@ -101,12 +105,48 @@
 static struct thread *access_owner = NULL;
 static struct thread *access_requester = NULL;
 
+#if __FreeBSD_version < 701000
+static struct clonedevs *filemon_clones;
+static eventhandler_tag	eh_tag;
+#else
 static struct cdev *filemon_dev;
+#endif
 
 #include "filemon_lock.c"
 #include "filemon_wrapper.c"
 
+#if __FreeBSD_version < 701000
 static void
+filemon_clone(void *arg, struct ucred *cred, char *name, int namelen,
+    struct cdev **dev)
+{
+	int u = -1;
+	size_t len;
+
+	if (*dev != NULL)
+		return;
+
+	len = strlen(name);
+
+	if (len != 7)
+		return;
+
+	if (bcmp(name,"filemon", 7) != 0)
+		return;
+
+	/* Clone the device to the new minor number. */
+	if (clone_create(&filemon_clones, &filemon_cdevsw, &u, dev, 0) != 0)
+		/* Create the /dev/filemonNN entry. */
+		*dev = make_dev_cred(&filemon_cdevsw, u, cred, UID_ROOT,
+		    GID_WHEEL, 0666, "filemon%d", u);
+	if (*dev != NULL) {
+		dev_ref(*dev);
+		(*dev)->si_flags |= SI_CHEAPCLONE;
+	}
+}
+#endif
+
+static void
 filemon_dtr(void *data)
 {
 	struct filemon *filemon = data;
@@ -142,12 +182,20 @@
 	struct filemon *filemon;
 	struct proc *p;
 
+#if __FreeBSD_version < 701000
+	filemon = dev->si_drv1;
+#else
 	devfs_get_cdevpriv((void **) &filemon);
+#endif
 
 	switch (cmd) {
 	/* Set the output file descriptor. */
 	case FILEMON_SET_FD:
+#if __FreeBSD_version < 900041
+#define FGET_WRITE(a1, a2, a3) fget_write((a1), (a2), (a3))
+#else
 #define FGET_WRITE(a1, a2, a3) fget_write((a1), (a2), CAP_WRITE | CAP_SEEK, (a3))
+#endif
 		if ((error = FGET_WRITE(td, *(int *)data, &filemon->fp)) == 0)
 			/* Write the file header. */
 			filemon_comment(filemon);
@@ -198,7 +246,11 @@
 
 	filemon->pid = curproc->p_pid;
 
+#if __FreeBSD_version < 701000
+	dev->si_drv1 = filemon;
+#else
 	devfs_set_cdevpriv(filemon, filemon_dtr);
+#endif
 
 	/* Get exclusive write access. */
 	filemon_lock_write();
@@ -216,7 +268,15 @@
 filemon_close(struct cdev *dev __unused, int flag __unused, int fmt __unused,
     struct thread *td __unused)
 {
+#if __FreeBSD_version < 701000
+	filemon_dtr(dev->si_drv1);
 
+	dev->si_drv1 = NULL;
+
+	/* Schedule this cloned device to be destroyed. */
+	destroy_dev_sched(dev);
+#endif
+
 	return (0);
 }
 
@@ -229,8 +289,16 @@
 	/* Install the syscall wrappers. */
 	filemon_wrapper_install();
 
+#if __FreeBSD_version < 701000
+	/* Enable device cloning. */
+	clone_setup(&filemon_clones);
+
+	/* Setup device cloning events. */
+	eh_tag = EVENTHANDLER_REGISTER(dev_clone, filemon_clone, 0, 1000);
+#else
 	filemon_dev = make_dev(&filemon_cdevsw, 0, UID_ROOT, GID_WHEEL, 0666,
 	    "filemon");
+#endif
 }
 
 static int
@@ -245,7 +313,9 @@
 	if (TAILQ_FIRST(&filemons_inuse) != NULL)
 		error = EBUSY;
 	else {
+#if __FreeBSD_version >= 701000
 		destroy_dev(filemon_dev);
+#endif
 
 		/* Deinstall the syscall wrappers. */
 		filemon_wrapper_deinstall();
@@ -255,6 +325,19 @@
 	filemon_unlock_write();
 
 	if (error == 0) {
+#if __FreeBSD_version < 701000
+		/*
+		 * Check if there is still an event handler callback registered.
+		*/
+		if (eh_tag != 0) {
+			/* De-register the device cloning event handler. */
+			EVENTHANDLER_DEREGISTER(dev_clone, eh_tag);
+			eh_tag = 0;
+
+			/* Stop device cloning. */
+			clone_cleanup(&filemon_clones);
+		}
+#endif
 		/* free() filemon structs free list. */
 		filemon_lock_write();
 		while ((filemon = TAILQ_FIRST(&filemons_free)) != NULL) {

Modified: trunk/sys/dev/filemon/filemon_wrapper.c
===================================================================
--- trunk/sys/dev/filemon/filemon_wrapper.c	2013-12-30 05:54:41 UTC (rev 6587)
+++ trunk/sys/dev/filemon/filemon_wrapper.c	2013-12-30 06:10:21 UTC (rev 6588)
@@ -30,8 +30,31 @@
 
 #include "opt_compat.h"
 
+#if __FreeBSD_version > 800032
 #define FILEMON_HAS_LINKAT
+#endif
 
+#if __FreeBSD_version < 900044	/* r225617 (2011-09-16) failed to bump
+				   __FreeBSD_version.  This really should
+				   be based on "900045".  "900044" is r225469
+				   (2011-09-10) so this code is broken for
+				   9-CURRENT September 10th-16th. */
+#define sys_chdir	chdir
+#define sys_execve	execve
+#define sys_fork	fork
+#define sys_link	link
+#define sys_open	open
+#define sys_rename	rename
+#define sys_stat	stat
+#define sys_symlink	symlink
+#define sys_unlink	unlink
+#define sys_vfork	vfork
+#define sys_sys_exit	sys_exit
+#ifdef FILEMON_HAS_LINKAT
+#define sys_linkat	linkat
+#endif
+#endif	/* __FreeBSD_version */
+
 static void
 filemon_output(struct filemon *filemon, char *msg, size_t len)
 {



More information about the Midnightbsd-cvs mailing list