Commit af3a3ab2 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes

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
...@@ -200,10 +200,11 @@ static int make_mode(const unsigned int lmstate) ...@@ -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, ...@@ -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, ...@@ -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) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment