|
@@ -449,7 +449,8 @@ __acquires(&gl->gl_lockref.lock)
|
|
unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
|
|
unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
|
|
int ret;
|
|
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;
|
|
return;
|
|
lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
|
|
lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
|
|
LM_FLAG_PRIORITY);
|
|
LM_FLAG_PRIORITY);
|
|
@@ -486,7 +487,8 @@ __acquires(&gl->gl_lockref.lock)
|
|
}
|
|
}
|
|
else if (ret) {
|
|
else if (ret) {
|
|
pr_err("lm_lock ret %d\n", 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 */
|
|
} else { /* lock_nolock */
|
|
finish_xmote(gl, target);
|
|
finish_xmote(gl, target);
|