alloc_tables.c revision 9ba400027fb00ce43d14673346bbfb6f5719985a
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * alloc_tables.c --- Allocate tables for a newly initialized 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * filesystem. Used by mke2fs when initializing a filesystem 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 1996 Theodore Ts'o. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * %Begin-Header% 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This file may be redistributed under the terms of the GNU Public 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * License. 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * %End-Header% 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h> 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h> 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if HAVE_UNISTD_H 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h> 174f8ecd80296508a1dc69d3f3a23fd91e962c2784Jeff Brown#endif 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <fcntl.h> 19713df150b92a0a5eea877f99405e31eefbf93a09Dianne Hackborn#include <time.h> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if HAVE_SYS_STAT_H 21cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn#include <sys/stat.h> 224f8ecd80296508a1dc69d3f3a23fd91e962c2784Jeff Brown#endif 236f357d3284a833cc50a990e14b39f389b8972254Jeff Brown#if HAVE_SYS_TYPES_H 242175e9c366998ed7bd1a4501b94a02f4f49b932cJeff Brown#include <sys/types.h> 252c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown#endif 26182f73fc4da13a6417e5086ec9ecce80eb8423caAdam Lesinski 27182f73fc4da13a6417e5086ec9ecce80eb8423caAdam Lesinski#include "ext2_fs.h" 284f8ecd80296508a1dc69d3f3a23fd91e962c2784Jeff Brown#include "ext2fs.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown/* 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This routine searches for free blocks that can allocate a full 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * group of bitmaps or inode tables for a flexbg group. Returns the 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * block number with a correct offset were the bitmaps and inode 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tables can be allocated continously and in order. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic blk_t flexbg_offset(ext2_filsys fs, dgrp_t group, blk_t start_blk, 37d7786b41b78ba8592daea708b024b5a75e441992Mike Lockwood ext2fs_block_bitmap bmap, int offset, int size) 3843866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker{ 393b971598ed28d45c176e3f9b076fc743a406296dJeff Brown int flexbg, flexbg_size, elem_size; 403b971598ed28d45c176e3f9b076fc743a406296dJeff Brown blk_t last_blk, first_free = 0; 414ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown dgrp_t last_grp; 42131206b8a9d07400d7c98aea50cc45c38769448fJeff Brown 439630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown flexbg_size = 1 << fs->super->s_log_groups_per_flex; 448b61983ee81f4819319d22e05ddf473a9c64be77Amith Yamasani flexbg = group / flexbg_size; 452139276ce8b54aba5faa858ca69ed5f01445c269Jeff Brown 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (size > fs->super->s_blocks_per_group / 8) 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size = fs->super->s_blocks_per_group / 8; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 509630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Dont do a long search if the previous block 5192e66dd6835cd5fefad463c79d0589166e8fd3a7Jim Miller * search is still valid. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 536f357d3284a833cc50a990e14b39f389b8972254Jeff Brown if (start_blk && group % flexbg_size) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (size > flexbg_size) 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project elem_size = fs->inode_blocks_per_group; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 57dbcf2d7482562eff45ac727cea799b37a260e399Nick Kralevich elem_size = 1; 583edf5272fb2185403dfe64b9722b9fc9b9de80f8Jeff Brown if (ext2fs_test_block_bitmap_range(bmap, start_blk + elem_size, 59d49359631bc2642be73dc162a8a73207df1e0bafJeff Brown size)) 607e9f4eb2608148436cef36c9969bf8a599b39e72Dianne Hackborn return start_blk + elem_size; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 62567f7ca424280ae957b04d4f3df690055f2d41dfJeff Brown 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project start_blk = ext2fs_group_first_block(fs, flexbg_size * flexbg); 648a9b22056b13477f59df934928c00c58b5871c95Joe Onorato last_grp = group | (flexbg_size - 1); 659630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (last_grp > fs->group_desc_count) 66037c33eae74bee2774897d969d48947f9abe254fJeff Brown last_grp = fs->group_desc_count; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project last_blk = ext2fs_group_last_block(fs, last_grp); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Find the first available block */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ext2fs_get_free_blocks(fs, start_blk, last_blk, 1, bmap, 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project &first_free)) 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return first_free; 739630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ext2fs_get_free_blocks(fs, first_free + offset, last_blk, size, 75fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown bmap, &first_free)) 76fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown return first_free; 77fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown 78fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown return first_free; 79fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown} 809630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 819630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brownerrcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group, 829630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown ext2fs_block_bitmap bmap) 839630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown{ 842175e9c366998ed7bd1a4501b94a02f4f49b932cJeff Brown errcode_t retval; 859630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown blk_t group_blk, start_blk, last_blk, new_blk, blk; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dgrp_t last_grp; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int j, rem_grps, flexbg_size = 0; 8888c997a5abb3b2b2df1fb17fa3af40b34fbdd590Jeff Brown 899630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown group_blk = ext2fs_group_first_block(fs, group); 909630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown last_blk = ext2fs_group_last_block(fs, group); 919630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 929630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (!bmap) 932687550272ba061448f5d5b914700dc335299ee7Jeff Brown bmap = fs->block_map; 949630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 95e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown if (EXT2_HAS_INCOMPAT_FEATURE(fs->super, 96e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown EXT4_FEATURE_INCOMPAT_FLEX_BG) && 979630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->super->s_log_groups_per_flex) { 989630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown flexbg_size = 1 << fs->super->s_log_groups_per_flex; 999630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown last_grp = group | (flexbg_size - 1); 1009630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown rem_grps = last_grp - group; 1019630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (last_grp > fs->group_desc_count) 1029630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown last_grp = fs->group_desc_count; 1039630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown } 1049630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 1059630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown /* 1069630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Allocate the block and inode bitmaps, if necessary 1079630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown */ 1089630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (fs->stride) { 1099630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown retval = ext2fs_get_free_blocks(fs, group_blk, last_blk, 1109630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 1, bmap, &start_blk); 1119630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval) 1129630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown return retval; 1139630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown start_blk += fs->inode_blocks_per_group; 1149630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown start_blk += ((fs->stride * group) % 1159630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown (last_blk - start_blk + 1)); 11693cbbb25a56356cd36523809783a277fe92e312eJeff Brown if (start_blk >= last_blk) 11793cbbb25a56356cd36523809783a277fe92e312eJeff Brown start_blk = group_blk; 118ec6aa5945408ce97034d24e1ba5d80bed88cebf4Jeff Brown } else 1193ee549ca2404067bb8b2fcbaa741ec118c76bf3eJeff Brown start_blk = group_blk; 120e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown 121e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown if (flexbg_size) { 1229630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown int prev_block = 0; 1239630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (group && fs->group_desc[group-1].bg_block_bitmap) 1249630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown prev_block = fs->group_desc[group-1].bg_block_bitmap; 1259630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown start_blk = flexbg_offset(fs, group, prev_block, bmap, 1269630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 0, rem_grps); 1279630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown last_blk = ext2fs_group_last_block(fs, last_grp); 1289630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown } 12910428748f98518dbaef8c56cf1ad75aabd75da45Jeff Brown 1302687550272ba061448f5d5b914700dc335299ee7Jeff Brown if (!fs->group_desc[group].bg_block_bitmap) { 1319630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown retval = ext2fs_get_free_blocks(fs, start_blk, last_blk, 1329630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 1, bmap, &new_blk); 1339630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval == EXT2_ET_BLOCK_ALLOC_FAIL) 1349630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown retval = ext2fs_get_free_blocks(fs, group_blk, 13505af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown last_blk, 1, bmap, &new_blk); 1369630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval) 13727736f5c0ada99bf2a7e007a1dec0ad51f65fa52Jeff Brown return retval; 13827736f5c0ada99bf2a7e007a1dec0ad51f65fa52Jeff Brown ext2fs_mark_block_bitmap(bmap, new_blk); 1399630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->group_desc[group].bg_block_bitmap = new_blk; 14005af6adb8d4fd5ea069c9aead5a877da9085daa8Jeff Brown if (flexbg_size) { 141ff532540f18e3b2181da0550fe55045418a3b84eJeff Brown dgrp_t gr = ext2fs_group_of_blk(fs, new_blk); 142e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown fs->group_desc[gr].bg_free_blocks_count--; 143e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown fs->super->s_free_blocks_count--; 144e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT; 145e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown ext2fs_group_desc_csum_set(fs, gr); 146e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown } 1470a571123544058578b4ef1558c276a4050519652Jeff Brown } 1480a571123544058578b4ef1558c276a4050519652Jeff Brown 1490a571123544058578b4ef1558c276a4050519652Jeff Brown if (flexbg_size) { 15062b8a49856cc0822905dcb7a213f082b92fa69e3Ruchi Kandoi int prev_block = 0; 151b880d880c6cd989eacc28c365fc9a41d31900da1Jeff Brown if (group && fs->group_desc[group-1].bg_inode_bitmap) 1522c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown prev_block = fs->group_desc[group-1].bg_inode_bitmap; 1532c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown start_blk = flexbg_offset(fs, group, prev_block, bmap, 1542c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown flexbg_size, rem_grps); 155182f73fc4da13a6417e5086ec9ecce80eb8423caAdam Lesinski last_blk = ext2fs_group_last_block(fs, last_grp); 1562139276ce8b54aba5faa858ca69ed5f01445c269Jeff Brown } 1574ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown 1589630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (!fs->group_desc[group].bg_inode_bitmap) { 159713df150b92a0a5eea877f99405e31eefbf93a09Dianne Hackborn retval = ext2fs_get_free_blocks(fs, start_blk, last_blk, 1609630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 1, bmap, &new_blk); 1619630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval == EXT2_ET_BLOCK_ALLOC_FAIL) 1623b971598ed28d45c176e3f9b076fc743a406296dJeff Brown retval = ext2fs_get_free_blocks(fs, group_blk, 1639630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown last_blk, 1, bmap, &new_blk); 164567f7ca424280ae957b04d4f3df690055f2d41dfJeff Brown if (retval) 165182f73fc4da13a6417e5086ec9ecce80eb8423caAdam Lesinski return retval; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ext2fs_mark_block_bitmap(bmap, new_blk); 1679630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->group_desc[group].bg_inode_bitmap = new_blk; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (flexbg_size) { 1699630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown dgrp_t gr = ext2fs_group_of_blk(fs, new_blk); 1709630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->group_desc[gr].bg_free_blocks_count--; 1719630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->super->s_free_blocks_count--; 1720e5bb7f1c9558bcf76af4f31dd5a11e78bcbdc9dMike Lockwood fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT; 1739630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown ext2fs_group_desc_csum_set(fs, gr); 1749630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown } 1759630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown } 176fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1782687550272ba061448f5d5b914700dc335299ee7Jeff Brown * Allocate the inode table 1792687550272ba061448f5d5b914700dc335299ee7Jeff Brown */ 1802687550272ba061448f5d5b914700dc335299ee7Jeff Brown if (flexbg_size) { 1812687550272ba061448f5d5b914700dc335299ee7Jeff Brown int prev_block = 0; 1829630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (group && fs->group_desc[group-1].bg_inode_table) 1839630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown prev_block = fs->group_desc[group-1].bg_inode_table; 184bc632a28e4fba4a659baf39b9fd3d06d10cfda97John Spurlock group_blk = flexbg_offset(fs, group, prev_block, bmap, 1859630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown flexbg_size * 2, 1869630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->inode_blocks_per_group * 1879630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown rem_grps); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project last_blk = ext2fs_group_last_block(fs, last_grp); 1899630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown } 1909630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 1912d7bb81ac4c04447a1e04fef82986b939823dea4Mike Lockwood if (!fs->group_desc[group].bg_inode_table) { 1929630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown retval = ext2fs_get_free_blocks(fs, group_blk, last_blk, 1939630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->inode_blocks_per_group, 194b28654167466277fa262606810115164d9d24d67Mike Lockwood bmap, &new_blk); 1959630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval) 1969630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown return retval; 1979630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown for (j=0, blk = new_blk; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project j < fs->inode_blocks_per_group; 1999630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown j++, blk++) { 2009630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown ext2fs_mark_block_bitmap(bmap, blk); 2019630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (flexbg_size) { 202df83afaf299666e99c519aa86e7e082b7c116e95Dianne Hackborn dgrp_t gr = ext2fs_group_of_blk(fs, blk); 2039630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->group_desc[gr].bg_free_blocks_count--; 2049630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->super->s_free_blocks_count--; 2059630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown fs->group_desc[gr].bg_flags &= ~EXT2_BG_BLOCK_UNINIT; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ext2fs_group_desc_csum_set(fs, gr); 2070a571123544058578b4ef1558c276a4050519652Jeff Brown } 2080a571123544058578b4ef1558c276a4050519652Jeff Brown } 2090a571123544058578b4ef1558c276a4050519652Jeff Brown fs->group_desc[group].bg_inode_table = new_blk; 210e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown } 211e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown ext2fs_group_desc_csum_set(fs, group); 212e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown return 0; 213e333e674a758c39885d4d9779a1aad387fb0e6aaJeff Brown} 2149630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 2159630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brownerrcode_t ext2fs_allocate_tables(ext2_filsys fs) 216609695dab0f0318459d32ff5dfc529d7398e751bJoe Onorato{ 2179630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown errcode_t retval; 2189630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown dgrp_t i; 2199630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (i = 0; i < fs->group_desc_count; i++) { 2219630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown retval = ext2fs_allocate_group_table(fs, i, fs->block_map); 2229630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown if (retval) 2239630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown return retval; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22527f7a866f5dad2dac82ac04a9fc312308220ba92Jeff Brown return 0; 22627f7a866f5dad2dac82ac04a9fc312308220ba92Jeff Brown} 22727f7a866f5dad2dac82ac04a9fc312308220ba92Jeff Brown 22827f7a866f5dad2dac82ac04a9fc312308220ba92Jeff Brown