Lines Matching refs:dev
24 return ftl_get_num_blocks_in_band(band->dev) - in ftl_band_tail_md_offset()
25 ftl_tail_md_num_blocks(band->dev); in ftl_band_tail_md_offset()
37 struct spdk_ftl_dev *dev = band->dev; in ftl_band_free_p2l_map() local
46 ftl_mempool_put(dev->p2l_pool, p2l_map->band_map); in ftl_band_free_p2l_map()
54 struct spdk_ftl_dev *dev = band->dev; in ftl_band_free_md_entry() local
61 ftl_mempool_put(dev->band_md_pool, p2l_map->band_dma_md); in ftl_band_free_md_entry()
68 struct spdk_ftl_dev *dev = band->dev; in _ftl_band_set_free() local
71 TAILQ_INSERT_TAIL(&dev->free_bands, band, queue_entry); in _ftl_band_set_free()
75 dev->num_free++; in _ftl_band_set_free()
76 ftl_apply_limits(dev); in _ftl_band_set_free()
84 struct spdk_ftl_dev *dev = band->dev; in _ftl_band_set_preparing() local
87 TAILQ_REMOVE(&dev->free_bands, band, queue_entry); in _ftl_band_set_preparing()
91 assert(dev->num_free > 0); in _ftl_band_set_preparing()
92 dev->num_free--; in _ftl_band_set_preparing()
94 ftl_apply_limits(dev); in _ftl_band_set_preparing()
100 struct spdk_ftl_dev *dev = band->dev; in _ftl_band_set_closed_cb() local
116 TAILQ_INSERT_TAIL(&dev->shut_bands, band, queue_entry); in _ftl_band_set_closed_cb()
132 assert(ftl_band_tail_md_offset(band) % band->dev->xfer_size == 0); in ftl_band_tail_md_addr()
186 FTL_ERRLOG(band->dev, "Unknown band state, %u", state); in ftl_band_set_state()
224 ftl_bitmap_set(band->dev->valid_map, addr); in ftl_band_set_addr()
242 return ftl_get_num_blocks_in_band(band->dev) - in ftl_band_user_blocks()
243 ftl_tail_md_num_blocks(band->dev); in ftl_band_user_blocks()
247 ftl_addr_get_band(const struct spdk_ftl_dev *dev, ftl_addr addr) in ftl_addr_get_band() argument
249 return (addr - dev->bands->start_addr) / ftl_get_num_blocks_in_band(dev); in ftl_addr_get_band()
253 ftl_band_from_addr(struct spdk_ftl_dev *dev, ftl_addr addr) in ftl_band_from_addr() argument
255 uint64_t band_id = ftl_addr_get_band(dev, addr); in ftl_band_from_addr()
257 assert(band_id < ftl_get_num_bands(dev)); in ftl_band_from_addr()
258 return &dev->bands[band_id]; in ftl_band_from_addr()
264 assert(ftl_addr_get_band(band->dev, addr) == band->id); in ftl_band_block_offset_from_addr()
271 struct spdk_ftl_dev *dev = band->dev; in ftl_band_next_xfer_addr() local
275 assert(ftl_addr_get_band(dev, addr) == band->id); in ftl_band_next_xfer_addr()
282 num_blocks += (offset % dev->xfer_size); in ftl_band_next_xfer_addr()
283 offset -= (offset % dev->xfer_size); in ftl_band_next_xfer_addr()
286 num_xfers = (num_blocks / dev->xfer_size); in ftl_band_next_xfer_addr()
287 offset += num_xfers * dev->xfer_size; in ftl_band_next_xfer_addr()
288 num_blocks -= num_xfers * dev->xfer_size; in ftl_band_next_xfer_addr()
290 if (offset > ftl_get_num_blocks_in_band(dev)) { in ftl_band_next_xfer_addr()
298 if (offset > ftl_get_num_blocks_in_band(dev)) { in ftl_band_next_xfer_addr()
334 struct spdk_ftl_dev *dev = band->dev; in ftl_band_alloc_md_entry() local
336 struct ftl_layout_region *region = ftl_layout_region_get(dev, FTL_LAYOUT_REGION_TYPE_BAND_MD); in ftl_band_alloc_md_entry()
338 p2l_map->band_dma_md = ftl_mempool_get(dev->band_md_pool); in ftl_band_alloc_md_entry()
351 struct spdk_ftl_dev *dev = band->dev; in ftl_band_alloc_p2l_map() local
358 p2l_map->band_map = ftl_mempool_get(dev->p2l_pool); in ftl_band_alloc_p2l_map()
368 band->md->df_p2l_map = ftl_mempool_get_df_obj_id(dev->p2l_pool, p2l_map->band_map); in ftl_band_alloc_p2l_map()
371 memset(p2l_map->band_map, -1, FTL_BLOCK_SIZE * ftl_p2l_map_num_blocks(band->dev)); in ftl_band_alloc_p2l_map()
380 struct spdk_ftl_dev *dev = band->dev; in ftl_band_open_p2l_map() local
393 p2l_map->band_map = ftl_mempool_claim_df(dev->p2l_pool, band->md->df_p2l_map); in ftl_band_open_p2l_map()
410 ftl_p2l_ckpt_release(band->dev, p2l_map->p2l_ckpt); in ftl_band_release_p2l_map()
427 struct spdk_ftl_dev *dev = band->dev; in ftl_band_write_prep() local
433 band->p2l_map.p2l_ckpt = ftl_p2l_ckpt_acquire(dev); in ftl_band_write_prep()
437 band->md->seq = ftl_get_next_seq_id(dev); in ftl_band_write_prep()
439 FTL_DEBUGLOG(dev, "Band to write, id %u seq %"PRIu64"\n", band->id, band->md->seq); in ftl_band_write_prep()
444 ftl_p2l_map_pool_elem_size(struct spdk_ftl_dev *dev) in ftl_p2l_map_pool_elem_size() argument
447 return ftl_tail_md_num_blocks(dev) * FTL_BLOCK_SIZE; in ftl_p2l_map_pool_elem_size()
460 dump_bands_under_relocation(struct spdk_ftl_dev *dev) in dump_bands_under_relocation() argument
462 uint64_t i = dev->sb_shm->gc_info.current_band_id; in dump_bands_under_relocation()
463 uint64_t end = dev->sb_shm->gc_info.current_band_id + dev->num_logical_bands_in_physical; in dump_bands_under_relocation()
466 struct ftl_band *band = &dev->bands[i]; in dump_bands_under_relocation()
468 FTL_DEBUGLOG(dev, "Band, id %u, phys_is %u, wr cnt = %u, invalidity = %u%%\n", in dump_bands_under_relocation()
491 get_band_phys_info(struct spdk_ftl_dev *dev, uint64_t phys_id, in get_band_phys_info() argument
495 uint64_t band_id = phys_id * dev->num_logical_bands_in_physical; in get_band_phys_info()
498 for (; band_id < ftl_get_num_bands(dev); band_id++) { in get_band_phys_info()
499 band = &dev->bands[band_id]; in get_band_phys_info()
514 *invalidity /= dev->num_logical_bands_in_physical; in get_band_phys_info()
515 *wr_cnt /= dev->num_logical_bands_in_physical; in get_band_phys_info()
547 band_start_gc(struct spdk_ftl_dev *dev, struct ftl_band *band) in band_start_gc() argument
551 TAILQ_REMOVE(&dev->shut_bands, band, queue_entry); in band_start_gc()
554 FTL_DEBUGLOG(dev, "Band to GC, id %u\n", band->id); in band_start_gc()
558 gc_high_priority_band(struct spdk_ftl_dev *dev) in gc_high_priority_band() argument
561 uint64_t high_prio_id = dev->sb_shm->gc_info.band_id_high_prio; in gc_high_priority_band()
564 ftl_bug(high_prio_id >= dev->num_bands); in gc_high_priority_band()
566 band = &dev->bands[high_prio_id]; in gc_high_priority_band()
567 dev->sb_shm->gc_info.band_id_high_prio = FTL_BAND_ID_INVALID; in gc_high_priority_band()
569 band_start_gc(dev, band); in gc_high_priority_band()
570 FTL_NOTICELOG(dev, "GC takes high priority band, id %u\n", band->id); in gc_high_priority_band()
578 ftl_band_reset_gc_iter(struct spdk_ftl_dev *dev) in ftl_band_reset_gc_iter() argument
580 dev->sb->gc_info.is_valid = 0; in ftl_band_reset_gc_iter()
581 dev->sb->gc_info.current_band_id = FTL_BAND_ID_INVALID; in ftl_band_reset_gc_iter()
582 dev->sb->gc_info.band_id_high_prio = FTL_BAND_ID_INVALID; in ftl_band_reset_gc_iter()
583 dev->sb->gc_info.band_phys_id = FTL_BAND_PHYS_ID_INVALID; in ftl_band_reset_gc_iter()
585 dev->sb_shm->gc_info = dev->sb->gc_info; in ftl_band_reset_gc_iter()
589 ftl_band_search_next_to_reloc(struct spdk_ftl_dev *dev) in ftl_band_search_next_to_reloc() argument
598 band = gc_high_priority_band(dev); in ftl_band_search_next_to_reloc()
603 phys_count = dev->num_logical_bands_in_physical; in ftl_band_search_next_to_reloc()
604 band_count = ftl_get_num_bands(dev); in ftl_band_search_next_to_reloc()
606 for (; dev->sb_shm->gc_info.current_band_id < band_count;) { in ftl_band_search_next_to_reloc()
607 band = &dev->bands[dev->sb_shm->gc_info.current_band_id]; in ftl_band_search_next_to_reloc()
608 if (band->phys_id != dev->sb_shm->gc_info.band_phys_id) { in ftl_band_search_next_to_reloc()
613 dev->sb_shm->gc_info.current_band_id++; in ftl_band_search_next_to_reloc()
617 band_start_gc(dev, band); in ftl_band_search_next_to_reloc()
622 band = &dev->bands[i]; in ftl_band_search_next_to_reloc()
625 get_band_phys_info(dev, band->phys_id, &invalidity, &wr_cnt); in ftl_band_search_next_to_reloc()
642 FTL_DEBUGLOG(dev, "Band physical id %"PRIu64" to GC\n", phys_id); in ftl_band_search_next_to_reloc()
643 dev->sb_shm->gc_info.is_valid = 0; in ftl_band_search_next_to_reloc()
644 dev->sb_shm->gc_info.current_band_id = phys_id * phys_count; in ftl_band_search_next_to_reloc()
645 dev->sb_shm->gc_info.band_phys_id = phys_id; in ftl_band_search_next_to_reloc()
646 dev->sb_shm->gc_info.is_valid = 1; in ftl_band_search_next_to_reloc()
647 dump_bands_under_relocation(dev); in ftl_band_search_next_to_reloc()
648 return ftl_band_search_next_to_reloc(dev); in ftl_band_search_next_to_reloc()
650 ftl_band_reset_gc_iter(dev); in ftl_band_search_next_to_reloc()
657 ftl_band_init_gc_iter(struct spdk_ftl_dev *dev) in ftl_band_init_gc_iter() argument
659 if (dev->conf.mode & SPDK_FTL_MODE_CREATE) { in ftl_band_init_gc_iter()
660 ftl_band_reset_gc_iter(dev); in ftl_band_init_gc_iter()
664 if (dev->sb->clean) { in ftl_band_init_gc_iter()
665 dev->sb_shm->gc_info = dev->sb->gc_info; in ftl_band_init_gc_iter()
669 if (ftl_fast_startup(dev) || ftl_fast_recovery(dev)) { in ftl_band_init_gc_iter()
674 ftl_band_reset_gc_iter(dev); in ftl_band_init_gc_iter()
678 ftl_valid_map_load_state(struct spdk_ftl_dev *dev) in ftl_valid_map_load_state() argument
683 for (i = 0; i < dev->num_bands; i++) { in ftl_valid_map_load_state()
684 band = &dev->bands[i]; in ftl_valid_map_load_state()
693 TAILQ_REMOVE(&band->dev->shut_bands, band, queue_entry); in ftl_band_initialize_free_state()
698 ftl_bands_load_state(struct spdk_ftl_dev *dev) in ftl_bands_load_state() argument
703 for (i = 0; i < dev->num_bands; i++) { in ftl_bands_load_state()
704 band = &dev->bands[i]; in ftl_bands_load_state()
707 FTL_ERRLOG(dev, "Invalid band version detected, %"PRIu64" (expected %d)\n", in ftl_bands_load_state()