On Mon, 25 Aug 2008 11:14:08 -0600
Ann Davis <[EMAIL PROTECTED]> wrote:

> Hello,
> 
> I noticed the device API changed (again) in 2.6.27.  :-(  Are there 
> plans to have dazuko 2.3.6 support the 2.6.27 kernels?  It looks like 
> linux_dev_conf, dazuko_linux.c, dazuko_linux26.c and dazuko_redirfs.c 
> will have to change.

Hi,

here is a quick patch for dazuko + redirfs which allows dazuko to run
on 2.6.27 kernel. The patch is made against the dazuko-2.3.6-pre2 release
and tested with the redirfs 0.3 release. Just copy this patch to the
dazuko-2.3.6-pre2 source dir and run "patch -p1 < dazuko_redirfs_2.6.27.patch".

Some details about this patch.

1) Reflects move of the semaphore.h header.

2) Changes dazukoflt priority - irrelevant.

3) Dazuko uses open instead of permission function.
   This has one side effect. Dazuko is not able to
   distinguish open and exec events. Anyway exec events
   are send as open events.

4) Reflected changes in the device_create interface and some
   cleanup.

5) Proper class_destroy

This patch definitely needs John's review but for now it may help
to run dazuko on 2.6.27 with redirfs.

-FH
diff -Nru dazuko-2.3.6-pre2-a/dazuko_linux26.h dazuko-2.3.6-pre2-b/dazuko_linux26.h
--- dazuko-2.3.6-pre2-a/dazuko_linux26.h	2008-02-20 22:05:34.000000000 +0100
+++ dazuko-2.3.6-pre2-b/dazuko_linux26.h	2008-08-27 13:54:51.000000000 +0200
@@ -24,7 +24,13 @@
 #define DAZUKO_LINUX26_H
 
 #include <linux/module.h>
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
 #include <asm/semaphore.h>
+#else
+#include <linux/semaphore.h>
+#endif
 
 #define	DEVICE_NAME		"dazuko"
 
diff -Nru dazuko-2.3.6-pre2-a/dazuko_redirfs.c dazuko-2.3.6-pre2-b/dazuko_redirfs.c
--- dazuko-2.3.6-pre2-a/dazuko_redirfs.c	2008-07-17 20:00:02.000000000 +0200
+++ dazuko-2.3.6-pre2-b/dazuko_redirfs.c	2008-08-27 15:18:23.000000000 +0200
@@ -66,19 +66,19 @@
 static int dev_major = -1;
 static int module_disabled = 0;
 
-enum redirfs_rv dazukoflt_permission(redirfs_context context, struct redirfs_args *args);
+enum redirfs_rv dazukoflt_open(redirfs_context context, struct redirfs_args *args);
 
 static redirfs_filter dazukoflt;
 
 static struct redirfs_filter_info dazukoflt_info = {
 	.owner = THIS_MODULE,
 	.name = "dazukoflt",
-	.priority = 1,
+	.priority = 860000000,
 	.active = 1,
 };
 
 static struct redirfs_op_info dazukoflt_op_info[] = {
-	{ REDIRFS_REG_IOP_PERMISSION, dazukoflt_permission, NULL },
+	{ REDIRFS_REG_FOP_OPEN, dazukoflt_open, NULL },
 	{ REDIRFS_OP_END, NULL, NULL }
 };
 
@@ -629,7 +629,7 @@
 
 /* system hooks */
 
