dazuko-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Dazuko-devel] DazukoFS 3.0.0-rc2 posted


From: Ann Davis
Subject: Re: [Dazuko-devel] DazukoFS 3.0.0-rc2 posted
Date: Tue, 04 Nov 2008 14:49:32 -0700
User-agent: Thunderbird 2.0.0.17 (X11/20080914)

John Ogness wrote:
On 2008-11-04, Ann Davis <address@hidden> wrote:
John, thanks for the patch; I tried it on openSUSE 11.0.  It
compiles with warnings but the resulting dazukofs module does not
load (segmentation error).  The following patch incorporates your
patch and makes a few other changes to address the compile warnings.
Using this patch does create a dazukofs.ko that will load, but I
haven't done any functional testing.

Thanks. The rest of the missing changes simply correspond to an
earlier CVS version that supported 2.6.26. And from looking at the
earlier version, I noticed that a couple parts of your patch are
incorrect. Below I've included a new version of the patch that should
compile and run on openSUSE 11.0. I would appreciate some feedback on
this.

This latest patch works great. Running showfiles per the README (which I finally read ;-)) shows all the /tmp/dazukofs_test file names nicely.

I assume that we can't really test w/ AntiVir until Avira supports
dazukofs, right?

You can test with the "showfiles" test application included in the
dazukofs package. But as for AntiVir, I do not know what their plans
are with regard to DazukoFS. However, Avira GmbH is maintainer contact
with me and we will be meeting soon to discuss exactly this issue.

Wonderful, please keep us posted. Along these lines, my own eventual goal is to have someone (Avira, you, me?) provide dazukofs rpms via an openSUSE build server repository. Providing dazuko(fs) via the openSUSE build server doesn't mean that Novell would officially support the modules, but it would give SUSE/SLE users an automated way of installing and keeping dazuko(fs) up-to-date. Avira is aware of this idea as well, so perhaps it would be a good subject for discussion w/ them.

Regards,

Ann

$ tar xzvf dazukofs-3.0.0-rc3.tar.gz
$ cd dazukofs-3.0.0-rc3
$ patch -p1 < this_email
$ make

John Ogness

---
 ctrl_dev.c  |    2 -
 group_dev.c |    2 -
 ign_dev.c   |    2 -
 inode.c     |   66 +++++++++++++++++++++++++++++++++++++++++---------
 super.c     |    7 +++--
 5 files changed, 62 insertions(+), 17 deletions(-)
