Re: 2.6.27 kernels
Frantisek Hrbata <[email protected]> Wed, 27 Aug 2008 15:40:42 +0200
| Newsgroups | gmane.linux.dazuko.devel |
|---|---|
| Organization | AVG Technologies |
| Message-ID | <[email protected]> |
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 _______________________________________________ Dazuko-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/dazuko-devel
dazuko_redirfs_2.6.27.patch
(text/x-diff, 4.3 KB)
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);