• Home
  • Raw
  • Download

Lines Matching refs:block

195 static loff_t sm_mkoffset(struct sm_ftl *ftl, int zone, int block, int boffset)  in sm_mkoffset()  argument
199 WARN_ON(block >= ftl->zone_size); in sm_mkoffset()
202 if (block == -1) in sm_mkoffset()
205 return (zone * SM_MAX_ZONE_SIZE + block) * ftl->block_size + boffset; in sm_mkoffset()
210 int *zone, int *block, int *boffset) in sm_break_offset() argument
213 *block = do_div(offset, ftl->max_lba); in sm_break_offset()
237 int zone, int block, int boffset, in sm_read_sector() argument
247 if (block == -1) { in sm_read_sector()
267 if (zone == 0 && block == ftl->cis_block && boffset == in sm_read_sector()
278 ret = mtd_read_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops); in sm_read_sector()
283 block, zone, ret); in sm_read_sector()
301 " as bad" , block, zone); in sm_read_sector()
310 block, zone); in sm_read_sector()
319 int zone, int block, int boffset, in sm_write_sector() argument
328 if (zone == 0 && (block == ftl->cis_block || block == 0)) { in sm_write_sector()
343 ret = mtd_write_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops); in sm_write_sector()
349 block, zone, ret); in sm_write_sector()
366 int zone, int block, int lba, in sm_write_block() argument
401 if (!sm_write_sector(ftl, zone, block, boffset, in sm_write_block()
413 if (sm_erase_block(ftl, zone, block, 0)) in sm_write_block()
419 sm_mark_block_bad(ftl, zone, block); in sm_write_block()
428 static void sm_mark_block_bad(struct sm_ftl *ftl, int zone, int block) in sm_mark_block_bad() argument
442 sm_printk("marking block %d of zone %d as bad", block, zone); in sm_mark_block_bad()
448 sm_write_sector(ftl, zone, block, boffset, NULL, &oob); in sm_mark_block_bad()
455 static int sm_erase_block(struct sm_ftl *ftl, int zone_num, uint16_t block, in sm_erase_block() argument
464 erase.addr = sm_mkoffset(ftl, zone_num, block, 0); in sm_erase_block()
473 if (zone_num == 0 && (block == ftl->cis_block || block == 0)) { in sm_erase_block()
480 block, zone_num); in sm_erase_block()
489 block, zone_num); in sm_erase_block()
495 (const unsigned char *)&block, sizeof(block)); in sm_erase_block()
499 sm_mark_block_bad(ftl, zone_num, block); in sm_erase_block()
510 static int sm_check_block(struct sm_ftl *ftl, int zone, int block) in sm_check_block() argument
526 if (sm_read_sector(ftl, zone, block, boffset, NULL, &oob)) in sm_check_block()
541 sm_erase_block(ftl, zone, block, 1); in sm_check_block()
689 int block, boffset; in sm_find_cis() local
694 for (block = 0 ; block < ftl->zone_size - ftl->max_lba ; block++) { in sm_find_cis()
696 if (sm_read_sector(ftl, 0, block, 0, NULL, &oob)) in sm_find_cis()
712 if (sm_read_sector(ftl, 0, block, boffset, NULL, &oob)) in sm_find_cis()
723 ftl->cis_block = block; in sm_find_cis()
736 block * ftl->block_size + in sm_find_cis()
762 uint16_t block; in sm_init_zone() local
784 for (block = 0 ; block < ftl->zone_size ; block++) { in sm_init_zone()
787 if (zone_num == 0 && block <= ftl->cis_block) in sm_init_zone()
791 if (sm_read_sector(ftl, zone_num, block, 0, NULL, &oob)) in sm_init_zone()
798 (unsigned char *)&block, 2); in sm_init_zone()
807 dbg("PH %04d <-> <marked bad>", block); in sm_init_zone()
818 dbg("PH %04d <-> LBA %04d(bad)", block, lba); in sm_init_zone()
826 dbg_verbose("PH %04d <-> LBA %04d", block, lba); in sm_init_zone()
827 zone->lba_to_phys_table[lba] = block; in sm_init_zone()
833 lba, zone->lba_to_phys_table[lba], block, zone_num); in sm_init_zone()
836 if (sm_check_block(ftl, zone_num, block)) in sm_init_zone()
842 zone->lba_to_phys_table[lba] = block; in sm_init_zone()
851 sm_erase_block(ftl, zone_num, block, 1); in sm_init_zone()
870 (unsigned char *)&block, 2); in sm_init_zone()
872 kfifo_in(&zone->free_sectors, (const unsigned char *)&block, 2); in sm_init_zone()
1016 int zone_num, block, boffset; in sm_read() local
1018 sm_break_offset(ftl, sect_no << 9, &zone_num, &block, &boffset); in sm_read()
1029 if (ftl->cache_zone == zone_num && ftl->cache_block == block) { in sm_read()
1036 block = zone->lba_to_phys_table[block]; in sm_read()
1038 if (block == -1) { in sm_read()
1043 if (sm_read_sector(ftl, zone_num, block, boffset, buf, NULL)) { in sm_read()
1061 int error = 0, zone_num, block, boffset; in sm_write() local
1064 sm_break_offset(ftl, sec_no << 9, &zone_num, &block, &boffset); in sm_write()
1077 if (ftl->cache_block != block || ftl->cache_zone != zone_num) { in sm_write()
1083 ftl->cache_block = block; in sm_write()