diff options
Diffstat (limited to 'fs/gfs2/recovery.c')
-rw-r--r-- | fs/gfs2/recovery.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c index 2dac43065382..fa575d1676b9 100644 --- a/fs/gfs2/recovery.c +++ b/fs/gfs2/recovery.c @@ -316,7 +316,7 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) * Returns: errno */ -static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start, +static int foreach_descriptor(struct gfs2_jdesc *jd, u32 start, unsigned int end, int pass) { struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); @@ -386,10 +386,12 @@ static void clean_journal(struct gfs2_jdesc *jd, struct gfs2_log_header_host *head) { struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); + u32 lblock = head->lh_blkno; - sdp->sd_log_flush_head = head->lh_blkno; - gfs2_replay_incr_blk(jd, &sdp->sd_log_flush_head); - gfs2_write_log_header(sdp, jd, head->lh_sequence + 1, 0, + gfs2_replay_incr_blk(jd, &lblock); + if (jd->jd_jid == sdp->sd_lockstruct.ls_jid) + sdp->sd_log_flush_head = lblock; + gfs2_write_log_header(sdp, jd, head->lh_sequence + 1, 0, lblock, GFS2_LOG_HEAD_UNMOUNT | GFS2_LOG_HEAD_RECOVERY, REQ_PREFLUSH | REQ_FUA | REQ_META | REQ_SYNC); } |