Lines Matching refs:dev
24 ftl_mngt_init_layout(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
26 if (ftl_layout_setup(dev)) {
58 ftl_mngt_init_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
60 struct ftl_layout *layout = &dev->layout;
67 region = ftl_layout_region_get(dev, i);
81 md_flags = is_buffer_needed(i) ? ftl_md_create_region_flags(dev,
83 layout->md[i] = ftl_md_create(dev, region->current.blocks, region->vss_blksz, region->name,
93 region = ftl_layout_region_get(dev, i);
103 md_mirror->dev = md->dev;
109 md_mirror->region = ftl_layout_region_get(dev, region->mirror_type);
119 ftl_mngt_deinit_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
121 struct ftl_layout *layout = &dev->layout;
126 region = ftl_layout_region_get(dev, i);
131 ftl_md_destroy(layout->md[i], ftl_md_destroy_region_flags(dev, region->type));
140 persist_cb(struct spdk_ftl_dev *dev, struct ftl_md *md, int status)
152 persist(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt,
155 struct ftl_layout *layout = &dev->layout;
172 ftl_md_restore_region(struct spdk_ftl_dev *dev, int region_type)
177 status = ftl_nv_cache_load_state(&dev->nv_cache);
180 ftl_valid_map_load_state(dev);
183 status = ftl_bands_load_state(dev);
192 restore_cb(struct spdk_ftl_dev *dev, struct ftl_md *md, int status)
204 status = ftl_md_restore_region(dev, region->type);
214 restore(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt, enum ftl_layout_region_type type)
216 struct ftl_layout *layout = &dev->layout;
231 ftl_mngt_persist_nv_cache_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
233 if (ftl_nv_cache_save_state(&dev->nv_cache)) {
238 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_NVC_MD);
242 ftl_mngt_fast_persist_nv_cache_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
244 if (ftl_nv_cache_save_state(&dev->nv_cache)) {
252 ftl_mngt_persist_vld_map_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
254 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_VALID_MAP);
258 ftl_mngt_persist_p2l_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
274 ftl_mngt_persist_band_info_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
276 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_BAND_MD);
280 ftl_mngt_persist_trim_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
282 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_TRIM_MD);
311 ftl_mngt_persist_super_block(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
313 dev->sb->overprovisioning = dev->conf.overprovisioning;
314 dev->sb->gc_info = dev->sb_shm->gc_info;
315 dev->sb->header.crc = get_sb_crc(dev->sb);
316 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_SB);
355 ftl_mngt_persist_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
376 ftl_mngt_fast_persist_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
382 ftl_mngt_init_default_sb(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
384 struct ftl_superblock *sb = dev->sb;
388 sb->uuid = dev->conf.uuid;
390 dev->sb_shm->shm_clean = false;
396 sb->overprovisioning = dev->conf.overprovisioning;
398 ftl_band_init_gc_iter(dev);
402 spdk_strcpy_pad(sb->base_dev_name, dev->base_type->name,
406 spdk_strcpy_pad(sb->nvc_dev_name, dev->nv_cache.nvc_type->name,
416 ftl_mngt_set_dirty(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
418 struct ftl_superblock *sb = dev->sb;
422 dev->sb_shm->shm_clean = false;
424 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_SB);
428 ftl_mngt_set_clean(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
430 struct ftl_superblock *sb = dev->sb;
433 sb->upgrade_ready = dev->conf.prep_upgrade_on_shutdown;
434 dev->sb_shm->shm_clean = false;
436 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_SB);
438 dev->sb_shm->shm_ready = false;
442 ftl_mngt_set_shm_clean(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
444 struct ftl_superblock *sb = dev->sb;
447 dev->sb_shm->shm_clean = true;
453 ftl_mngt_load_sb(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
455 FTL_NOTICELOG(dev, "SHM: clean %"PRIu64", shm_clean %d\n", dev->sb->clean, dev->sb_shm->shm_clean);
457 if (!ftl_fast_startup(dev)) {
458 restore(dev, mngt, FTL_LAYOUT_REGION_TYPE_SB);
462 FTL_DEBUGLOG(dev, "SHM: found SB\n");
463 if (ftl_md_restore_region(dev, FTL_LAYOUT_REGION_TYPE_SB)) {
471 ftl_mngt_validate_sb(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
473 struct ftl_superblock *sb = dev->sb;
476 FTL_ERRLOG(dev, "Invalid FTL superblock magic\n");
482 FTL_ERRLOG(dev, "Invalid FTL superblock CRC\n");
487 if (ftl_superblock_upgrade(dev)) {
488 FTL_ERRLOG(dev, "FTL superblock dirty or invalid version\n");
493 if (spdk_uuid_compare(&sb->uuid, &dev->conf.uuid) != 0) {
494 FTL_ERRLOG(dev, "Invalid FTL superblock UUID\n");
500 FTL_ERRLOG(dev, "Invalid FTL superblock lba_cnt\n");
504 dev->num_lbas = sb->lba_cnt;
508 FTL_ERRLOG(dev, "Invalid FTL superblock lba_rsvd\n");
512 dev->conf.overprovisioning = sb->overprovisioning;
514 if (!ftl_superblock_validate_blob_area(dev)) {
515 FTL_ERRLOG(dev, "Corrupted FTL superblock blob area\n");
557 ftl_mngt_superblock_init(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
561 struct ftl_layout *layout = &dev->layout;
564 int md_create_flags = ftl_md_create_region_flags(dev, FTL_LAYOUT_REGION_TYPE_SB);
567 if (dev->conf.mode & SPDK_FTL_MODE_CREATE) {
568 spdk_uuid_generate(&dev->conf.uuid);
569 spdk_uuid_fmt_lower(uuid, sizeof(uuid), &dev->conf.uuid);
570 FTL_NOTICELOG(dev, "Create new FTL, UUID %s\n", uuid);
575 dev->sb_shm = NULL;
576 dev->sb_shm_md = ftl_md_create(dev, spdk_divide_round_up(sizeof(*dev->sb_shm), FTL_BLOCK_SIZE),
579 if (dev->sb_shm_md == NULL) {
585 if (dev->sb_shm_md == NULL) {
591 dev->sb_shm = ftl_md_get_buffer(dev->sb_shm_md);
594 if (ftl_layout_setup_superblock(dev)) {
600 layout->md[FTL_LAYOUT_REGION_TYPE_SB] = ftl_md_create(dev, region->current.blocks,
607 ftl_md_destroy(dev->sb_shm_md, 0);
608 dev->sb_shm_md = NULL;
609 if (ftl_layout_clear_superblock(dev)) {
620 dev->sb = ftl_md_get_buffer(layout->md[FTL_LAYOUT_REGION_TYPE_SB]);
624 layout->md[FTL_LAYOUT_REGION_TYPE_SB_BASE] = ftl_md_create(dev, region->current.blocks,
635 md_mirror->dev = md->dev;
641 if (dev->conf.mode & SPDK_FTL_MODE_CREATE) {
649 ftl_mngt_superblock_deinit(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
651 struct ftl_layout *layout = &dev->layout;
655 ftl_md_destroy_region_flags(dev, FTL_LAYOUT_REGION_TYPE_SB));
664 ftl_md_destroy(dev->sb_shm_md, ftl_md_destroy_shm_flags(dev));
665 dev->sb_shm_md = NULL;
666 dev->sb_shm = NULL;
672 ftl_mngt_restore_nv_cache_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
674 if (ftl_fast_startup(dev)) {
675 FTL_DEBUGLOG(dev, "SHM: found nv cache md\n");
676 if (ftl_md_restore_region(dev, FTL_LAYOUT_REGION_TYPE_NVC_MD)) {
683 restore(dev, mngt, FTL_LAYOUT_REGION_TYPE_NVC_MD);
687 ftl_mngt_restore_vld_map_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
689 if (ftl_fast_startup(dev)) {
690 FTL_DEBUGLOG(dev, "SHM: found vldmap\n");
691 if (ftl_md_restore_region(dev, FTL_LAYOUT_REGION_TYPE_VALID_MAP)) {
698 restore(dev, mngt, FTL_LAYOUT_REGION_TYPE_VALID_MAP);
702 ftl_mngt_restore_band_info_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
704 if (ftl_fast_startup(dev)) {
705 FTL_DEBUGLOG(dev, "SHM: found band md\n");
706 if (ftl_md_restore_region(dev, FTL_LAYOUT_REGION_TYPE_BAND_MD)) {
713 restore(dev, mngt, FTL_LAYOUT_REGION_TYPE_BAND_MD);
717 ftl_mngt_restore_trim_metadata(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
719 if (ftl_fast_startup(dev)) {
720 FTL_DEBUGLOG(dev, "SHM: found trim md\n");
721 if (ftl_md_restore_region(dev, FTL_LAYOUT_REGION_TYPE_TRIM_MD)) {
728 restore(dev, mngt, FTL_LAYOUT_REGION_TYPE_TRIM_MD);
758 ftl_mngt_restore_md(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
764 ftl_mngt_persist_superblock(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
766 dev->sb->header.crc = get_sb_crc(dev->sb);
767 persist(dev, mngt, FTL_LAYOUT_REGION_TYPE_SB);