diff --git a/lib/bdev/lvol/vbdev_lvol.c b/lib/bdev/lvol/vbdev_lvol.c index 0ab9ca146..8be2dfa87 100644 --- a/lib/bdev/lvol/vbdev_lvol.c +++ b/lib/bdev/lvol/vbdev_lvol.c @@ -937,6 +937,22 @@ vbdev_lvs_examine(struct spdk_bdev *bdev) spdk_lvs_load(bs_dev, _vbdev_lvs_examine_cb, req); } + +struct spdk_lvol * +vbdev_lvol_get_from_bdev(struct spdk_bdev *bdev) +{ + if (!bdev || bdev->module != SPDK_GET_BDEV_MODULE(lvol)) { + return NULL; + } + + if (bdev->ctxt == NULL) { + SPDK_ERRLOG("No lvol ctx assigned to bdev %s\n", bdev->name); + return NULL; + } + + return (struct spdk_lvol *)bdev->ctxt; +} + SPDK_BDEV_MODULE_REGISTER(lvol, vbdev_lvs_init, NULL, NULL, vbdev_lvs_get_ctx_size, vbdev_lvs_examine) SPDK_LOG_REGISTER_COMPONENT("vbdev_lvol", SPDK_LOG_VBDEV_LVOL); diff --git a/lib/bdev/lvol/vbdev_lvol.h b/lib/bdev/lvol/vbdev_lvol.h index d1abb0496..c543a8a4b 100644 --- a/lib/bdev/lvol/vbdev_lvol.h +++ b/lib/bdev/lvol/vbdev_lvol.h @@ -78,4 +78,6 @@ struct spdk_lvol_store *vbdev_get_lvol_store_by_name(const char *name); */ struct lvol_store_bdev *vbdev_get_lvs_bdev_by_lvs(struct spdk_lvol_store *lvs); +struct spdk_lvol *vbdev_lvol_get_from_bdev(struct spdk_bdev *bdev); + #endif /* SPDK_VBDEV_LVOL_H */