In some cases we already have the rindex lock when
we enter this function.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
 {
        struct gfs2_rgrpd *rgd;
        struct gfs2_holder ri_gh, rgd_gh;
+       struct gfs2_inode *ip = GFS2_I(sdp->sd_rindex);
+       int ri_locked = 0;
        int error;
 
-       error = gfs2_rindex_hold(sdp, &ri_gh);
-       if (error)
-               goto fail;
+       if (!gfs2_glock_is_locked_by_me(ip->i_gl)) {
+               error = gfs2_rindex_hold(sdp, &ri_gh);
+               if (error)
+                       goto fail;
+               ri_locked = 1;
+       }
 
        error = -EINVAL;
        rgd = gfs2_blk2rgrpd(sdp, no_addr);
 
        gfs2_glock_dq_uninit(&rgd_gh);
 fail_rindex:
-       gfs2_glock_dq_uninit(&ri_gh);
+       if (ri_locked)
+               gfs2_glock_dq_uninit(&ri_gh);
 fail:
        return error;
 }