GFS2: fix s_writers.counter imbalance in gfs2_ail_empty_gl
authorEric Sandeen <sandeen@redhat.com>
Tue, 18 Sep 2012 02:50:31 +0000 (21:50 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Mon, 24 Sep 2012 09:47:29 +0000 (10:47 +0100)
gfs2_ail_empty_gl() contains an "inline version" of gfs2_trans_begin(),
so it needs an explicit sb_start_intwrite() as well, to balance the
sb_end_intwrite() which will be called by gfs2_trans_end().

With this, xfstest 068 passes on lock_nolock local gfs2.
Without it, we reach a writer count of -1 and get stuck.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/glops.c

index 4bdcf3784187863b0d7f2379981bc9aad1908495..32cc4fde975c2d74aa19d7134f61ed712a1599fa 100644 (file)
@@ -94,6 +94,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
        /* A shortened, inline version of gfs2_trans_begin() */
        tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes, sizeof(u64));
        tr.tr_ip = (unsigned long)__builtin_return_address(0);
+       sb_start_intwrite(sdp->sd_vfs);
        gfs2_log_reserve(sdp, tr.tr_reserved);
        BUG_ON(current->journal_info);
        current->journal_info = &tr;