Mauricio Faria de Oliveira:
> There's a misunderstanding here, apparently. Sorry if this wasn't
> clear, but the request wasn't for testing w/ fuse; it was for testing
> more code paths to check for no regressions. The code path that
> depended on fuse is only the path used to reproduce the problem.

I see.
That is my usual work.


> I just would like to understand, for my own education, if there's any
> technical problem or other reason for not taking this v2 patchset,

No technical matter at all.
It is something like my taste or coding style.  For exmple,

Yours:
diff --git a/fs/aufs/cpup.c b/fs/aufs/cpup.c
index dbaa01a55904..2a9a76335e75 100644
--- a/fs/aufs/cpup.c
+++ b/fs/aufs/cpup.c
@@ -759,11 +759,14 @@ static int au_do_ren_after_cpup(struct au_cp_generic 
*cpg, struct path *h_path)
                        h_path->dentry = dget(au_h_dptr(dentry, bdst));
                au_set_h_dptr(dentry, bdst, h_dentry);
        } else {
+               struct path h_ppath;
                err = 0;
                parent = dget_parent(dentry);
                h_parent = au_h_dptr(parent, bdst);
                dput(parent);
-               h_path->dentry = vfsub_lkup_one(&dentry->d_name, h_parent);
+               h_ppath.dentry = h_parent;
+               h_ppath.mnt = au_br_mnt(au_sbr(parent->d_sb, bdst));
+               h_path->dentry = vfsub_lkup_one(&dentry->d_name, &h_ppath);
                if (IS_ERR(h_path->dentry))
                        err = PTR_ERR(h_path->dentry);
        }

Mine:
diff --git a/fs/aufs/cpup.c b/fs/aufs/cpup.c
index 8c4305c0d7cf2..7f1c4793bb194 100644
--- a/fs/aufs/cpup.c
+++ b/fs/aufs/cpup.c
@@ -732,11 +732,13 @@ static int au_do_ren_after_cpup(struct au_cp_generic 
*cpg, struct path *h_path)
 {
        int err;
        struct dentry *dentry, *h_dentry, *h_parent, *parent;
+       struct path h_ppath;
        struct inode *h_dir;
        aufs_bindex_t bdst;
 
        dentry = cpg->dentry;
        bdst = cpg->bdst;
+       h_ppath.mnt = au_sbr_mnt(dentry->d_sb, bdst);
        h_dentry = au_h_dptr(dentry, bdst);
        if (!au_ftest_cpup(cpg->flags, OVERWRITE)) {
                dget(h_dentry);
@@ -748,9 +750,9 @@ static int au_do_ren_after_cpup(struct au_cp_generic *cpg, 
struct path *h_path)
        } else {
                err = 0;
                parent = dget_parent(dentry);
-               h_parent = au_h_dptr(parent, bdst);
+               h_ppath.dentry = au_h_dptr(parent, bdst);
                dput(parent);
-               h_path->dentry = vfsub_lkup_one(&dentry->d_name, h_parent);
+               h_path->dentry = vfsub_lkup_one(&dentry->d_name, &h_ppath);
                if (IS_ERR(h_path->dentry))
                        err = PTR_ERR(h_path->dentry);
        }

The local variable 'h_parent' is replaced by 'h_ppath.dentry' and
'au_br_mnt(au_sbr())' is done by 'au_sbr_mnt()'.
Also I am hesitating combing vfsub_lookup_one_one() and ..._unlocked()
into one function, since I prefer to keep fs/aufs/vfsub.c as a
sub-version of mailine VFS.
Obviously they are not a big deal.  I just want to keep the code clearer
for myself.

I guess you might want to keep the changes minimal with keeping the
original code.  Honestly speaking, when I touch the code written by
someone else, I often feel similarly.  But personally I don't hesitate
chaging more as long as the code gets better as some
wise-man/philosopher/sorcerer says "Don't fix the code, but fix the bug."


J. R. Okajima

Reply via email to