|
@@ -143,17 +143,14 @@ static struct dentry *gfs2_get_parent(struct dentry *child)
|
|
|
}
|
|
|
|
|
|
static struct dentry *gfs2_get_dentry(struct super_block *sb,
|
|
|
- struct gfs2_inum_host *inum)
|
|
|
+ struct gfs2_inum_host *inum)
|
|
|
{
|
|
|
struct gfs2_sbd *sdp = sb->s_fs_info;
|
|
|
- struct gfs2_holder i_gh, ri_gh, rgd_gh;
|
|
|
- struct gfs2_rgrpd *rgd;
|
|
|
+ struct gfs2_holder i_gh;
|
|
|
struct inode *inode;
|
|
|
struct dentry *dentry;
|
|
|
int error;
|
|
|
|
|
|
- /* System files? */
|
|
|
-
|
|
|
inode = gfs2_ilookup(sb, inum->no_addr);
|
|
|
if (inode) {
|
|
|
if (GFS2_I(inode)->i_no_formal_ino != inum->no_formal_ino) {
|
|
@@ -168,29 +165,11 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb,
|
|
|
if (error)
|
|
|
return ERR_PTR(error);
|
|
|
|
|
|
- error = gfs2_rindex_hold(sdp, &ri_gh);
|
|
|
+ error = gfs2_check_blk_type(sdp, inum->no_addr, GFS2_BLKST_DINODE);
|
|
|
if (error)
|
|
|
goto fail;
|
|
|
|
|
|
- error = -EINVAL;
|
|
|
- rgd = gfs2_blk2rgrpd(sdp, inum->no_addr);
|
|
|
- if (!rgd)
|
|
|
- goto fail_rindex;
|
|
|
-
|
|
|
- error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_SHARED, 0, &rgd_gh);
|
|
|
- if (error)
|
|
|
- goto fail_rindex;
|
|
|
-
|
|
|
- error = -ESTALE;
|
|
|
- if (gfs2_get_block_type(rgd, inum->no_addr) != GFS2_BLKST_DINODE)
|
|
|
- goto fail_rgd;
|
|
|
-
|
|
|
- gfs2_glock_dq_uninit(&rgd_gh);
|
|
|
- gfs2_glock_dq_uninit(&ri_gh);
|
|
|
-
|
|
|
- inode = gfs2_inode_lookup(sb, DT_UNKNOWN,
|
|
|
- inum->no_addr,
|
|
|
- 0, 0);
|
|
|
+ inode = gfs2_inode_lookup(sb, DT_UNKNOWN, inum->no_addr, 0, 0);
|
|
|
if (IS_ERR(inode)) {
|
|
|
error = PTR_ERR(inode);
|
|
|
goto fail;
|
|
@@ -224,13 +203,6 @@ out_inode:
|
|
|
if (!IS_ERR(dentry))
|
|
|
dentry->d_op = &gfs2_dops;
|
|
|
return dentry;
|
|
|
-
|
|
|
-fail_rgd:
|
|
|
- gfs2_glock_dq_uninit(&rgd_gh);
|
|
|
-
|
|
|
-fail_rindex:
|
|
|
- gfs2_glock_dq_uninit(&ri_gh);
|
|
|
-
|
|
|
fail:
|
|
|
gfs2_glock_dq_uninit(&i_gh);
|
|
|
return ERR_PTR(error);
|