diff options
| -rw-r--r-- | fs/gfs2/incore.h | 2 | ||||
| -rw-r--r-- | fs/gfs2/ops_fstype.c | 3 | ||||
| -rw-r--r-- | fs/gfs2/sys.c | 3 |
3 files changed, 8 insertions, 0 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 2434a96f95df..67d310c9ada3 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
| @@ -728,6 +728,8 @@ struct gfs2_sbd { | |||
| 728 | struct gfs2_holder sd_sc_gh; | 728 | struct gfs2_holder sd_sc_gh; |
| 729 | struct gfs2_holder sd_qc_gh; | 729 | struct gfs2_holder sd_qc_gh; |
| 730 | 730 | ||
| 731 | struct completion sd_journal_ready; | ||
| 732 | |||
| 731 | /* Daemon stuff */ | 733 | /* Daemon stuff */ |
| 732 | 734 | ||
| 733 | struct task_struct *sd_logd_process; | 735 | struct task_struct *sd_logd_process; |
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index be45c79f6745..bc564c0d6d16 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
| @@ -94,6 +94,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) | |||
| 94 | INIT_LIST_HEAD(&sdp->sd_jindex_list); | 94 | INIT_LIST_HEAD(&sdp->sd_jindex_list); |
| 95 | spin_lock_init(&sdp->sd_jindex_spin); | 95 | spin_lock_init(&sdp->sd_jindex_spin); |
| 96 | mutex_init(&sdp->sd_jindex_mutex); | 96 | mutex_init(&sdp->sd_jindex_mutex); |
| 97 | init_completion(&sdp->sd_journal_ready); | ||
| 97 | 98 | ||
| 98 | INIT_LIST_HEAD(&sdp->sd_quota_list); | 99 | INIT_LIST_HEAD(&sdp->sd_quota_list); |
| 99 | mutex_init(&sdp->sd_quota_mutex); | 100 | mutex_init(&sdp->sd_quota_mutex); |
| @@ -796,6 +797,7 @@ static int init_inodes(struct gfs2_sbd *sdp, int undo) | |||
| 796 | goto fail_qinode; | 797 | goto fail_qinode; |
| 797 | 798 | ||
| 798 | error = init_journal(sdp, undo); | 799 | error = init_journal(sdp, undo); |
| 800 | complete_all(&sdp->sd_journal_ready); | ||
| 799 | if (error) | 801 | if (error) |
| 800 | goto fail; | 802 | goto fail; |
| 801 | 803 | ||
| @@ -1212,6 +1214,7 @@ fail_sb: | |||
| 1212 | fail_locking: | 1214 | fail_locking: |
| 1213 | init_locking(sdp, &mount_gh, UNDO); | 1215 | init_locking(sdp, &mount_gh, UNDO); |
| 1214 | fail_lm: | 1216 | fail_lm: |
| 1217 | complete_all(&sdp->sd_journal_ready); | ||
| 1215 | gfs2_gl_hash_clear(sdp); | 1218 | gfs2_gl_hash_clear(sdp); |
| 1216 | gfs2_lm_unmount(sdp); | 1219 | gfs2_lm_unmount(sdp); |
| 1217 | fail_debug: | 1220 | fail_debug: |
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c index 7bc17edcb51f..0e049f9574b5 100644 --- a/fs/gfs2/sys.c +++ b/fs/gfs2/sys.c | |||
| @@ -407,6 +407,9 @@ int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid) | |||
| 407 | struct gfs2_jdesc *jd; | 407 | struct gfs2_jdesc *jd; |
| 408 | int rv; | 408 | int rv; |
| 409 | 409 | ||
| 410 | /* Wait for our primary journal to be initialized */ | ||
| 411 | wait_for_completion(&sdp->sd_journal_ready); | ||
| 412 | |||
| 410 | spin_lock(&sdp->sd_jindex_spin); | 413 | spin_lock(&sdp->sd_jindex_spin); |
| 411 | rv = -EBUSY; | 414 | rv = -EBUSY; |
| 412 | if (sdp->sd_jdesc->jd_jid == jid) | 415 | if (sdp->sd_jdesc->jd_jid == jid) |
