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()
326 static int erase_block(struct partition *part, int block) in erase_block() argument
337 erase->addr = part->blocks[block].offset; in erase_block()
341 part->blocks[block].state = BLOCK_ERASING; in erase_block()
342 part->blocks[block].free_sectors = 0; in erase_block()
447 int block, best_block, score, old_sector_block; in reclaim_block() local
460 for (block=0; block<part->total_blocks; block++) { in reclaim_block()
463 if (block == part->reserved_block) in reclaim_block()
471 if (part->blocks[block].free_sectors) in reclaim_block()
474 this_score = part->blocks[block].used_sectors; in reclaim_block()
476 if (block == old_sector_block) in reclaim_block()
480 if (part->blocks[block].used_sectors == in reclaim_block()
485 this_score += part->blocks[block].erases; in reclaim_block()
488 best_block = block; in reclaim_block()
519 int block, stop; in find_free_block() local
521 block = part->current_block == -1 ? in find_free_block()
523 stop = block; in find_free_block()
526 if (part->blocks[block].free_sectors && in find_free_block()
527 block != part->reserved_block) in find_free_block()
528 return block; in find_free_block()
530 if (part->blocks[block].state == BLOCK_UNUSED) in find_free_block()
531 erase_block(part, block); in find_free_block()
533 if (++block >= part->total_blocks) in find_free_block()
534 block = 0; in find_free_block()
536 } while (block != stop); in find_free_block()
543 int rc, block; in find_writable_block() local
546 block = find_free_block(part); in find_writable_block()
548 if (block == -1) { in find_writable_block()
554 block = find_free_block(part); in find_writable_block()
557 if (block == -1) { in find_writable_block()
563 rc = mtd_read(part->mbd.mtd, part->blocks[block].offset, in find_writable_block()
573 part->blocks[block].offset); in find_writable_block()
577 part->current_block = block; in find_writable_block()
585 int block, offset, rc; in mark_sector_deleted() local
590 block = old_addr / part->block_size; in mark_sector_deleted()
594 addr = part->blocks[block].offset + in mark_sector_deleted()
607 if (block == part->current_block) in mark_sector_deleted()
610 part->blocks[block].used_sectors--; in mark_sector_deleted()
612 if (!part->blocks[block].used_sectors && in mark_sector_deleted()
613 !part->blocks[block].free_sectors) in mark_sector_deleted()
614 rc = erase_block(part, block); in mark_sector_deleted()
620 static int find_free_sector(const struct partition *part, const struct block *block) in find_free_sector() argument
624 i = stop = part->data_sectors_per_block - block->free_sectors; in find_free_sector()
642 struct block *block; in do_writesect() local
657 block = &part->blocks[part->current_block]; in do_writesect()
659 i = find_free_sector(part, block); in do_writesect()
667 block->offset; in do_writesect()
686 addr = block->offset + (HEADER_MAP_OFFSET + i) * sizeof(u16); in do_writesect()
698 block->used_sectors++; in do_writesect()
699 block->free_sectors--; in do_writesect()