switch affs
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 12 Jan 2011 21:45:19 +0000 (16:45 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 13 Jan 2011 01:03:42 +0000 (20:03 -0500)
either d_op instance would work for root, actually...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/affs/affs.h
fs/affs/namei.c
fs/affs/super.c

index a8cbdeb34025c81d36b26f8edd14b11e68b0faad..0e95f73a7023290406fad137ee92902f664a5acf 100644 (file)
@@ -201,6 +201,7 @@ extern const struct address_space_operations         affs_aops;
 extern const struct address_space_operations    affs_aops_ofs;
 
 extern const struct dentry_operations   affs_dentry_operations;
+extern const struct dentry_operations   affs_intl_dentry_operations;
 
 static inline void
 affs_set_blocksize(struct super_block *sb, int size)
index 944a4042fb65a78719bb7f1e8a2b307b15082eaa..e3e9efc1fdd8276b19eaccb02747afeb27172671 100644 (file)
@@ -32,7 +32,7 @@ const struct dentry_operations affs_dentry_operations = {
        .d_compare      = affs_compare_dentry,
 };
 
-static const struct dentry_operations affs_intl_dentry_operations = {
+const struct dentry_operations affs_intl_dentry_operations = {
        .d_hash         = affs_intl_hash_dentry,
        .d_compare      = affs_intl_compare_dentry,
 };
@@ -240,7 +240,6 @@ affs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
                if (IS_ERR(inode))
                        return ERR_CAST(inode);
        }
-       d_set_d_op(dentry, AFFS_SB(sb)->s_flags & SF_INTL ? &affs_intl_dentry_operations : &affs_dentry_operations);
        d_add(dentry, inode);
        return NULL;
 }
index d39081bbe7ce954c26720ecb5a8a3e59bd4cc0c7..b31507d0f9b961bf0c417a893680f4553a2e4ca3 100644 (file)
@@ -477,12 +477,16 @@ got_root:
                goto out_error_noinode;
        }
 
+       if (AFFS_SB(sb)->s_flags & SF_INTL)
+               sb->s_d_op = &affs_intl_dentry_operations;
+       else
+               sb->s_d_op = &affs_dentry_operations;
+
        sb->s_root = d_alloc_root(root_inode);
        if (!sb->s_root) {
                printk(KERN_ERR "AFFS: Get root inode failed\n");
                goto out_error;
        }
-       d_set_d_op(sb->s_root, &affs_dentry_operations);
 
        pr_debug("AFFS: s_flags=%lX\n",sb->s_flags);
        return 0;