/* allocate a block and return its block number. * returns negative value on error. */ int testfs_alloc_block(struct super_block *sb, char *block) { int phy_block_nr; phy_block_nr = testfs_get_block_freemap(sb); // if error occurred, return -ENOSPC if (phy_block_nr < 0) return phy_block_nr; _bzero(block, BLOCK_SIZE); return sb->sb.data_blocks_start + phy_block_nr; }
int testfs_alloc_block(struct super_block *sb) { int phy_block_nr; /* file system size is limited to max_fs_blocks */ if (sb->sb.used_block_count >= sb->sb.max_fs_blocks) return -ENOSPC; phy_block_nr = testfs_get_block_freemap(sb); if (phy_block_nr < 0) return phy_block_nr; sb->sb.used_block_count++; testfs_write_super_block(sb); return sb->sb.data_blocks_start + phy_block_nr; }