diff options
Diffstat (limited to 'fs/gfs2/lock_dlm.c')
| -rw-r--r-- | fs/gfs2/lock_dlm.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c index f8411bd1b80..5f5e70e047d 100644 --- a/fs/gfs2/lock_dlm.c +++ b/fs/gfs2/lock_dlm.c @@ -200,10 +200,11 @@ static int make_mode(const unsigned int lmstate)  	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)  {  	u32 lkf = DLM_LKF_VALBLK; +	u32 lkid = gl->gl_lksb.sb_lkid;  	if (gfs_flags & LM_FLAG_TRY)  		lkf |= DLM_LKF_NOQUEUE; @@ -227,8 +228,11 @@ static u32 make_flags(const u32 lkid, const unsigned int gfs_flags,  			BUG();  	} -	if (lkid != 0)  +	if (lkid != 0) {  		lkf |= DLM_LKF_CONVERT; +		if (test_bit(GLF_BLOCKING, &gl->gl_flags)) +			lkf |= DLM_LKF_QUECVT; +	}  	return lkf;  } @@ -250,7 +254,7 @@ static int gdlm_lock(struct gfs2_glock *gl, unsigned int req_state,  	char strname[GDLM_STRNAME_BYTES] = "";  	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_sbstats_inc(gl, GFS2_LKS_DCOUNT);  	if (gl->gl_lksb.sb_lkid) {  |