[Ocfs2-devel] [PATCH 1/1] ocfs2: validate bg_free_bits_count after update

2010-10-01 Thread Srinivas Eeda
This patch adds a safe check to ensure bg_free_bits_count doesn't exceed
bg_bits in a group descriptor. This is to avoid on disk corruption that was
seen recently.

debugfs: group 52803072
   Group Chain: 179   Parent Inode: 11  Generation: 2959379682
   CRC32:    ECC: 
   ##   Block#TotalUsed Free Contig   Size
   052803072  322564294965350   34202182074032
   ..

Signed-off-by: Srinivas Eeda srinivas.e...@oracle.com
---
 fs/ocfs2/suballoc.c |   16 
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/suballoc.c b/fs/ocfs2/suballoc.c
index 849c2f0..d606a79 100644
--- a/fs/ocfs2/suballoc.c
+++ b/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 -EIO;
+   }
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 -EIO;
+   }
 
if (undo_fn)
jbd_unlock_bh_state(group_bh);
-- 
1.5.6.5


___
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel


[Ocfs2-devel] odirect hack

2010-10-01 Thread Sunil Mushran
Mark,

I was discussing with Joel whether it was time for us to special
case the odirect hack we've had since day 1. The one that allows
concurrent odirect writes.

I am wondering whether we should allow users control that behavior
via a mount option. parallel_directio, maybe.

Sunil

___
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
http://oss.oracle.com/mailman/listinfo/ocfs2-devel