aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2010-09-29 09:20:52 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2010-09-29 09:20:52 -0400
commitc741c4551237f9c1bdcd3b1b39b0883bd19a3723 (patch)
treef3d39633f5e63ad40dd5a7375090b239bde3368c /fs/gfs2
parentd594845106f34c079a6b05be01a37e4883c3bf4c (diff)
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>
Diffstat (limited to 'fs/gfs2')
-rw-r--r--fs/gfs2/glock.c2
-rw-r--r--fs/gfs2/recovery.c12
2 files changed, 7 insertions, 7 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index c3f2a5cc8efb..87778857f099 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1517,7 +1517,7 @@ static void clear_glock(struct gfs2_glock *gl)
1517 spin_unlock(&lru_lock); 1517 spin_unlock(&lru_lock);
1518 1518
1519 spin_lock(&gl->gl_spin); 1519 spin_lock(&gl->gl_spin);
1520 if (find_first_holder(gl) == NULL && gl->gl_state != LM_ST_UNLOCKED) 1520 if (gl->gl_state != LM_ST_UNLOCKED)
1521 handle_callback(gl, LM_ST_UNLOCKED, 0); 1521 handle_callback(gl, LM_ST_UNLOCKED, 0);
1522 spin_unlock(&gl->gl_spin); 1522 spin_unlock(&gl->gl_spin);
1523 gfs2_glock_hold(gl); 1523 gfs2_glock_hold(gl);
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
index 666548e14596..f2a02edcac8f 100644
--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -455,12 +455,13 @@ void gfs2_recover_func(struct work_struct *work)
455 int ro = 0; 455 int ro = 0;
456 unsigned int pass; 456 unsigned int pass;
457 int error; 457 int error;
458 int jlocked = 0;
458 459
459 if (sdp->sd_args.ar_spectator || 460 if (sdp->sd_args.ar_spectator ||
460 (jd->jd_jid != sdp->sd_lockstruct.ls_jid)) { 461 (jd->jd_jid != sdp->sd_lockstruct.ls_jid)) {
461 fs_info(sdp, "jid=%u: Trying to acquire journal lock...\n", 462 fs_info(sdp, "jid=%u: Trying to acquire journal lock...\n",
462 jd->jd_jid); 463 jd->jd_jid);
463 464 jlocked = 1;
464 /* Acquire the journal lock so we can do recovery */ 465 /* Acquire the journal lock so we can do recovery */
465 466
466 error = gfs2_glock_nq_num(sdp, jd->jd_jid, &gfs2_journal_glops, 467 error = gfs2_glock_nq_num(sdp, jd->jd_jid, &gfs2_journal_glops,
@@ -555,13 +556,12 @@ void gfs2_recover_func(struct work_struct *work)
555 jd->jd_jid, t); 556 jd->jd_jid, t);
556 } 557 }
557 558
558 if (jd->jd_jid != sdp->sd_lockstruct.ls_jid)
559 gfs2_glock_dq_uninit(&ji_gh);
560
561 gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_SUCCESS); 559 gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_SUCCESS);
562 560
563 if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) 561 if (jlocked) {
562 gfs2_glock_dq_uninit(&ji_gh);
564 gfs2_glock_dq_uninit(&j_gh); 563 gfs2_glock_dq_uninit(&j_gh);
564 }
565 565
566 fs_info(sdp, "jid=%u: Done\n", jd->jd_jid); 566 fs_info(sdp, "jid=%u: Done\n", jd->jd_jid);
567 goto done; 567 goto done;
@@ -569,7 +569,7 @@ void gfs2_recover_func(struct work_struct *work)
569fail_gunlock_tr: 569fail_gunlock_tr:
570 gfs2_glock_dq_uninit(&t_gh); 570 gfs2_glock_dq_uninit(&t_gh);
571fail_gunlock_ji: 571fail_gunlock_ji:
572 if (jd->jd_jid != sdp->sd_lockstruct.ls_jid) { 572 if (jlocked) {
573 gfs2_glock_dq_uninit(&ji_gh); 573 gfs2_glock_dq_uninit(&ji_gh);
574fail_gunlock_j: 574fail_gunlock_j:
575 gfs2_glock_dq_uninit(&j_gh); 575 gfs2_glock_dq_uninit(&j_gh);