Fix bug where ext2fs_mkdir wasn't correctly bumping the number of

directories in use in a bloock group.
bitmap-optimize
Theodore Ts'o 2002-02-03 01:28:52 -05:00
parent 31a20a34da
commit 7f961d424b
4 changed files with 22 additions and 2 deletions

View File

@ -2,6 +2,16 @@
* Release of E2fsprogs 1.26
2002-02-03 Theodore Tso <tytso@valinux.com>
* 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 <tytso@mit.edu>
* dir_iterate.c (ext2fs_dir_iterate2, ext2fs_process_dir_block):

View File

@ -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);

View File

@ -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 */

View File

@ -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)