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: John Ogness
Subject: Re: [Dazuko-devel] DazukoFS 3.0.0-rc2 posted
Date: Tue, 04 Nov 2008 21:09:30 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (berkeley-unix)

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.

> 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.

$ 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]