Lines Matching defs:dev

17 typedef size_t (*blob_store_fn)(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_buf_sz);
18 typedef int (*blob_load_fn)(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_sz);
35 ftl_superblock_v5_validate_blob_area(struct spdk_ftl_dev *dev)
37 union ftl_superblock_ver *sb_ver = (union ftl_superblock_ver *)dev->sb;
45 sb_blob_store(struct spdk_ftl_dev *dev, struct ftl_superblock_v5_md_blob_hdr *sb_blob_hdr,
48 struct ftl_superblock_v5 *sb = (struct ftl_superblock_v5 *)dev->sb;
62 blob_sz = blob_store(dev, sb_blob_area, blob_sz);
69 base_blob_store(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_buf_sz)
71 return ftl_layout_tracker_bdev_blob_store(dev->base_layout_tracker, blob_buf, blob_buf_sz);
75 nvc_blob_store(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_buf_sz)
77 return ftl_layout_tracker_bdev_blob_store(dev->nvc_layout_tracker, blob_buf, blob_buf_sz);
81 ftl_superblock_v5_store_blob_area(struct spdk_ftl_dev *dev)
83 struct ftl_superblock_v5 *sb = (struct ftl_superblock_v5 *)dev->sb;
89 spdk_strcpy_pad(sb->nvc_dev_name, dev->nv_cache.nvc_type->name,
91 blob_sz = sb_blob_store(dev, &sb->md_layout_nvc, nvc_blob_store, sb_blob_area);
92 FTL_NOTICELOG(dev, "nvc layout blob store 0x%"PRIx64" bytes\n", blob_sz);
97 /* Store the base dev-backed FTL MD layout info */
99 spdk_strcpy_pad(sb->base_dev_name, dev->base_type->name, SPDK_COUNTOF(sb->base_dev_name), '\0');
100 blob_sz = sb_blob_store(dev, &sb->md_layout_base, base_blob_store, sb_blob_area);
101 FTL_NOTICELOG(dev, "base layout blob store 0x%"PRIx64" bytes\n", blob_sz);
108 blob_sz = sb_blob_store(dev, &sb->layout_params, ftl_layout_blob_store, sb_blob_area);
109 FTL_NOTICELOG(dev, "layout blob store 0x%"PRIx64" bytes\n", blob_sz);
122 sb_md_layout_find_oldest_region(struct spdk_ftl_dev *dev,
153 sb_md_layout_find_latest_region(struct spdk_ftl_dev *dev,
184 sb_md_layout_find_region_version(struct spdk_ftl_dev *dev,
208 struct spdk_ftl_dev *dev, struct ftl_layout_tracker_bdev *layout_tracker,
212 sb_md_layout_find_region(struct spdk_ftl_dev *dev, enum ftl_layout_region_type reg_type,
216 struct ftl_layout_tracker_bdev *nvc_layout_tracker = dev->nvc_layout_tracker;
217 struct ftl_layout_tracker_bdev *base_layout_tracker = dev->base_layout_tracker;
219 reg_search_ctx = find_fn(dev, nvc_layout_tracker, reg_type, find_filter);
221 assert(find_fn(dev, base_layout_tracker, reg_type, find_filter) == NULL);
225 reg_search_ctx = find_fn(dev, base_layout_tracker, reg_type, find_filter);
230 sb_blob_load(struct spdk_ftl_dev *dev, struct ftl_superblock_v5_md_blob_hdr *sb_blob_hdr,
233 struct ftl_superblock_v5 *sb = (struct ftl_superblock_v5 *)dev->sb;
254 return blob_load(dev, blob_area, sb_blob_hdr->blob_sz);
258 base_blob_load(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_sz)
260 return ftl_layout_tracker_bdev_blob_load(dev->base_layout_tracker, blob_buf, blob_sz);
264 nvc_blob_load(struct spdk_ftl_dev *dev, void *blob_buf, size_t blob_sz)
266 return ftl_layout_tracker_bdev_blob_load(dev->nvc_layout_tracker, blob_buf, blob_sz);
270 ftl_superblock_v5_load_blob_area(struct spdk_ftl_dev *dev)
272 struct ftl_superblock_v5 *sb = (struct ftl_superblock_v5 *)dev->sb;
275 if (strncmp(sb->nvc_dev_name, dev->nv_cache.nvc_type->name, SPDK_COUNTOF(sb->nvc_dev_name))) {
278 FTL_NOTICELOG(dev, "nvc layout blob load 0x%"PRIx64" bytes\n", (uint64_t)sb->md_layout_nvc.blob_sz);
279 if (sb_blob_load(dev, &sb->md_layout_nvc, nvc_blob_load)) {
283 /* Load the base dev-backed FTL MD layout info */
284 if (strncmp(sb->base_dev_name, dev->base_type->name, SPDK_COUNTOF(sb->base_dev_name))) {
287 FTL_NOTICELOG(dev, "base layout blob load 0x%"PRIx64" bytes\n",
289 if (sb_blob_load(dev, &sb->md_layout_base, base_blob_load)) {
294 FTL_NOTICELOG(dev, "layout blob load 0x%"PRIx64" bytes\n", (uint64_t)sb->layout_params.blob_sz);
295 if (sb_blob_load(dev, &sb->layout_params, ftl_layout_blob_load)) {
303 sb_get_md_layout_tracker(struct spdk_ftl_dev *dev, struct ftl_layout_region *reg)
305 return (reg->bdev_desc == dev->base_bdev_desc) ? dev->base_layout_tracker : dev->nvc_layout_tracker;
309 sb_md_layout_delete_prev_region(struct spdk_ftl_dev *dev, struct ftl_layout_region *reg)
312 struct ftl_layout_tracker_bdev *layout_tracker = sb_get_md_layout_tracker(dev, reg);
320 sb_md_layout_update_prev_region(struct spdk_ftl_dev *dev, struct ftl_layout_region *reg,
325 struct ftl_layout_tracker_bdev *layout_tracker = sb_get_md_layout_tracker(dev, reg);
343 reg_search_ctx = sb_md_layout_find_region(dev, reg_props.type, sb_md_layout_find_oldest_region,
350 ftl_superblock_v5_md_layout_upgrade_region(struct spdk_ftl_dev *dev, struct ftl_layout_region *reg,
358 reg_next = sb_md_layout_find_region(dev, reg->type, sb_md_layout_find_region_version, &new_version);
367 sb_md_layout_delete_prev_region(dev, reg);
376 sb_md_layout_update_prev_region(dev, reg, new_version);
383 reg_next = sb_md_layout_find_region(dev, reg->type, sb_md_layout_find_latest_region, NULL);
387 reg_next = sb_md_layout_find_region(dev, reg->type, sb_md_layout_find_oldest_region, NULL);
391 reg_next = sb_md_layout_find_region(dev, reg->type, sb_md_layout_find_region_version, &new_version);
402 ftl_superblock_v5_md_layout_dump(struct spdk_ftl_dev *dev)
404 struct ftl_layout_tracker_bdev *nvc_layout_tracker = dev->nvc_layout_tracker;
405 struct ftl_layout_tracker_bdev *base_layout_tracker = dev->base_layout_tracker;
408 FTL_NOTICELOG(dev, "SB metadata layout - nvc:\n");
416 FTL_NOTICELOG(dev,
422 FTL_NOTICELOG(dev, "SB metadata layout - base dev:\n");
430 FTL_NOTICELOG(dev,
437 layout_apply_from_sb_blob(struct spdk_ftl_dev *dev, struct ftl_layout_tracker_bdev *layout_tracker,
453 FTL_ERRLOG(dev, "Unknown region found in layout blob: type 0x%"PRIx32"\n", reg_search_ctx->type);
457 reg = &dev->layout.region[reg_search_ctx->type];
485 FTL_ERRLOG(dev, "Corrupted layout blob: reg type 0x%"PRIx32"\n", reg_search_ctx->type);
493 layout_region_verify(struct spdk_ftl_dev *dev, enum ftl_layout_region_type reg_type)
495 struct ftl_layout_region *reg = ftl_layout_region_get(dev, reg_type);
502 FTL_ERRLOG(dev, "Unknown region version found in layout blob: reg type 0x%"PRIx32"\n",
511 layout_fixup_reg_data_base(struct spdk_ftl_dev *dev)
513 const struct ftl_md_layout_ops *base_md_ops = &dev->base_type->ops.md_layout_ops;
514 struct ftl_layout_region *reg = &dev->layout.region[FTL_LAYOUT_REGION_TYPE_DATA_BASE];
519 FTL_NOTICELOG(dev, "Adding a region\n");
522 if (base_md_ops->region_create(dev, FTL_LAYOUT_REGION_TYPE_DATA_BASE, 0,
523 ftl_layout_base_offset(dev))) {
526 if (base_md_ops->region_open(dev, FTL_LAYOUT_REGION_TYPE_DATA_BASE, 0, FTL_BLOCK_SIZE,
527 ftl_layout_base_offset(dev), reg)) {
531 ftl_layout_tracker_bdev_find_next_region(dev->base_layout_tracker, FTL_LAYOUT_REGION_TYPE_DATA_BASE,
538 layout_fixup_base(struct spdk_ftl_dev *dev)
543 int (*on_reg_miss)(struct spdk_ftl_dev *dev);
556 if (layout_region_verify(dev, reg_descr->type) &&
557 reg_descr->on_reg_miss && reg_descr->on_reg_miss(dev)) {
561 region = &dev->layout.region[reg_descr->type];
566 region->bdev_desc = dev->base_bdev_desc;
567 region->ioch = dev->base_ioch;
575 layout_fixup_nvc(struct spdk_ftl_dev *dev)
608 rc = layout_region_verify(dev, reg_descr->type);
614 ftl_layout_upgrade_add_region_placeholder(dev, dev->nvc_layout_tracker, reg_descr->type);
620 rc = ftl_layout_upgrade_drop_region(dev, dev->nvc_layout_tracker, reg_descr->type,
621 dev->layout.region[reg_descr->type].current.version);
628 region = &dev->layout.region[reg_descr->type];
634 region->bdev_desc = dev->nv_cache.bdev_desc;
635 region->ioch = dev->nv_cache.cache_ioch;
636 region->vss_blksz = dev->nv_cache.md_size;
663 layout_apply_nvc(struct spdk_ftl_dev *dev)
665 if (layout_apply_from_sb_blob(dev, dev->nvc_layout_tracker, filter_region_type_nvc) ||
666 layout_fixup_nvc(dev)) {
673 layout_apply_base(struct spdk_ftl_dev *dev)
675 if (layout_apply_from_sb_blob(dev, dev->base_layout_tracker, filter_region_type_base) ||
676 layout_fixup_base(dev)) {
683 ftl_superblock_v5_md_layout_apply(struct spdk_ftl_dev *dev)
685 if (layout_apply_nvc(dev) || layout_apply_base(dev)) {