aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r--fs/gfs2/log.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 1e1fe8def375..d24684330bc3 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -692,20 +692,16 @@ static void gfs2_ordered_wait(struct gfs2_sbd *sdp)
692 * 692 *
693 */ 693 */
694 694
695void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) 695void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl)
696{ 696{
697 struct gfs2_ail *ai; 697 struct gfs2_ail *ai;
698 698
699 down_write(&sdp->sd_log_flush_lock); 699 down_write(&sdp->sd_log_flush_lock);
700 700
701 if (gl) { 701 /* Log might have been flushed while we waited for the flush lock */
702 gfs2_log_lock(sdp); 702 if (gl && !test_bit(GLF_LFLUSH, &gl->gl_flags)) {
703 if (list_empty(&gl->gl_le.le_list)) { 703 up_write(&sdp->sd_log_flush_lock);
704 gfs2_log_unlock(sdp); 704 return;
705 up_write(&sdp->sd_log_flush_lock);
706 return;
707 }
708 gfs2_log_unlock(sdp);
709 } 705 }
710 706
711 ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); 707 ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL);
@@ -823,7 +819,6 @@ void gfs2_log_shutdown(struct gfs2_sbd *sdp)
823 down_write(&sdp->sd_log_flush_lock); 819 down_write(&sdp->sd_log_flush_lock);
824 820
825 gfs2_assert_withdraw(sdp, !sdp->sd_log_blks_reserved); 821 gfs2_assert_withdraw(sdp, !sdp->sd_log_blks_reserved);
826 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_gl);
827 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_buf); 822 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_buf);
828 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke); 823 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_revoke);
829 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_rg); 824 gfs2_assert_withdraw(sdp, !sdp->sd_log_num_rg);