Lines Matching refs:dev

14 	struct spdk_ftl_dev *dev = band->dev;  in ftl_band_init_md()  local
16 struct ftl_md *band_info_md = dev->layout.md[FTL_LAYOUT_REGION_TYPE_BAND_MD]; in ftl_band_init_md()
17 struct ftl_md *valid_map_md = dev->layout.md[FTL_LAYOUT_REGION_TYPE_VALID_MAP]; in ftl_band_init_md()
18 uint64_t band_num_blocks = ftl_get_num_blocks_in_band(band->dev); in ftl_band_init_md()
23 FTL_ERRLOG(dev, "The number of blocks in band is not divisible by bitmap word bits\n"); in ftl_band_init_md()
36 if (!ftl_fast_startup(dev)) { in ftl_band_init_md()
44 ftl_dev_init_bands(struct spdk_ftl_dev *dev) in ftl_dev_init_bands() argument
50 blocks = spdk_bdev_get_num_blocks(spdk_bdev_desc_get_bdev(dev->base_bdev_desc)); in ftl_dev_init_bands()
51 dev->num_bands = blocks / ftl_get_num_blocks_in_band(dev); in ftl_dev_init_bands()
54 md_blocks = ftl_layout_base_md_blocks(dev); in ftl_dev_init_bands()
55 md_bands = spdk_divide_round_up(md_blocks, dev->num_blocks_in_band); in ftl_dev_init_bands()
57 if (dev->num_bands > md_bands) { in ftl_dev_init_bands()
59 dev->num_bands -= md_bands; in ftl_dev_init_bands()
61 FTL_ERRLOG(dev, "Base device too small to store metadata\n"); in ftl_dev_init_bands()
65 TAILQ_INIT(&dev->free_bands); in ftl_dev_init_bands()
66 TAILQ_INIT(&dev->shut_bands); in ftl_dev_init_bands()
68 dev->num_free = 0; in ftl_dev_init_bands()
69 dev->bands = calloc(ftl_get_num_bands(dev), sizeof(*dev->bands)); in ftl_dev_init_bands()
70 if (!dev->bands) { in ftl_dev_init_bands()
74 for (i = 0; i < ftl_get_num_bands(dev); ++i) { in ftl_dev_init_bands()
75 band = &dev->bands[i]; in ftl_dev_init_bands()
77 band->dev = dev; in ftl_dev_init_bands()
80 TAILQ_INSERT_TAIL(&dev->shut_bands, band, queue_entry); in ftl_dev_init_bands()
87 ftl_dev_init_bands_md(struct spdk_ftl_dev *dev) in ftl_dev_init_bands_md() argument
92 for (i = 0; i < ftl_get_num_bands(dev); ++i) { in ftl_dev_init_bands_md()
93 rc = ftl_band_init_md(&dev->bands[i]); in ftl_dev_init_bands_md()
95 FTL_ERRLOG(dev, "Failed to initialize metadata structures for band [%lu]\n", i); in ftl_dev_init_bands_md()
104 ftl_dev_deinit_bands(struct spdk_ftl_dev *dev) in ftl_dev_deinit_bands() argument
106 free(dev->bands); in ftl_dev_deinit_bands()
110 ftl_dev_deinit_bands_md(struct spdk_ftl_dev *dev) in ftl_dev_deinit_bands_md() argument
112 if (dev->bands) { in ftl_dev_deinit_bands_md()
114 for (i = 0; i < dev->num_bands; ++i) { in ftl_dev_deinit_bands_md()
115 struct ftl_band *band = &dev->bands[i]; in ftl_dev_deinit_bands_md()
126 ftl_mngt_init_bands(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_init_bands() argument
128 if (ftl_dev_init_bands(dev)) { in ftl_mngt_init_bands()
136 ftl_mngt_init_bands_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_init_bands_md() argument
138 if (ftl_dev_init_bands_md(dev)) { in ftl_mngt_init_bands_md()
146 ftl_mngt_deinit_bands(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_deinit_bands() argument
148 ftl_dev_deinit_bands(dev); in ftl_mngt_deinit_bands()
153 ftl_mngt_deinit_bands_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_deinit_bands_md() argument
155 ftl_dev_deinit_bands_md(dev); in ftl_mngt_deinit_bands_md()
166 decorate_bands(struct spdk_ftl_dev *dev) in decorate_bands() argument
171 uint64_t num_blocks_in_band = ftl_get_num_blocks_in_band(dev); in decorate_bands()
177 num_blocks = spdk_bdev_get_num_blocks(spdk_bdev_desc_get_bdev(dev->base_bdev_desc)); in decorate_bands()
185 num_to_drop = ftl_get_num_bands(dev) % num_logical_in_phys; in decorate_bands()
188 while (i < ftl_get_num_bands(dev) - num_to_drop) { in decorate_bands()
189 band = &dev->bands[i]; in decorate_bands()
199 num_bands = ftl_get_num_bands(dev); in decorate_bands()
201 band = &dev->bands[i]; in decorate_bands()
202 dev->num_bands--; in decorate_bands()
203 TAILQ_REMOVE(&dev->shut_bands, band, queue_entry); in decorate_bands()
207 dev->num_logical_bands_in_physical = num_logical_in_phys; in decorate_bands()
211 ftl_mngt_decorate_bands(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_decorate_bands() argument
213 decorate_bands(dev); in ftl_mngt_decorate_bands()
218 ftl_mngt_initialize_band_address(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_initialize_band_address() argument
221 struct ftl_md *data_md = dev->layout.md[FTL_LAYOUT_REGION_TYPE_DATA_BASE]; in ftl_mngt_initialize_band_address()
224 for (i = 0; i < ftl_get_num_bands(dev); i++) { in ftl_mngt_initialize_band_address()
225 band = &dev->bands[i]; in ftl_mngt_initialize_band_address()
226 band->start_addr = data_md->region->current.offset + i * dev->num_blocks_in_band; in ftl_mngt_initialize_band_address()
234 ftl_recover_max_seq(struct spdk_ftl_dev *dev) in ftl_recover_max_seq() argument
241 TAILQ_FOREACH(band, &dev->shut_bands, queue_entry) { in ftl_recover_max_seq()
245 ftl_nv_cache_get_max_seq_id(&dev->nv_cache, &chunk_open_seq_id, &chunk_close_seq_id); in ftl_recover_max_seq()
248 dev->nv_cache.last_seq_id = chunk_close_seq_id; in ftl_recover_max_seq()
249 dev->writer_gc.last_seq_id = band_close_seq_id; in ftl_recover_max_seq()
250 dev->writer_user.last_seq_id = band_close_seq_id; in ftl_recover_max_seq()
257 dev->sb->seq_id = max; in ftl_recover_max_seq()
272 next_high_prio_band(struct spdk_ftl_dev *dev) in next_high_prio_band() argument
277 TAILQ_FOREACH(band, &dev->shut_bands, queue_entry) { in next_high_prio_band()
288 finalize_init_gc(struct spdk_ftl_dev *dev) in finalize_init_gc() argument
293 ftl_band_init_gc_iter(dev); in finalize_init_gc()
294 dev->sb_shm->gc_info.band_id_high_prio = FTL_BAND_ID_INVALID; in finalize_init_gc()
296 if (0 == dev->num_free) { in finalize_init_gc()
298 free_blocks = ftl_writer_get_free_blocks(&dev->writer_gc); in finalize_init_gc()
303 band = ftl_band_search_next_to_reloc(dev); in finalize_init_gc()
315 band = next_high_prio_band(dev); in finalize_init_gc()
319 FTL_ERRLOG(dev, "CRITICAL ERROR, no more free bands and cannot start\n"); in finalize_init_gc()
323 dev->sb_shm->gc_info.band_id_high_prio = band->id; in finalize_init_gc()
331 ftl_property_dump_base_dev(struct spdk_ftl_dev *dev, const struct ftl_property *property, in ftl_property_dump_base_dev() argument
338 for (i = 0, band = dev->bands; i < ftl_get_num_bands(dev); i++, band++) { in ftl_property_dump_base_dev()
349 ftl_mngt_finalize_init_bands(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) in ftl_mngt_finalize_init_bands() argument
355 bool fast_startup = ftl_fast_startup(dev); in ftl_mngt_finalize_init_bands()
357 ftl_recover_max_seq(dev); in ftl_mngt_finalize_init_bands()
358 ftl_property_register(dev, "base_device", NULL, 0, NULL, NULL, ftl_property_dump_base_dev, NULL, in ftl_mngt_finalize_init_bands()
361 TAILQ_FOREACH_SAFE(band, &dev->free_bands, queue_entry, temp_band) { in ftl_mngt_finalize_init_bands()
365 TAILQ_FOREACH_SAFE(band, &dev->shut_bands, queue_entry, temp_band) { in ftl_mngt_finalize_init_bands()
368 TAILQ_REMOVE(&dev->shut_bands, band, queue_entry); in ftl_mngt_finalize_init_bands()
374 if (dev->conf.mode & SPDK_FTL_MODE_CREATE) { in ftl_mngt_finalize_init_bands()
375 TAILQ_REMOVE(&dev->shut_bands, band, queue_entry); in ftl_mngt_finalize_init_bands()
393 writer = &dev->writer_user; in ftl_mngt_finalize_init_bands()
395 writer = &dev->writer_gc; in ftl_mngt_finalize_init_bands()
414 FTL_NOTICELOG(dev, "SHM: band open P2L map df_id 0x%"PRIx64"\n", band->md->df_p2l_map); in ftl_mngt_finalize_init_bands()
424 } else if (dev->sb->clean) { in ftl_mngt_finalize_init_bands()
443 ftl_mempool_initialize_ext(dev->p2l_pool); in ftl_mngt_finalize_init_bands()
448 dev->num_free = 0; in ftl_mngt_finalize_init_bands()
449 TAILQ_FOREACH(band, &dev->free_bands, queue_entry) { in ftl_mngt_finalize_init_bands()
451 dev->num_free++; in ftl_mngt_finalize_init_bands()
453 ftl_apply_limits(dev); in ftl_mngt_finalize_init_bands()
455 if ((num_shut + num_open + dev->num_free) != ftl_get_num_bands(dev)) { in ftl_mngt_finalize_init_bands()
456 FTL_ERRLOG(dev, "ERROR, band list inconsistent state\n"); in ftl_mngt_finalize_init_bands()
461 if (finalize_init_gc(dev)) { in ftl_mngt_finalize_init_bands()