-int dazuko_sys_generic(struct inode *inode, int mask, struct nameidata *nd)
+int dazuko_sys_generic(struct inode *inode, struct nameidata *nd)
 {
 	struct dazuko_file_struct *dfs = NULL;
 	int error = 0;
@@ -645,34 +645,6 @@
 
 	dazuko_bzero(&event_p, sizeof(event_p));
 
-	if ((mask & MAY_EXEC) != 0)
-	{
-		event = DAZUKO_ON_EXEC;
-		daemon_is_allowed = 0;
-	}
-	else
-	{
-		/* mask == 0 is passed in when a file is created */
-		if (mask == 0 || (mask & (MAY_WRITE|MAY_APPEND)) != 0)
-		{
-			if ((mask & MAY_READ) != 0)
-			{
-				event_p.flags = O_RDWR;
-			}
-			else
-			{
-				event_p.flags = O_WRONLY;
-			}
-
-			event_p.set_flags = 1;
-		}
-		else if ((mask & MAY_READ) != 0)
-		{
-			event_p.flags = O_RDONLY;
-			event_p.set_flags = 1;
-		}
-	}
-
 	xp_id.pid = current->pid;
 	xp_id.tgid = current->tgid;
 	xp_id.file = NULL;
@@ -721,18 +693,14 @@
 	return 0;
 }
 
-enum redirfs_rv dazukoflt_permission(redirfs_context context, struct redirfs_args *args)
+enum redirfs_rv dazukoflt_open(redirfs_context context, struct redirfs_args *args)
 {
-	if (!args->args.i_permission.nd)
-		return REDIRFS_CONTINUE;
-
-	if (!args->args.i_permission.mask)
-		return REDIRFS_CONTINUE;
+	struct nameidata nd;
 
-	if (!args->args.i_permission.nd)
-		return REDIRFS_CONTINUE;
+	nd.path.dentry = args->args.f_open.file->f_dentry;
+	nd.path.mnt = args->args.f_open.file->f_vfsmnt;
 
-	if (dazuko_sys_generic(args->args.i_permission.inode, args->args.i_permission.mask, args->args.i_permission.nd) != 0)
+	if (dazuko_sys_generic(args->args.f_open.file->f_dentry->d_inode, &nd) != 0)
 	{
 		args->rv.rv_int = -EACCES;
 		return REDIRFS_STOP;
@@ -804,20 +772,11 @@
 		return dev_major;
 	}
 
-#ifndef WITHOUT_UDEV
-#ifdef USE_CLASS
 	dazuko_class = class_create(THIS_MODULE, DEVICE_NAME);
-#if defined (CLASS_class_device_create_2_6_15)
-	class_device_create(dazuko_class, NULL, MKDEV(dev_major, 0), NULL, DEVICE_NAME);
-#elif defined (CLASS_device_create_2_6_26)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
 	device_create(dazuko_class, NULL, MKDEV(dev_major, 0), DEVICE_NAME);
 #else
-	class_device_create(dazuko_class, MKDEV(dev_major, 0), NULL, DEVICE_NAME);
-#endif
-#else
-	dazuko_class = class_simple_create(THIS_MODULE, DEVICE_NAME);
-	class_simple_device_add(dazuko_class, MKDEV(dev_major, 0), NULL, DEVICE_NAME);
-#endif
+	device_create(dazuko_class, NULL, MKDEV(dev_major, 0), NULL, DEVICE_NAME);
 #endif
 
 	return 0;
@@ -826,21 +785,9 @@
 inline int xp_sys_unhook()
 {
 	if (!module_disabled) {
-		unregister_chrdev(dev_major, DEVICE_NAME);
-
-#ifndef WITHOUT_UDEV
-#ifdef USE_CLASS
-#if defined (CLASS_device_create_2_6_26)
 		device_destroy(dazuko_class, MKDEV(dev_major, 0));
-#else
-		class_device_destroy(dazuko_class, MKDEV(dev_major, 0));
-#endif
 		class_destroy(dazuko_class);
-#else
-		class_simple_device_remove(MKDEV(dev_major, 0));
-		class_simple_destroy(dazuko_class);
-#endif
-#endif
+		unregister_chrdev(dev_major, DEVICE_NAME);
 	}
 
 	redirfs_delete_filter(dazukoflt);
_______________________________________________
Dazuko-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/dazuko-devel

Reply via email to