diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/gfs2/lock_dlm.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c index b906ed17a839..9802de0f85e6 100644 --- a/fs/gfs2/lock_dlm.c +++ b/fs/gfs2/lock_dlm.c | |||
| @@ -281,6 +281,7 @@ static void gdlm_put_lock(struct gfs2_glock *gl) | |||
| 281 | { | 281 | { |
| 282 | struct gfs2_sbd *sdp = gl->gl_sbd; | 282 | struct gfs2_sbd *sdp = gl->gl_sbd; |
| 283 | struct lm_lockstruct *ls = &sdp->sd_lockstruct; | 283 | struct lm_lockstruct *ls = &sdp->sd_lockstruct; |
| 284 | int lvb_needs_unlock = 0; | ||
| 284 | int error; | 285 | int error; |
| 285 | 286 | ||
| 286 | if (gl->gl_lksb.sb_lkid == 0) { | 287 | if (gl->gl_lksb.sb_lkid == 0) { |
| @@ -294,8 +295,12 @@ static void gdlm_put_lock(struct gfs2_glock *gl) | |||
| 294 | gfs2_update_request_times(gl); | 295 | gfs2_update_request_times(gl); |
| 295 | 296 | ||
| 296 | /* don't want to skip dlm_unlock writing the lvb when lock is ex */ | 297 | /* don't want to skip dlm_unlock writing the lvb when lock is ex */ |
| 298 | |||
| 299 | if (gl->gl_lksb.sb_lvbptr && (gl->gl_state == LM_ST_EXCLUSIVE)) | ||
| 300 | lvb_needs_unlock = 1; | ||
| 301 | |||
| 297 | if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) && | 302 | if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) && |
| 298 | gl->gl_lksb.sb_lvbptr && (gl->gl_state != LM_ST_EXCLUSIVE)) { | 303 | !lvb_needs_unlock) { |
| 299 | gfs2_glock_free(gl); | 304 | gfs2_glock_free(gl); |
| 300 | return; | 305 | return; |
| 301 | } | 306 | } |
