GFS2: Read in rindex if necessary during unlink
authorBob Peterson <rpeterso@redhat.com>
Thu, 16 Feb 2012 16:31:04 +0000 (11:31 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Tue, 28 Feb 2012 09:48:02 +0000 (09:48 +0000)
This patch fixes a problem whereby you were unable to delete
files until other file system operations were done (such as
statfs, touch, writes, etc.) that caused the rindex to be
read in.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/inode.c

index a7d611b93f0fca912ce716736df2524cad7b40be..c87faf48f0a162bb21f03fd70fed734a1216d8f6 100644 (file)
@@ -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);