Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c776349 authored by Steven Whitehouse's avatar Steven Whitehouse
Browse files

GFS2: Locking order fix in gfs2_check_blk_state



In some cases we already have the rindex lock when
we enter this function.

Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 1579343a
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1710,11 +1710,16 @@ int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type)
{
	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;

	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);
@@ -1730,6 +1735,7 @@ int gfs2_check_blk_type(struct gfs2_sbd *sdp, u64 no_addr, unsigned int type)

	gfs2_glock_dq_uninit(&rgd_gh);
fail_rindex:
	if (ri_locked)
		gfs2_glock_dq_uninit(&ri_gh);
fail:
	return error;