76 int frags_per_block = 0;
80 ULONG group_block = 0;
89 frags_per_block = Ext2Sys->blocksize / Ext2Sys->fragsize;
94 pExt2Sb->s_first_data_block = (pExt2Sb->s_log_block_size) ? 0 : 1;
101 if (!pExt2Sb->s_rev_level)
111 pExt2Sb->s_lastcheck = pExt2Sb->s_mtime = pExt2Sb->s_wtime;
113 if (!pExt2Sb->s_blocks_per_group)
114 pExt2Sb->s_blocks_per_group = Ext2Sys->blocksize * 8;
116 pExt2Sb->s_frags_per_group = pExt2Sb->s_blocks_per_group * frags_per_block;
119 if (pExt2Sb->s_r_blocks_count >= pExt2Sb->s_blocks_count)
128 if (pExt2Sb->s_feature_incompat &
131 Ext2Sys->group_desc_count = 0;
138 Ext2Sys->group_desc_count = (pExt2Sb->s_blocks_count - pExt2Sb->s_first_data_block
141 if (Ext2Sys->group_desc_count == 0)
147 if (!pExt2Sb->s_inodes_count)
148 pExt2Sb->s_inodes_count = pExt2Sb->s_blocks_count / (
inode_ratio /Ext2Sys->blocksize);
163 pExt2Sb->s_inodes_per_group = (pExt2Sb->s_inodes_count + Ext2Sys->group_desc_count - 1)
164 /Ext2Sys->group_desc_count;
166 if (pExt2Sb->s_inodes_per_group > (
ULONG)(Ext2Sys->blocksize*8))
167 pExt2Sb->s_inodes_per_group = Ext2Sys->blocksize*8;
174 Ext2Sys->inode_blocks_per_group = (((pExt2Sb->s_inodes_per_group *
EXT2_INODE_SIZE(pExt2Sb))
177 pExt2Sb->s_inodes_per_group = ((Ext2Sys->inode_blocks_per_group *
EXT2_BLOCK_SIZE(pExt2Sb))
185 pExt2Sb->s_inodes_per_group &= ~7;
186 Ext2Sys->inode_blocks_per_group = (((pExt2Sb->s_inodes_per_group *
EXT2_INODE_SIZE(pExt2Sb))
192 pExt2Sb->s_inodes_count = pExt2Sb->s_inodes_per_group * Ext2Sys->group_desc_count;
193 pExt2Sb->s_free_inodes_count = pExt2Sb->s_inodes_count;
204 overhead = (3 + Ext2Sys->desc_blocks + Ext2Sys->inode_blocks_per_group);
211 rem = ((pExt2Sb->s_blocks_count - pExt2Sb->s_first_data_block) %
212 pExt2Sb->s_blocks_per_group);
214 if ((Ext2Sys->group_desc_count == 1) && rem && (rem < overhead))
217 if (rem && (rem < overhead+50))
219 pExt2Sb->s_blocks_count -= rem;
253 group_block = pExt2Sb->s_first_data_block;
256 pExt2Sb->s_free_blocks_count = 0;
258 for (
i = 0;
i < Ext2Sys->group_desc_count;
i++)
260 if (
i == Ext2Sys->group_desc_count-1)
262 numblocks = (pExt2Sb->s_blocks_count - pExt2Sb->s_first_data_block)
263 % pExt2Sb->s_blocks_per_group;
266 numblocks = pExt2Sb->s_blocks_per_group;
270 numblocks = pExt2Sb->s_blocks_per_group;
277 for (
j=0;
j < Ext2Sys->desc_blocks+1;
j++)
280 numblocks -= 1 + Ext2Sys->desc_blocks;
283 numblocks -= 2 + Ext2Sys->inode_blocks_per_group;
285 pExt2Sb->s_free_blocks_count += numblocks;
286 Ext2Sys->group_desc[
i].bg_free_blocks_count = (
__u16)numblocks;
287 Ext2Sys->group_desc[
i].bg_free_inodes_count = (
__u16)pExt2Sb->s_inodes_per_group;
288 Ext2Sys->group_desc[
i].bg_used_dirs_count = 0;
290 group_block += pExt2Sb->s_blocks_per_group;
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV
bool ext2_allocate_group_desc(PEXT2_FILESYS Ext2Sys)
bool ext2_allocate_block_bitmap(PEXT2_FILESYS Ext2Sys)
#define EXT2_GOOD_OLD_REV
void ext2_free_inode_bitmap(PEXT2_FILESYS Ext2Sys)
#define EXT2_DFL_MAX_MNT_COUNT
bool ext2_allocate_inode_bitmap(PEXT2_FILESYS Ext2Sys)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define EXT2_INODE_SIZE(sb)
void ext2_free_block_bitmap(PEXT2_FILESYS Ext2Sys)
#define EXT2_DESC_PER_BLOCK(s)
bool ext2_bg_has_super(PEXT2_SUPER_BLOCK pExt2Sb, int group_block)
#define EXT2_ERRORS_DEFAULT
#define EXT2_FIRST_INODE(s)
void ext2_free_group_desc(PEXT2_FILESYS Ext2Sys)
bool ext2_mark_bitmap(PEXT2_BITMAP bitmap, ULONG bitno)
#define EXT2_BLOCK_SIZE(sb)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
BOOLEAN NTAPI RtlTimeToSecondsSince1970(PLARGE_INTEGER Time, PULONG ElapsedSeconds)
#define set_field(field, default)
#define EXT2_GOOD_OLD_INODE_SIZE
#define EXT2_GOOD_OLD_FIRST_INO
NTSTATUS NTAPI NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
char * cleanup(char *str)
#define EXT2_FRAG_SIZE(s)
#define EXT2_DFL_CHECKINTERVAL
#define EXT2_BLOCKS_PER_GROUP(s)