[Cluster-devel] [GFS2 PATCH] GFS2: Allow glocks to be unlocked after withdraw
Bob Peterson <[email protected]>
| Newsgroups | com.redhat.cluster-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, Before this patch, glocks could not be unlocked after a withdraw, but that resulted in hangs during unmount. This patch allows GFS2 function do_xmote to demote locks to an unlocked state, but not promoting any upward. Signed-off-by: Bob Peterson <[email protected]> --- diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 9e81219..959a19c 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -449,7 +449,8 @@ __acquires(&gl->gl_lockref.lock) unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0); int ret; - if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) + if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) && + target != LM_ST_UNLOCKED) return; lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP | LM_FLAG_PRIORITY); @@ -486,7 +487,8 @@ __acquires(&gl->gl_lockref.lock) } else if (ret) { pr_err("lm_lock ret %d\n", ret); - GLOCK_BUG_ON(gl, 1); + GLOCK_BUG_ON(gl, !test_bit(SDF_SHUTDOWN, + &sdp->sd_flags)); } } else { /* lock_nolock */ finish_xmote(gl, target);