On Sun, Sep 2, 2012 at 5:45 PM, Yongqiang Yang [off-list ref] wrote:
Recnetly, I ecountered some corrupted filesystems in which some
groups' free inode counts were negative, it seemed that free inode
This comment is not exactly, it is not negative but 65535. I will
resend the patch later.
Thanks,
Yongqiang.
quoted hunk ↗ jump to hunk
count was overflow. This patch teaches ext4 to check free inode
count before allocaing an inode.
Signed-off-by: Yongqiang Yang <redacted>
---
fs/ext4/ialloc.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 26154b8..fa36372 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -697,6 +697,15 @@ got_group:
if (!gdp)
goto fail;
+ /*
+ * Check free inodes count before loading bitmap.
+ */
+ if (ext4_free_inodes_count(sb, gdp) == 0) {
+ if (++group == ngroups)
+ group = 0;
+ continue;
+ }
+
brelse(inode_bitmap_bh);
inode_bitmap_bh = ext4_read_inode_bitmap(sb, group);
if (!inode_bitmap_bh)
--1.7.5.1
--
Best Wishes
Yongqiang Yang