diff options
Diffstat (limited to 'fs/gfs2/log.c')
-rw-r--r-- | fs/gfs2/log.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 161ab6f2058e..548264b1836d 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c | |||
@@ -769,8 +769,8 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | |||
769 | sdp->sd_log_commited_revoke += tr->tr_num_revoke - tr->tr_num_revoke_rm; | 769 | sdp->sd_log_commited_revoke += tr->tr_num_revoke - tr->tr_num_revoke_rm; |
770 | gfs2_assert_withdraw(sdp, ((int)sdp->sd_log_commited_revoke) >= 0); | 770 | gfs2_assert_withdraw(sdp, ((int)sdp->sd_log_commited_revoke) >= 0); |
771 | reserved = calc_reserved(sdp); | 771 | reserved = calc_reserved(sdp); |
772 | gfs2_assert_withdraw(sdp, sdp->sd_log_blks_reserved + tr->tr_reserved >= reserved); | ||
772 | unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; | 773 | unused = sdp->sd_log_blks_reserved - reserved + tr->tr_reserved; |
773 | gfs2_assert_withdraw(sdp, unused >= 0); | ||
774 | atomic_add(unused, &sdp->sd_log_blks_free); | 774 | atomic_add(unused, &sdp->sd_log_blks_free); |
775 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= | 775 | gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <= |
776 | sdp->sd_jdesc->jd_blocks); | 776 | sdp->sd_jdesc->jd_blocks); |
@@ -779,6 +779,21 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | |||
779 | gfs2_log_unlock(sdp); | 779 | gfs2_log_unlock(sdp); |
780 | } | 780 | } |
781 | 781 | ||
782 | static void buf_lo_incore_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | ||
783 | { | ||
784 | struct list_head *head = &tr->tr_list_buf; | ||
785 | struct gfs2_bufdata *bd; | ||
786 | |||
787 | gfs2_log_lock(sdp); | ||
788 | while (!list_empty(head)) { | ||
789 | bd = list_entry(head->next, struct gfs2_bufdata, bd_list_tr); | ||
790 | list_del_init(&bd->bd_list_tr); | ||
791 | tr->tr_num_buf--; | ||
792 | } | ||
793 | gfs2_log_unlock(sdp); | ||
794 | gfs2_assert_warn(sdp, !tr->tr_num_buf); | ||
795 | } | ||
796 | |||
782 | /** | 797 | /** |
783 | * gfs2_log_commit - Commit a transaction to the log | 798 | * gfs2_log_commit - Commit a transaction to the log |
784 | * @sdp: the filesystem | 799 | * @sdp: the filesystem |
@@ -790,7 +805,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | |||
790 | void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) | 805 | void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr) |
791 | { | 806 | { |
792 | log_refund(sdp, tr); | 807 | log_refund(sdp, tr); |
793 | lops_incore_commit(sdp, tr); | 808 | buf_lo_incore_commit(sdp, tr); |
794 | 809 | ||
795 | sdp->sd_vfs->s_dirt = 1; | 810 | sdp->sd_vfs->s_dirt = 1; |
796 | up_read(&sdp->sd_log_flush_lock); | 811 | up_read(&sdp->sd_log_flush_lock); |