diff --git a/include/spdk/bdev.h b/include/spdk/bdev.h index 00a4a9883..0bb39c410 100644 --- a/include/spdk/bdev.h +++ b/include/spdk/bdev.h @@ -1648,6 +1648,14 @@ void spdk_bdev_io_get_iovec(struct spdk_bdev_io *bdev_io, struct iovec **iovp, i */ void *spdk_bdev_io_get_md_buf(struct spdk_bdev_io *bdev_io); +/** + * Get the callback argument of bdev_io to abort it by spdk_bdev_abort. + * + * \param bdev_io I/O to get the callback argument from. + * \return Callback argument of bdev_io. + */ +void *spdk_bdev_io_get_cb_arg(struct spdk_bdev_io *bdev_io); + typedef void (*spdk_bdev_histogram_status_cb)(void *cb_arg, int status); typedef void (*spdk_bdev_histogram_data_cb)(void *cb_arg, int status, struct spdk_histogram_data *histogram); diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 95f197606..fd20c2cf5 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -5793,6 +5793,17 @@ spdk_bdev_io_get_md_buf(struct spdk_bdev_io *bdev_io) return NULL; } +void * +spdk_bdev_io_get_cb_arg(struct spdk_bdev_io *bdev_io) +{ + if (bdev_io == NULL) { + assert(false); + return NULL; + } + + return bdev_io->internal.caller_ctx; +} + void spdk_bdev_module_list_add(struct spdk_bdev_module *bdev_module) { diff --git a/lib/bdev/spdk_bdev.map b/lib/bdev/spdk_bdev.map index 17231be62..9f9c3c7e5 100644 --- a/lib/bdev/spdk_bdev.map +++ b/lib/bdev/spdk_bdev.map @@ -86,6 +86,7 @@ spdk_bdev_io_get_scsi_status; spdk_bdev_io_get_iovec; spdk_bdev_io_get_md_buf; + spdk_bdev_io_get_cb_arg; spdk_bdev_histogram_enable; spdk_bdev_histogram_get; spdk_bdev_get_media_events;