From f2e26a2182284930339676d85336f770aea37f70 Mon Sep 17 00:00:00 2001 From: Steven Whitehouse Date: Wed, 29 Sep 2010 14:20:52 +0100 Subject: [PATCH] --- yaml --- r: 211635 b: refs/heads/master c: c741c4551237f9c1bdcd3b1b39b0883bd19a3723 h: refs/heads/master i: 211633: e2d96b284a93dda2350be0d498d69da58ba0a8a2 211631: a01ca05ff68f636d9d9070c05097451eefab41aa v: v3 --- [refs] | 2 +- trunk/fs/gfs2/glock.c | 2 +- trunk/fs/gfs2/recovery.c | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 789b78791181..e8db57ac08cf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d594845106f34c079a6b05be01a37e4883c3bf4c +refs/heads/master: c741c4551237f9c1bdcd3b1b39b0883bd19a3723 diff --git a/trunk/fs/gfs2/glock.c b/trunk/fs/gfs2/glock.c index c3f2a5cc8efb..87778857f099 100644 --- a/trunk/fs/gfs2/glock.c +++ b/trunk/fs/gfs2/glock.c @@ -1517,7 +1517,7 @@ static void clear_glock(struct gfs2_glock *gl) spin_unlock(&lru_lock); 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); spin_unlock(&gl->gl_spin); gfs2_glock_hold(gl); diff --git a/trunk/fs/gfs2/recovery.c b/trunk/fs/gfs2/recovery.c index 666548e14596..f2a02edcac8f 100644 --- a/trunk/fs/gfs2/recovery.c +++ b/trunk/fs/gfs2/recovery.c @@ -455,12 +455,13 @@ void gfs2_recover_func(struct work_struct *work) int ro = 0; unsigned int pass; int error; + int jlocked = 0; if (sdp->sd_args.ar_spectator || (jd->jd_jid != sdp->sd_lockstruct.ls_jid)) { fs_info(sdp, "jid=%u: Trying to acquire journal lock...\n", jd->jd_jid); - + jlocked = 1; /* Acquire the journal lock so we can do recovery */ 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); } - 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); - if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) + if (jlocked) { + gfs2_glock_dq_uninit(&ji_gh); gfs2_glock_dq_uninit(&j_gh); + } fs_info(sdp, "jid=%u: Done\n", jd->jd_jid); goto done; @@ -569,7 +569,7 @@ void gfs2_recover_func(struct work_struct *work) fail_gunlock_tr: gfs2_glock_dq_uninit(&t_gh); fail_gunlock_ji: - if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) { + if (jlocked) { gfs2_glock_dq_uninit(&ji_gh); fail_gunlock_j: gfs2_glock_dq_uninit(&j_gh);