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

Commit af3a3ab2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull gfs2 fixes from Steven Whitehouse.

* git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes:
  GFS2: Instruct DLM to avoid queue convert slowdown
parents 423b40e1 4c569a72
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -200,10 +200,11 @@ static int make_mode(const unsigned int lmstate)
	return -1;
	return -1;
}
}


static u32 make_flags(const u32 lkid, const unsigned int gfs_flags,
static u32 make_flags(struct gfs2_glock *gl, const unsigned int gfs_flags,
		      const int req)
		      const int req)
{
{
	u32 lkf = DLM_LKF_VALBLK;
	u32 lkf = DLM_LKF_VALBLK;
	u32 lkid = gl->gl_lksb.sb_lkid;


	if (gfs_flags & LM_FLAG_TRY)
	if (gfs_flags & LM_FLAG_TRY)
		lkf |= DLM_LKF_NOQUEUE;
		lkf |= DLM_LKF_NOQUEUE;
@@ -227,8 +228,11 @@ static u32 make_flags(const u32 lkid, const unsigned int gfs_flags,
			BUG();
			BUG();
	}
	}


	if (lkid != 0) 
	if (lkid != 0) {
		lkf |= DLM_LKF_CONVERT;
		lkf |= DLM_LKF_CONVERT;
		if (test_bit(GLF_BLOCKING, &gl->gl_flags))
			lkf |= DLM_LKF_QUECVT;
	}


	return lkf;
	return lkf;
}
}
@@ -250,7 +254,7 @@ static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state,
	char strname[GDLM_STRNAME_BYTES] = "";
	char strname[GDLM_STRNAME_BYTES] = "";


	req = make_mode(req_state);
	req = make_mode(req_state);
	lkf = make_flags(gl->gl_lksb.sb_lkid, flags, req);
	lkf = make_flags(gl, flags, req);
	gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT);
	gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT);
	gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
	gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
	if (gl->gl_lksb.sb_lkid) {
	if (gl->gl_lksb.sb_lkid) {