GFS2: Re-add a call to log_flush_wait when flushing the journal
authorBob Peterson <rpeterso@redhat.com>
Wed, 12 Mar 2014 14:34:16 +0000 (10:34 -0400)
committerSteven Whitehouse <swhiteho@redhat.com>
Wed, 12 Mar 2014 14:46:29 +0000 (14:46 +0000)
Upstream commit 34cc178 changed a line of code from calling function
log_flush_commit to calling log_write_header. This had the effect of
eliminating a call to function log_flush_wait. That causes the journal
to skip over log headers, which results in multiple wrap points,
which itself leads to infinite loops in journal replay, both in the
kernel code and fsck.gfs2 code. This patch re-adds that call.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/log.c

index edbd46113c287119ab3163edaeca5952191bd51b..4a14d504ef835e1ad6b46c315c20272356347d34 100644 (file)
@@ -702,6 +702,7 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl)
        gfs2_log_flush_bio(sdp, WRITE);
 
        if (sdp->sd_log_head != sdp->sd_log_flush_head) {
+               log_flush_wait(sdp);
                log_write_header(sdp, 0);
        } else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){
                atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */