switch gfs2, close races
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 18 Dec 2010 17:06:56 +0000 (12:06 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 13 Jan 2011 01:02:46 +0000 (20:02 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/gfs2/export.c
fs/gfs2/ops_fstype.c
fs/gfs2/ops_inode.c

index 97012ecff560132c5e3ec052923809a1d106237a..9023db8184f91ba758bae3c2a981e0a8180d2dfb 100644 (file)
@@ -126,12 +126,7 @@ static int gfs2_get_name(struct dentry *parent, char *name,
 
 static struct dentry *gfs2_get_parent(struct dentry *child)
 {
-       struct dentry *dentry;
-
-       dentry = d_obtain_alias(gfs2_lookupi(child->d_inode, &gfs2_qdotdot, 1));
-       if (!IS_ERR(dentry))
-               d_set_d_op(dentry, &gfs2_dops);
-       return dentry;
+       return d_obtain_alias(gfs2_lookupi(child->d_inode, &gfs2_qdotdot, 1));
 }
 
 static struct dentry *gfs2_get_dentry(struct super_block *sb,
@@ -139,7 +134,6 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb,
 {
        struct gfs2_sbd *sdp = sb->s_fs_info;
        struct inode *inode;
-       struct dentry *dentry;
 
        inode = gfs2_ilookup(sb, inum->no_addr);
        if (inode) {
@@ -156,10 +150,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb,
                return ERR_CAST(inode);
 
 out_inode:
-       dentry = d_obtain_alias(inode);
-       if (!IS_ERR(dentry))
-               d_set_d_op(dentry, &gfs2_dops);
-       return dentry;
+       return d_obtain_alias(inode);
 }
 
 static struct dentry *gfs2_fh_to_dentry(struct super_block *sb, struct fid *fid,
index 2aeabd4218ccef570bacbd1e47b7afbb19610dd9..693f4470a2df6001dfa1bba6195bf1e01ad08e40 100644 (file)
@@ -440,7 +440,6 @@ static int gfs2_lookup_root(struct super_block *sb, struct dentry **dptr,
                iput(inode);
                return -ENOMEM;
        }
-       d_set_d_op(dentry, &gfs2_dops);
        *dptr = dentry;
        return 0;
 }
@@ -1106,6 +1105,7 @@ static int fill_super(struct super_block *sb, struct gfs2_args *args, int silent
 
        sb->s_magic = GFS2_MAGIC;
        sb->s_op = &gfs2_super_ops;
+       sb->s_d_op = &gfs2_dops;
        sb->s_export_op = &gfs2_export_ops;
        sb->s_xattr = gfs2_xattr_handlers;
        sb->s_qcop = &gfs2_quotactl_ops;
index 1501db4f0e6df052582a3379e95651ac74f8c2b5..ae140c8abb5c872ae1bacaddef73ccc2df15bcac 100644 (file)
@@ -106,8 +106,6 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
 {
        struct inode *inode = NULL;
 
-       d_set_d_op(dentry, &gfs2_dops);
-
        inode = gfs2_lookupi(dir, &dentry->d_name, 0);
        if (inode && IS_ERR(inode))
                return ERR_CAST(inode);