GFS2: Fix spectator umount issue
The tests further down the recovery function relating to unlocking the journal need to be updated to match the intial test. Also, a test in the umount code which was surplus to requirements has been removed. Umounting spectator mounts now works correctly, as expected. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
parent
d594845106
commit
c741c45512
|
@ -1517,7 +1517,7 @@ static void clear_glock(struct gfs2_glock *gl)
|
||||||
spin_unlock(&lru_lock);
|
spin_unlock(&lru_lock);
|
||||||
|
|
||||||
spin_lock(&gl->gl_spin);
|
spin_lock(&gl->gl_spin);
|
||||||
if (find_first_holder(gl) == NULL && gl->gl_state != LM_ST_UNLOCKED)
|
if (gl->gl_state != LM_ST_UNLOCKED)
|
||||||
handle_callback(gl, LM_ST_UNLOCKED, 0);
|
handle_callback(gl, LM_ST_UNLOCKED, 0);
|
||||||
spin_unlock(&gl->gl_spin);
|
spin_unlock(&gl->gl_spin);
|
||||||
gfs2_glock_hold(gl);
|
gfs2_glock_hold(gl);
|
||||||
|
|
|
@ -455,12 +455,13 @@ void gfs2_recover_func(struct work_struct *work)
|
||||||
int ro = 0;
|
int ro = 0;
|
||||||
unsigned int pass;
|
unsigned int pass;
|
||||||
int error;
|
int error;
|
||||||
|
int jlocked = 0;
|
||||||
|
|
||||||
if (sdp->sd_args.ar_spectator ||
|
if (sdp->sd_args.ar_spectator ||
|
||||||
(jd->jd_jid != sdp->sd_lockstruct.ls_jid)) {
|
(jd->jd_jid != sdp->sd_lockstruct.ls_jid)) {
|
||||||
fs_info(sdp, "jid=%u: Trying to acquire journal lock...\n",
|
fs_info(sdp, "jid=%u: Trying to acquire journal lock...\n",
|
||||||
jd->jd_jid);
|
jd->jd_jid);
|
||||||
|
jlocked = 1;
|
||||||
/* Acquire the journal lock so we can do recovery */
|
/* Acquire the journal lock so we can do recovery */
|
||||||
|
|
||||||
error = gfs2_glock_nq_num(sdp, jd->jd_jid, &gfs2_journal_glops,
|
error = gfs2_glock_nq_num(sdp, jd->jd_jid, &gfs2_journal_glops,
|
||||||
|
@ -555,13 +556,12 @@ void gfs2_recover_func(struct work_struct *work)
|
||||||
jd->jd_jid, t);
|
jd->jd_jid, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jd->jd_jid != sdp->sd_lockstruct.ls_jid)
|
|
||||||
gfs2_glock_dq_uninit(&ji_gh);
|
|
||||||
|
|
||||||
gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_SUCCESS);
|
gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_SUCCESS);
|
||||||
|
|
||||||
if (jd->jd_jid != sdp->sd_lockstruct.ls_jid)
|
if (jlocked) {
|
||||||
|
gfs2_glock_dq_uninit(&ji_gh);
|
||||||
gfs2_glock_dq_uninit(&j_gh);
|
gfs2_glock_dq_uninit(&j_gh);
|
||||||
|
}
|
||||||
|
|
||||||
fs_info(sdp, "jid=%u: Done\n", jd->jd_jid);
|
fs_info(sdp, "jid=%u: Done\n", jd->jd_jid);
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -569,7 +569,7 @@ void gfs2_recover_func(struct work_struct *work)
|
||||||
fail_gunlock_tr:
|
fail_gunlock_tr:
|
||||||
gfs2_glock_dq_uninit(&t_gh);
|
gfs2_glock_dq_uninit(&t_gh);
|
||||||
fail_gunlock_ji:
|
fail_gunlock_ji:
|
||||||
if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) {
|
if (jlocked) {
|
||||||
gfs2_glock_dq_uninit(&ji_gh);
|
gfs2_glock_dq_uninit(&ji_gh);
|
||||||
fail_gunlock_j:
|
fail_gunlock_j:
|
||||||
gfs2_glock_dq_uninit(&j_gh);
|
gfs2_glock_dq_uninit(&j_gh);
|
||||||
|
|
Loading…
Reference in New Issue