diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2010-09-29 09:20:52 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2010-09-29 09:20:52 -0400 |
commit | c741c4551237f9c1bdcd3b1b39b0883bd19a3723 (patch) | |
tree | f3d39633f5e63ad40dd5a7375090b239bde3368c /fs/gfs2 | |
parent | d594845106f34c079a6b05be01a37e4883c3bf4c (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.c | 2 | ||||
-rw-r--r-- | fs/gfs2/recovery.c | 12 |
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) | |||
569 | fail_gunlock_tr: | 569 | fail_gunlock_tr: |
570 | gfs2_glock_dq_uninit(&t_gh); | 570 | gfs2_glock_dq_uninit(&t_gh); |
571 | fail_gunlock_ji: | 571 | fail_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); |
574 | fail_gunlock_j: | 574 | fail_gunlock_j: |
575 | gfs2_glock_dq_uninit(&j_gh); | 575 | gfs2_glock_dq_uninit(&j_gh); |