[GFS2] Fix bug where lock not held
authorSteven Whitehouse <swhiteho@redhat.com>
Wed, 11 Oct 2006 17:34:59 +0000 (13:34 -0400)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 12 Oct 2006 21:10:55 +0000 (17:10 -0400)
The log lock needs to be held when manipulating the counter
for the number of free journal blocks.

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

index 554fe5bd1b728fcf402836570f6571e54c9dc501..72eec6542d6a74adb1eff38ae850d7882e772a8c 100644 (file)
@@ -569,16 +569,15 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl)
        else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle)
                log_write_header(sdp, 0, PULL);
        lops_after_commit(sdp, ai);
-       sdp->sd_log_head = sdp->sd_log_flush_head;
 
+       gfs2_log_lock(sdp);
+       sdp->sd_log_head = sdp->sd_log_flush_head;
        sdp->sd_log_blks_free -= sdp->sd_log_num_hdrs;
-
        sdp->sd_log_blks_reserved = 0;
        sdp->sd_log_commited_buf = 0;
        sdp->sd_log_num_hdrs = 0;
        sdp->sd_log_commited_revoke = 0;
 
-       gfs2_log_lock(sdp);
        if (!list_empty(&ai->ai_ail1_list)) {
                list_add(&ai->ai_list, &sdp->sd_ail1_list);
                ai = NULL;