diff -Nurp a/ctrl_dev.c b/ctrl_dev.c
--- a/ctrl_dev.c        2008-10-25 00:58:25.000000000 +0200
+++ b/ctrl_dev.c        2008-11-04 20:59:41.000000000 +0100
@@ -178,7 +178,7 @@ int dazukofs_ctrl_dev_init(int dev_major
/* create control device */
        dev = device_create(dazukofs_class, NULL, MKDEV(dev_major, dev_minor),
-                           NULL, "%s.ctrl", DEVICE_NAME);
+                           "%s.ctrl", DEVICE_NAME);
        if (IS_ERR(dev)) {
                err = PTR_ERR(dev);
                goto error_out2;
diff -Nurp a/group_dev.c b/group_dev.c
--- a/group_dev.c       2008-10-25 00:58:17.000000000 +0200
+++ b/group_dev.c       2008-11-04 20:59:42.000000000 +0100
@@ -210,7 +210,7 @@ int dazukofs_group_dev_init(int dev_majo
        /* create group devices */
        for (i = 0; i < GROUP_COUNT; i++) {
                dev = device_create(dazukofs_class, NULL,
-                                   MKDEV(dev_major, dev_minor_end), NULL,
+                                   MKDEV(dev_major, dev_minor_end),
                                    "%s.%d", DEVICE_NAME, i);
                if (IS_ERR(dev)) {
                        err = PTR_ERR(dev);
diff -Nurp a/ign_dev.c b/ign_dev.c
--- a/ign_dev.c 2008-10-25 00:58:32.000000000 +0200
+++ b/ign_dev.c 2008-11-04 20:59:42.000000000 +0100
@@ -157,7 +157,7 @@ int dazukofs_ign_dev_init(int dev_major,
/* create ignore device */
        dev = device_create(dazukofs_class, NULL, MKDEV(dev_major, dev_minor),
-                           NULL, "%s.ign", DEVICE_NAME);
+                           "%s.ign", DEVICE_NAME);
        if (IS_ERR(dev)) {
                err = PTR_ERR(dev);
                goto error_out3;
diff -Nurp a/inode.c b/inode.c
--- a/inode.c   2008-10-25 00:58:45.000000000 +0200
+++ b/inode.c   2008-11-04 20:58:55.000000000 +0100
@@ -284,6 +284,7 @@ static int dazukofs_mknod(struct inode *
                          dev_t dev)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct dentry *lower_dentry_parent = dget(lower_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
        int err = -ENOENT;
@@ -291,7 +292,8 @@ static int dazukofs_mknod(struct inode *
        mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_mknod(lower_dentry_parent_inode, lower_dentry, mode, dev);
+       err = vfs_mknod(lower_dentry_parent_inode, lower_dentry, lower_mnt,
+                       mode, dev);
        if (err)
                goto out;
@@ -325,6 +327,7 @@ out:
 static int dazukofs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct dentry *lower_dentry_parent = dget(lower_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
        int err = -ENOENT;
@@ -332,7 +335,8 @@ static int dazukofs_mkdir(struct inode *
        mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_mkdir(lower_dentry_parent_inode, lower_dentry, mode);
+       err = vfs_mkdir(lower_dentry_parent_inode, lower_dentry, lower_mnt,
+                       mode);
        if (err)
                goto out;
@@ -429,14 +433,17 @@ static int dazukofs_symlink(struct inode
                            const char *symname)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct dentry *lower_dentry_parent = dget(lower_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
+       umode_t mode = S_IALLUGO;
        int err = -ENOENT;
mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_symlink(lower_dentry_parent_inode, lower_dentry, symname);
+       err = vfs_symlink(lower_dentry_parent_inode, lower_dentry, lower_mnt,
+                         symname, mode);
        if (err)
                goto out;
@@ -581,9 +588,37 @@ static void dazukofs_put_link(struct den
  *
  * Returns some result.
  */
-static int dazukofs_permission(struct inode *inode, int mask)
+static int dazukofs_permission(struct inode *inode, int mask,
+                              struct nameidata *nd)
 {
-       return inode_permission(GET_LOWER_INODE(inode), mask);
+       struct vfsmount *lower_mnt = NULL;
+       struct dentry *lower_dentry = NULL;
+       struct vfsmount *vfsmnt_save = NULL;
+       struct dentry *dentry_save = NULL;
+       int err;
+
+       if (nd) {
+               lower_mnt = GET_LOWER_MNT(nd->path.dentry);
+               lower_dentry = GET_LOWER_DENTRY(nd->path.dentry);
+
+               vfsmnt_save = nd->path.mnt;
+               dentry_save = nd->path.dentry;
+
+               nd->path.mnt = mntget(lower_mnt);
+               nd->path.dentry = dget(lower_dentry);
+       }
+
+       err = permission(GET_LOWER_INODE(inode), mask, nd);
+
+       if (nd) {
+               mntput(lower_mnt);
+               dput(lower_dentry);
+
+               nd->path.mnt = vfsmnt_save;
+               nd->path.dentry = dentry_save;
+       }
+
+        return err;
 }
/**
@@ -601,11 +636,12 @@ static int dazukofs_permission(struct in
 static int dazukofs_setattr(struct dentry *dentry, struct iattr *ia)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct inode *inode = dentry->d_inode;
        struct inode *lower_inode = GET_LOWER_INODE(inode);
        int err;
- err = notify_change(lower_dentry, ia);
+       err = notify_change(lower_dentry, lower_mnt, ia);
fsstack_copy_attr_all(inode, lower_inode, NULL);
        fsstack_copy_inode_size(inode, lower_inode);
@@ -786,6 +822,8 @@ static int dazukofs_link(struct dentry *
 {
        struct dentry *lower_old_dentry = GET_LOWER_DENTRY(old_dentry);
        struct dentry *lower_new_dentry = GET_LOWER_DENTRY(new_dentry);
+       struct vfsmount *lower_old_mnt = GET_LOWER_MNT(old_dentry);
+       struct vfsmount *lower_new_mnt = GET_LOWER_MNT(new_dentry);
        struct dentry *lower_dentry_parent = dget(lower_new_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
        int err = -ENOENT;
@@ -793,8 +831,9 @@ static int dazukofs_link(struct dentry *
        mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_link(lower_old_dentry, lower_dentry_parent_inode,
-                      lower_new_dentry);
+       err = vfs_link(lower_old_dentry, lower_old_mnt,
+                      lower_dentry_parent_inode, lower_new_dentry,
+                      lower_new_mnt);
        if (err)
                goto out;
@@ -826,6 +865,7 @@ out:
 static int dazukofs_unlink(struct inode *dir, struct dentry *dentry)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct dentry *lower_dentry_parent = dget(lower_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
        int err;
@@ -833,7 +873,7 @@ static int dazukofs_unlink(struct inode mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_unlink(lower_dentry_parent_inode, lower_dentry);
+       err = vfs_unlink(lower_dentry_parent_inode, lower_dentry, lower_mnt);
        if (err)
                goto out;
@@ -863,6 +903,7 @@ out:
 static int dazukofs_rmdir(struct inode *dir, struct dentry *dentry)
 {
        struct dentry *lower_dentry = GET_LOWER_DENTRY(dentry);
+       struct vfsmount *lower_mnt = GET_LOWER_MNT(dentry);
        struct dentry *lower_dentry_parent = dget(lower_dentry->d_parent);
        struct inode *lower_dentry_parent_inode = lower_dentry_parent->d_inode;
        int err;
@@ -870,7 +911,7 @@ static int dazukofs_rmdir(struct inode *
        mutex_lock_nested(&(lower_dentry_parent_inode->i_mutex),
                          I_MUTEX_PARENT);
- err = vfs_rmdir(lower_dentry_parent_inode, lower_dentry);
+       err = vfs_rmdir(lower_dentry_parent_inode, lower_dentry, lower_mnt);
        if (err)
                goto out;
@@ -905,6 +946,8 @@ static int dazukofs_rename(struct inode {
        struct dentry *lower_old_dentry = GET_LOWER_DENTRY(old_dentry);
        struct dentry *lower_new_dentry = GET_LOWER_DENTRY(new_dentry);
+       struct vfsmount *lower_old_mnt = GET_LOWER_MNT(old_dentry);
+       struct vfsmount *lower_new_mnt = GET_LOWER_MNT(new_dentry);
        struct dentry *lower_old_dentry_parent =
                dget(lower_old_dentry->d_parent);
        struct dentry *lower_new_dentry_parent =
@@ -927,7 +970,8 @@ static int dazukofs_rename(struct inode lock_rename(lower_old_dentry_parent, lower_new_dentry_parent);
        err = vfs_rename(lower_old_dentry_parent_inode, lower_old_dentry,
-                        lower_new_dentry_parent_inode, lower_new_dentry);
+                        lower_old_mnt, lower_new_dentry_parent_inode,
+                        lower_new_dentry, lower_new_mnt);
        unlock_rename(lower_old_dentry_parent, lower_new_dentry_parent);
if (err)
diff -Nurp a/super.c b/super.c
--- a/super.c   2008-10-25 00:58:38.000000000 +0200
+++ b/super.c   2008-11-04 20:59:44.000000000 +0100
@@ -336,16 +336,17 @@ out:
/**
  * init_once - do something.
- * @data: is something.
+ * @cachep: is something.
+ * @vptr: is something.
  *
  * Description: Does something.
  *
  * We do some stuff and then call the lower function version.
  */
-static void init_once(void *data)
+static void init_once(struct kmem_cache *cachep, void *vptr)
 {
        struct dazukofs_inode_info *inode_info =
-               (struct dazukofs_inode_info *)data;
+               (struct dazukofs_inode_info *)vptr;
memset(inode_info, 0, sizeof(struct dazukofs_inode_info));
        inode_init_once(&(inode_info->vfs_inode));





reply via email to

[Prev in Thread] Current Thread [Next in Thread]