|
@@ -1035,14 +1035,19 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
|
|
|
struct buffer_head *bh;
|
|
|
struct gfs2_holder ghs[3];
|
|
|
struct gfs2_rgrpd *rgd;
|
|
|
- int error = -EROFS;
|
|
|
+ int error;
|
|
|
|
|
|
+ error = gfs2_rindex_update(sdp);
|
|
|
+ if (error)
|
|
|
+ return error;
|
|
|
gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
|
|
|
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
|
|
|
|
|
|
rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr);
|
|
|
- if (!rgd)
|
|
|
+ if (!rgd) {
|
|
|
+ error = -EROFS;
|
|
|
goto out_inodes;
|
|
|
+ }
|
|
|
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
|
|
|
|
|
|
|