Unionfs: regression fixes for 2.6.9
authorErez Zadok <ezk@cs.sunysb.edu>
Wed, 30 Jul 2008 01:29:08 +0000 (21:29 -0400)
committerErez Zadok <ezk@cs.sunysb.edu>
Wed, 30 Jul 2008 01:29:08 +0000 (21:29 -0400)
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
fs/unionfs/inode.c
fs/unionfs/main.c

index ee59abf3a44b994c92be067dd8f0826e8e928fd6..df7d99809e48b986d40dad5fef461576d29511b2 100644 (file)
@@ -220,6 +220,8 @@ static struct dentry *unionfs_lookup(struct inode *parent,
        unionfs_unlock_dentry(dentry);
 
 out:
+       if (!IS_ERR(ret) && d_unhashed(dentry)) /* needed in 2.6.9 */
+               d_rehash(dentry);
        if (dentry != dentry->d_parent) {
                unionfs_check_dentry(dentry->d_parent);
                unionfs_unlock_dentry(dentry->d_parent);
index 1cfdd832eb0ed4bbf271d69557b6bf94a4a7abc7..ac774ad3845e6a61fa0ddb6613cae95cdc9eea95 100644 (file)
@@ -129,9 +129,12 @@ skip:
        /* only (our) lookup wants to do a d_add */
        switch (flag) {
        case INTERPOSE_DEFAULT:
+#ifdef OFF_BROKEN_ON_2_6_9
+               /* causes EBUSY on 2.6.9 */
                /* for operations which create new inodes */
                d_add(dentry, inode);
                break;
+#endif
        case INTERPOSE_REVAL_NEG:
                d_instantiate(dentry, inode);
                break;