summaryrefslogtreecommitdiffstats
path: root/fs/gfs2
diff options
context:
space:
mode:
authorBob Peterson <rpeterso@redhat.com>2014-03-12 15:34:16 +0100
committerSteven Whitehouse <swhiteho@redhat.com>2014-03-12 15:46:29 +0100
commit428fd95d859b24fea448380fa21ad6d841b34241 (patch)
treedcb8310736ab2a0dcb050c75dc37fb934c37d880 /fs/gfs2
parentGFS2: Ensure workqueue is scheduled after noexp request (diff)
downloadlinux-428fd95d859b24fea448380fa21ad6d841b34241.tar.xz
linux-428fd95d859b24fea448380fa21ad6d841b34241.zip
GFS2: Re-add a call to log_flush_wait when flushing the journal
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>
Diffstat (limited to 'fs/gfs2')
-rw-r--r--fs/gfs2/log.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index edbd46113c28..4a14d504ef83 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -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 */