Lines Matching refs:block
56 struct block { struct
87 struct block *blocks;
94 struct block *block = &part->blocks[block_no]; in build_block_map() local
97 block->offset = part->block_size * block_no; in build_block_map()
100 block->state = BLOCK_UNUSED; in build_block_map()
104 block->state = BLOCK_OK; in build_block_map()
115 block->free_sectors++; in build_block_map()
138 part->sector_map[entry] = block->offset + in build_block_map()
141 block->used_sectors++; in build_block_map()
144 if (block->free_sectors == part->data_sectors_per_block) in build_block_map()
187 part->blocks = kcalloc(part->total_blocks, sizeof(struct block), in scan_header()
270 static int erase_block(struct partition *part, int block) in erase_block() argument
279 erase->addr = part->blocks[block].offset; in erase_block()
282 part->blocks[block].state = BLOCK_ERASING; in erase_block()
283 part->blocks[block].free_sectors = 0; in erase_block()
290 part->blocks[block].state = BLOCK_FAILED; in erase_block()
291 part->blocks[block].free_sectors = 0; in erase_block()
292 part->blocks[block].used_sectors = 0; in erase_block()
297 part->blocks[block].state = BLOCK_ERASED; in erase_block()
298 part->blocks[block].free_sectors = part->data_sectors_per_block; in erase_block()
299 part->blocks[block].used_sectors = 0; in erase_block()
300 part->blocks[block].erases++; in erase_block()
302 rc = mtd_write(part->mbd.mtd, part->blocks[block].offset, in erase_block()
309 part->mbd.mtd->name, part->blocks[block].offset); in erase_block()
310 part->blocks[block].state = BLOCK_FAILED; in erase_block()
312 part->blocks[block].state = BLOCK_OK; in erase_block()
411 int block, best_block, score, old_sector_block; in reclaim_block() local
424 for (block=0; block<part->total_blocks; block++) { in reclaim_block()
427 if (block == part->reserved_block) in reclaim_block()
435 if (part->blocks[block].free_sectors) in reclaim_block()
438 this_score = part->blocks[block].used_sectors; in reclaim_block()
440 if (block == old_sector_block) in reclaim_block()
444 if (part->blocks[block].used_sectors == in reclaim_block()
449 this_score += part->blocks[block].erases; in reclaim_block()
452 best_block = block; in reclaim_block()
483 int block, stop; in find_free_block() local
485 block = part->current_block == -1 ? in find_free_block()
487 stop = block; in find_free_block()
490 if (part->blocks[block].free_sectors && in find_free_block()
491 block != part->reserved_block) in find_free_block()
492 return block; in find_free_block()
494 if (part->blocks[block].state == BLOCK_UNUSED) in find_free_block()
495 erase_block(part, block); in find_free_block()
497 if (++block >= part->total_blocks) in find_free_block()
498 block = 0; in find_free_block()
500 } while (block != stop); in find_free_block()
507 int rc, block; in find_writable_block() local
510 block = find_free_block(part); in find_writable_block()
512 if (block == -1) { in find_writable_block()
518 block = find_free_block(part); in find_writable_block()
521 if (block == -1) { in find_writable_block()
527 rc = mtd_read(part->mbd.mtd, part->blocks[block].offset, in find_writable_block()
537 part->blocks[block].offset); in find_writable_block()
541 part->current_block = block; in find_writable_block()
549 int block, offset, rc; in mark_sector_deleted() local
554 block = old_addr / part->block_size; in mark_sector_deleted()
558 addr = part->blocks[block].offset + in mark_sector_deleted()
571 if (block == part->current_block) in mark_sector_deleted()
574 part->blocks[block].used_sectors--; in mark_sector_deleted()
576 if (!part->blocks[block].used_sectors && in mark_sector_deleted()
577 !part->blocks[block].free_sectors) in mark_sector_deleted()
578 rc = erase_block(part, block); in mark_sector_deleted()
584 static int find_free_sector(const struct partition *part, const struct block *block) in find_free_sector() argument
588 i = stop = part->data_sectors_per_block - block->free_sectors; in find_free_sector()
606 struct block *block; in do_writesect() local
621 block = &part->blocks[part->current_block]; in do_writesect()
623 i = find_free_sector(part, block); in do_writesect()
631 block->offset; in do_writesect()
650 addr = block->offset + (HEADER_MAP_OFFSET + i) * sizeof(u16); in do_writesect()
662 block->used_sectors++; in do_writesect()
663 block->free_sectors--; in do_writesect()