diff options
Diffstat (limited to 'fs/gfs2/export.c')
-rw-r--r-- | fs/gfs2/export.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/fs/gfs2/export.c b/fs/gfs2/export.c index 9200ef221716..d15876e9aa26 100644 --- a/fs/gfs2/export.c +++ b/fs/gfs2/export.c | |||
@@ -143,17 +143,14 @@ static struct dentry *gfs2_get_parent(struct dentry *child) | |||
143 | } | 143 | } |
144 | 144 | ||
145 | static struct dentry *gfs2_get_dentry(struct super_block *sb, | 145 | static struct dentry *gfs2_get_dentry(struct super_block *sb, |
146 | struct gfs2_inum_host *inum) | 146 | struct gfs2_inum_host *inum) |
147 | { | 147 | { |
148 | struct gfs2_sbd *sdp = sb->s_fs_info; | 148 | struct gfs2_sbd *sdp = sb->s_fs_info; |
149 | struct gfs2_holder i_gh, ri_gh, rgd_gh; | 149 | struct gfs2_holder i_gh; |
150 | struct gfs2_rgrpd *rgd; | ||
151 | struct inode *inode; | 150 | struct inode *inode; |
152 | struct dentry *dentry; | 151 | struct dentry *dentry; |
153 | int error; | 152 | int error; |
154 | 153 | ||
155 | /* System files? */ | ||
156 | |||
157 | inode = gfs2_ilookup(sb, inum->no_addr); | 154 | inode = gfs2_ilookup(sb, inum->no_addr); |
158 | if (inode) { | 155 | if (inode) { |
159 | if (GFS2_I(inode)->i_no_formal_ino != inum->no_formal_ino) { | 156 | 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, | |||
168 | if (error) | 165 | if (error) |
169 | return ERR_PTR(error); | 166 | return ERR_PTR(error); |
170 | 167 | ||
171 | error = gfs2_rindex_hold(sdp, &ri_gh); | 168 | error = gfs2_check_blk_type(sdp, inum->no_addr, GFS2_BLKST_DINODE); |
172 | if (error) | 169 | if (error) |
173 | goto fail; | 170 | goto fail; |
174 | 171 | ||
175 | error = -EINVAL; | 172 | inode = gfs2_inode_lookup(sb, DT_UNKNOWN, inum->no_addr, 0, 0); |
176 | rgd = gfs2_blk2rgrpd(sdp, inum->no_addr); | ||
177 | if (!rgd) | ||
178 | goto fail_rindex; | ||
179 | |||
180 | error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_SHARED, 0, &rgd_gh); | ||
181 | if (error) | ||
182 | goto fail_rindex; | ||
183 | |||
184 | error = -ESTALE; | ||
185 | if (gfs2_get_block_type(rgd, inum->no_addr) != GFS2_BLKST_DINODE) | ||
186 | goto fail_rgd; | ||
187 | |||
188 | gfs2_glock_dq_uninit(&rgd_gh); | ||
189 | gfs2_glock_dq_uninit(&ri_gh); | ||
190 | |||
191 | inode = gfs2_inode_lookup(sb, DT_UNKNOWN, | ||
192 | inum->no_addr, | ||
193 | 0, 0); | ||
194 | if (IS_ERR(inode)) { | 173 | if (IS_ERR(inode)) { |
195 | error = PTR_ERR(inode); | 174 | error = PTR_ERR(inode); |
196 | goto fail; | 175 | goto fail; |
@@ -224,13 +203,6 @@ out_inode: | |||
224 | if (!IS_ERR(dentry)) | 203 | if (!IS_ERR(dentry)) |
225 | dentry->d_op = &gfs2_dops; | 204 | dentry->d_op = &gfs2_dops; |
226 | return dentry; | 205 | return dentry; |
227 | |||
228 | fail_rgd: | ||
229 | gfs2_glock_dq_uninit(&rgd_gh); | ||
230 | |||
231 | fail_rindex: | ||
232 | gfs2_glock_dq_uninit(&ri_gh); | ||
233 | |||
234 | fail: | 206 | fail: |
235 | gfs2_glock_dq_uninit(&i_gh); | 207 | gfs2_glock_dq_uninit(&i_gh); |
236 | return ERR_PTR(error); | 208 | return ERR_PTR(error); |