diff options
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r-- | fs/gfs2/log.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 98918a756410..13c6237c5f67 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "meta_io.h" | 28 | #include "meta_io.h" |
29 | #include "util.h" | 29 | #include "util.h" |
30 | #include "dir.h" | 30 | #include "dir.h" |
31 | #include "trace_gfs2.h" | ||
31 | 32 | ||
32 | #define PULL 1 | 33 | #define PULL 1 |
33 | 34 | ||
@@ -120,7 +121,7 @@ __acquires(&sdp->sd_log_lock) | |||
120 | lock_buffer(bh); | 121 | lock_buffer(bh); |
121 | if (test_clear_buffer_dirty(bh)) { | 122 | if (test_clear_buffer_dirty(bh)) { |
122 | bh->b_end_io = end_buffer_write_sync; | 123 | bh->b_end_io = end_buffer_write_sync; |
123 | submit_bh(WRITE, bh); | 124 | submit_bh(WRITE_SYNC_PLUG, bh); |
124 | } else { | 125 | } else { |
125 | unlock_buffer(bh); | 126 | unlock_buffer(bh); |
126 | brelse(bh); | 127 | brelse(bh); |
@@ -313,6 +314,7 @@ int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks) | |||
313 | gfs2_log_lock(sdp); | 314 | gfs2_log_lock(sdp); |
314 | } | 315 | } |
315 | atomic_sub(blks, &sdp->sd_log_blks_free); | 316 | atomic_sub(blks, &sdp->sd_log_blks_free); |
317 | trace_gfs2_log_blocks(sdp, -blks); | ||
316 | gfs2_log_unlock(sdp); | 318 | gfs2_log_unlock(sdp); |
317 | mutex_unlock(&sdp->sd_log_reserve_mutex); | 319 | mutex_unlock(&sdp->sd_log_reserve_mutex); |
318 | 320 | ||
@@ -333,6 +335,7 @@ void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks) | |||
333 | 335 | ||
334 | gfs2_log_lock(sdp); | 336 | gfs2_log_lock(sdp); |
335 | atomic_add(blks, &sdp->sd_log_blks_free); | 337 | atomic_add(blks, &sdp->sd_log_blks_free); |
338 | trace_gfs2_log_blocks(sdp, blks); | ||
336 | gfs2_assert_withdraw(sdp, | 339 | gfs2_assert_withdraw(sdp, |
337 | atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); | 340 | atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); |
338 | gfs2_log_unlock(sdp); | 341 | gfs2_log_unlock(sdp); |
@@ -558,6 +561,7 @@ static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail) | |||
558 | 561 | ||
559 | gfs2_log_lock(sdp); | 562 | gfs2_log_lock(sdp); |
560 | atomic_add(dist, &sdp->sd_log_blks_free); | 563 | atomic_add(dist, &sdp->sd_log_blks_free); |
564 | trace_gfs2_log_blocks(sdp, dist); | ||
561 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); | 565 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= sdp->sd_jdesc->jd_blocks); |
562 | gfs2_log_unlock(sdp); | 566 | gfs2_log_unlock(sdp); |
563 | 567 | ||
@@ -604,7 +608,7 @@ static void log_write_header(struct gfs2_sbd *sdp, u32 flags, int pull) | |||
604 | if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) | 608 | if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) |
605 | goto skip_barrier; | 609 | goto skip_barrier; |
606 | get_bh(bh); | 610 | get_bh(bh); |
607 | submit_bh(WRITE_BARRIER | (1 << BIO_RW_META), bh); | 611 | submit_bh(WRITE_SYNC | (1 << BIO_RW_BARRIER) | (1 << BIO_RW_META), bh); |
608 | wait_on_buffer(bh); | 612 | wait_on_buffer(bh); |
609 | if (buffer_eopnotsupp(bh)) { | 613 | if (buffer_eopnotsupp(bh)) { |
610 | clear_buffer_eopnotsupp(bh); | 614 | clear_buffer_eopnotsupp(bh); |
@@ -664,7 +668,7 @@ static void gfs2_ordered_write(struct gfs2_sbd *sdp) | |||
664 | lock_buffer(bh); | 668 | lock_buffer(bh); |
665 | if (buffer_mapped(bh) && test_clear_buffer_dirty(bh)) { | 669 | if (buffer_mapped(bh) && test_clear_buffer_dirty(bh)) { |
666 | bh->b_end_io = end_buffer_write_sync; | 670 | bh->b_end_io = end_buffer_write_sync; |
667 | submit_bh(WRITE, bh); | 671 | submit_bh(WRITE_SYNC_PLUG, bh); |
668 | } else { | 672 | } else { |
669 | unlock_buffer(bh); | 673 | unlock_buffer(bh); |
670 | brelse(bh); | 674 | brelse(bh); |
@@ -715,6 +719,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) | |||
715 | up_write(&sdp->sd_log_flush_lock); | 719 | up_write(&sdp->sd_log_flush_lock); |
716 | return; | 720 | return; |
717 | } | 721 | } |
722 | trace_gfs2_log_flush(sdp, 1); | ||
718 | 723 | ||
719 | ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); | 724 | ai = kzalloc(sizeof(struct gfs2_ail), GFP_NOFS | __GFP_NOFAIL); |
720 | INIT_LIST_HEAD(&ai->ai_ail1_list); | 725 | INIT_LIST_HEAD(&ai->ai_ail1_list); |
@@ -746,6 +751,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) | |||
746 | else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ | 751 | else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){ |
747 | gfs2_log_lock(sdp); | 752 | gfs2_log_lock(sdp); |
748 | atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ | 753 | atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */ |
754 | trace_gfs2_log_blocks(sdp, -1); | ||
749 | gfs2_log_unlock(sdp); | 755 | gfs2_log_unlock(sdp); |
750 | log_write_header(sdp, 0, PULL); | 756 | log_write_header(sdp, 0, PULL); |
751 | } | 757 | } |
@@ -763,8 +769,7 @@ void __gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl) | |||
763 | ai = NULL; | 769 | ai = NULL; |
764 | } | 770 | } |
765 | gfs2_log_unlock(sdp); | 771 | gfs2_log_unlock(sdp); |
766 | 772 | trace_gfs2_log_flush(sdp, 0); | |
767 | sdp->sd_vfs->s_dirt = 0; | ||
768 | up_write(&sdp->sd_log_flush_lock); | 773 | up_write(&sdp->sd_log_flush_lock); |
769 | 774 | ||
770 | kfree(ai); | 775 | kfree(ai); |
@@ -788,6 +793,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | |||
788 | gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); | 793 | gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); |
789 | unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; | 794 | unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; |
790 | atomic_add(unused, &sdp->sd_log_blks_free); | 795 | atomic_add(unused, &sdp->sd_log_blks_free); |
796 | trace_gfs2_log_blocks(sdp, unused); | ||
791 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= | 797 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= |
792 | sdp->sd_jdesc->jd_blocks); | 798 | sdp->sd_jdesc->jd_blocks); |
793 | sdp->sd_log_blks_reserved = reserved; | 799 | sdp->sd_log_blks_reserved = reserved; |
@@ -823,7 +829,6 @@ void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | |||
823 | log_refund(sdp, tr); | 829 | log_refund(sdp, tr); |
824 | buf_lo_incore_commit(sdp, tr); | 830 | buf_lo_incore_commit(sdp, tr); |
825 | 831 | ||
826 | sdp->sd_vfs->s_dirt = 1; | ||
827 | up_read(&sdp->sd_log_flush_lock); | 832 | up_read(&sdp->sd_log_flush_lock); |
828 | 833 | ||
829 | gfs2_log_lock(sdp); | 834 | gfs2_log_lock(sdp); |