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