switch gfs2, close races
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -126,12 +126,7 @@ static int gfs2_get_name(struct dentry *parent, char *name,
|
|||||||
|
|
||||||
static struct dentry *gfs2_get_parent(struct dentry *child)
|
static struct dentry *gfs2_get_parent(struct dentry *child)
|
||||||
{
|
{
|
||||||
struct dentry *dentry;
|
return d_obtain_alias(gfs2_lookupi(child->d_inode, &gfs2_qdotdot, 1));
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dentry *gfs2_get_dentry(struct super_block *sb,
|
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 gfs2_sbd *sdp = sb->s_fs_info;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
struct dentry *dentry;
|
|
||||||
|
|
||||||
inode = gfs2_ilookup(sb, inum->no_addr);
|
inode = gfs2_ilookup(sb, inum->no_addr);
|
||||||
if (inode) {
|
if (inode) {
|
||||||
@@ -156,10 +150,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb,
|
|||||||
return ERR_CAST(inode);
|
return ERR_CAST(inode);
|
||||||
|
|
||||||
out_inode:
|
out_inode:
|
||||||
dentry = d_obtain_alias(inode);
|
return d_obtain_alias(inode);
|
||||||
if (!IS_ERR(dentry))
|
|
||||||
d_set_d_op(dentry, &gfs2_dops);
|
|
||||||
return dentry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct dentry *gfs2_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
static struct dentry *gfs2_fh_to_dentry(struct super_block *sb, struct fid *fid,
|
||||||
|
@@ -440,7 +440,6 @@ static int gfs2_lookup_root(struct super_block *sb, struct dentry **dptr,
|
|||||||
iput(inode);
|
iput(inode);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
d_set_d_op(dentry, &gfs2_dops);
|
|
||||||
*dptr = dentry;
|
*dptr = dentry;
|
||||||
return 0;
|
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_magic = GFS2_MAGIC;
|
||||||
sb->s_op = &gfs2_super_ops;
|
sb->s_op = &gfs2_super_ops;
|
||||||
|
sb->s_d_op = &gfs2_dops;
|
||||||
sb->s_export_op = &gfs2_export_ops;
|
sb->s_export_op = &gfs2_export_ops;
|
||||||
sb->s_xattr = gfs2_xattr_handlers;
|
sb->s_xattr = gfs2_xattr_handlers;
|
||||||
sb->s_qcop = &gfs2_quotactl_ops;
|
sb->s_qcop = &gfs2_quotactl_ops;
|
||||||
|
@@ -106,8 +106,6 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
|
|||||||
{
|
{
|
||||||
struct inode *inode = NULL;
|
struct inode *inode = NULL;
|
||||||
|
|
||||||
d_set_d_op(dentry, &gfs2_dops);
|
|
||||||
|
|
||||||
inode = gfs2_lookupi(dir, &dentry->d_name, 0);
|
inode = gfs2_lookupi(dir, &dentry->d_name, 0);
|
||||||
if (inode && IS_ERR(inode))
|
if (inode && IS_ERR(inode))
|
||||||
return ERR_CAST(inode);
|
return ERR_CAST(inode);
|
||||||
|
Reference in New Issue
Block a user