From f849be952e6edb9736cc24371117bee4b1627bba Mon Sep 17 00:00:00 2001 From: Srinivas Eeda Date: Tue, 5 Oct 2010 15:53:06 -0700 Subject: [PATCH] --- yaml --- r: 212775 b: refs/heads/master c: 9b5cd10e4c14a1a642076ace6a73be3d33c91fb6 h: refs/heads/master i: 212773: 831b301fd648563673f95788b3a93c8f5b344641 212771: e7ddb4373c4090d8bc6e5d797460938e4a219963 212767: 620f27b9f89c1c03bd84129744cb426bda8b6cc2 v: v3 --- [refs] | 2 +- trunk/fs/ocfs2/suballoc.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ba2e04f54819..acda7086a060 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 93f3b86fb1bd0ad7b4a5eb1ad1fdae2b290633b7 +refs/heads/master: 9b5cd10e4c14a1a642076ace6a73be3d33c91fb6 diff --git a/trunk/fs/ocfs2/suballoc.c b/trunk/fs/ocfs2/suballoc.c index 8a286f54dca1..64f2c50a1c37 100644 --- a/trunk/fs/ocfs2/suballoc.c +++ b/trunk/fs/ocfs2/suballoc.c @@ -1380,6 +1380,14 @@ static inline int ocfs2_block_group_set_bits(handle_t *handle, } le16_add_cpu(&bg->bg_free_bits_count, -num_bits); + if (le16_to_cpu(bg->bg_free_bits_count) > le16_to_cpu(bg->bg_bits)) { + ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit" + " count %u but claims %u are freed. num_bits %d", + (unsigned long long)le64_to_cpu(bg->bg_blkno), + le16_to_cpu(bg->bg_bits), + le16_to_cpu(bg->bg_free_bits_count), num_bits); + return -EROFS; + } while(num_bits--) ocfs2_set_bit(bit_off++, bitmap); @@ -2419,6 +2427,14 @@ static int ocfs2_block_group_clear_bits(handle_t *handle, (unsigned long *) undo_bg->bg_bitmap); } le16_add_cpu(&bg->bg_free_bits_count, num_bits); + if (le16_to_cpu(bg->bg_free_bits_count) > le16_to_cpu(bg->bg_bits)) { + ocfs2_error(alloc_inode->i_sb, "Group descriptor # %llu has bit" + " count %u but claims %u are freed. num_bits %d", + (unsigned long long)le64_to_cpu(bg->bg_blkno), + le16_to_cpu(bg->bg_bits), + le16_to_cpu(bg->bg_free_bits_count), num_bits); + return -EROFS; + } if (undo_fn) jbd_unlock_bh_state(group_bh);