From 7f961d424b1ba527e835d01ad24e0e4c3f4088c5 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sun, 3 Feb 2002 01:28:52 -0500 Subject: [PATCH] Fix bug where ext2fs_mkdir wasn't correctly bumping the number of directories in use in a bloock group. --- lib/ext2fs/ChangeLog | 10 ++++++++++ lib/ext2fs/alloc_stats.c | 10 +++++++++- lib/ext2fs/ext2fs.h | 2 ++ lib/ext2fs/mkdir.c | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog index ee2a003..2a817dd 100644 --- a/lib/ext2fs/ChangeLog +++ b/lib/ext2fs/ChangeLog @@ -2,6 +2,16 @@ * Release of E2fsprogs 1.26 +2002-02-03 Theodore Tso + + * mkdir.c (ext2fs_mkdir): Change to use ext2fs_inode_alloc_stats2 + so that the number of directories in use is adjusted + appropriately. + + * alloc_stats.c (ext2fs_inode_alloc_stats2): Add new function + which optionally will modify the number of directories + count. + 2002-01-03 Theodore Tso * dir_iterate.c (ext2fs_dir_iterate2, ext2fs_process_dir_block): diff --git a/lib/ext2fs/alloc_stats.c b/lib/ext2fs/alloc_stats.c index 986f459..4088f7b 100644 --- a/lib/ext2fs/alloc_stats.c +++ b/lib/ext2fs/alloc_stats.c @@ -15,7 +15,8 @@ #include "ext2_fs.h" #include "ext2fs.h" -void ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse) +void ext2fs_inode_alloc_stats2(ext2_filsys fs, ext2_ino_t ino, + int inuse, int isdir) { int group = ext2fs_group_of_ino(fs, ino); @@ -24,11 +25,18 @@ void ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse) else ext2fs_unmark_inode_bitmap(fs->inode_map, ino); fs->group_desc[group].bg_free_inodes_count -= inuse; + if (isdir) + fs->group_desc[group].bg_used_dirs_count += inuse; fs->super->s_free_inodes_count -= inuse; ext2fs_mark_super_dirty(fs); ext2fs_mark_ib_dirty(fs); } +void ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse) +{ + ext2fs_inode_alloc_stats2(fs, ino, inuse, 0); +} + void ext2fs_block_alloc_stats(ext2_filsys fs, blk_t blk, int inuse) { int group = ext2fs_group_of_blk(fs, blk); diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index bfca032..75512d1 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -445,6 +445,8 @@ extern errcode_t ext2fs_alloc_block(ext2_filsys fs, blk_t goal, /* alloc_stats.c */ void ext2fs_inode_alloc_stats(ext2_filsys fs, ext2_ino_t ino, int inuse); +void ext2fs_inode_alloc_stats2(ext2_filsys fs, ext2_ino_t ino, + int inuse, int isdir); void ext2fs_block_alloc_stats(ext2_filsys fs, blk_t blk, int inuse); /* alloc_tables.c */ diff --git a/lib/ext2fs/mkdir.c b/lib/ext2fs/mkdir.c index 4fa711d..ea189d9 100644 --- a/lib/ext2fs/mkdir.c +++ b/lib/ext2fs/mkdir.c @@ -130,7 +130,7 @@ errcode_t ext2fs_mkdir(ext2_filsys fs, ext2_ino_t parent, ext2_ino_t inum, * Update accounting.... */ ext2fs_block_alloc_stats(fs, blk, +1); - ext2fs_inode_alloc_stats(fs, ino, +1); + ext2fs_inode_alloc_stats2(fs, ino, +1, 1); cleanup: if (block) -- 1.8.3.1