Lines Matching defs:region
21 if (md->region) {
22 if (md->region->mirror_type != FTL_LAYOUT_REGION_TYPE_INVALID) {
34 return md->dev->layout.md[md->region->mirror_type];
279 const struct ftl_layout_region *region)
308 if (region) {
309 size_t entry_vss_buf_size = vss_blksz * region->entry_size;
320 ftl_md_set_region(md, region);
325 ftl_md_destroy(md, ftl_md_destroy_region_flags(dev, region->type));
400 union ftl_md_vss *ftl_md_vss_buf_alloc(struct ftl_layout_region *region, uint32_t count)
411 vss_buf.version.md_version = region->current.version;
535 const struct ftl_layout_region *region = md->region;
543 rc = read_blocks(md->dev, region->bdev_desc, region->ioch,
550 rc = write_blocks(md->dev, region->bdev_desc, region->ioch,
561 struct spdk_bdev *bdev = spdk_bdev_desc_get_bdev(region->bdev_desc);
565 spdk_bdev_queue_io_wait(bdev, region->ioch, &md->io.bdev_io_wait);
605 if (!md->region) {
606 /* No device region to process data */
610 if (md->region->current.blocks > md->data_blocks) {
611 /* No device region to process data */
613 "device region\n");
623 const struct ftl_layout_region *region = md->region;
634 if (md->vss_data || md->region->vss_blksz) {
645 md->io.address = region->current.offset;
646 md->io.remaining = region->current.blocks;
671 return md->region->current.offset + start_entry * md->region->entry_size;
702 rc = write_blocks(md->dev, md->region->bdev_desc, md->region->ioch,
704 persist_entry_lba(md, ctx->start_entry), md->region->entry_size * ctx->num_entries,
708 struct spdk_bdev *bdev = spdk_bdev_desc_get_bdev(md->region->bdev_desc);
712 spdk_bdev_queue_io_wait(bdev, md->region->ioch, &ctx->bdev_io_wait);
740 assert(md->region->entry_size == (ftl_md_get_mirror(md))->region->entry_size);
754 /* First execute an IO to the primary region */
763 if (spdk_unlikely(0 == md->region->entry_size)) {
767 if (spdk_unlikely(start_entry + num_entries > md->region->num_entries)) {
820 rc = read_blocks(md->dev, md->region->bdev_desc, md->region->ioch,
822 persist_entry_lba(md, ctx->start_entry), md->region->entry_size,
827 struct spdk_bdev *bdev = spdk_bdev_desc_get_bdev(md->region->bdev_desc);
831 spdk_bdev_queue_io_wait(bdev, md->region->ioch, &ctx->bdev_io_wait);
851 if (spdk_unlikely(0 == md->region->entry_size)) {
957 /* Failed to read MD from primary region, try it from mirror.
959 * feature we can restore from primary and mirror region
1008 /* The MD instance may be destroyed in ctx of md->cb(), e.g. upon region upgrade. */
1042 vss.version.md_version = md->region->current.version;
1078 /* Configure the IO for the primary region now */
1098 return md->region;
1103 const struct ftl_layout_region *region)
1105 assert(region->current.blocks <= md->data_blocks);
1106 md->region = region;
1110 vss.version.md_version = region->current.version;
1112 if (region->entry_size) {
1114 ftl_md_vss_buf_init(md->entry_vss_dma_buf, region->entry_size, &vss);