2020-04-03 19:22:12 +00:00
|
|
|
{
|
|
|
|
global:
|
|
|
|
|
|
|
|
# Public functions in bdev.h
|
|
|
|
spdk_bdev_get_opts;
|
|
|
|
spdk_bdev_set_opts;
|
|
|
|
spdk_bdev_initialize;
|
|
|
|
spdk_bdev_finish;
|
|
|
|
spdk_bdev_config_text;
|
|
|
|
spdk_bdev_subsystem_config_json;
|
|
|
|
spdk_bdev_get_by_name;
|
|
|
|
spdk_bdev_first;
|
|
|
|
spdk_bdev_next;
|
|
|
|
spdk_bdev_first_leaf;
|
|
|
|
spdk_bdev_next_leaf;
|
|
|
|
spdk_bdev_open;
|
|
|
|
spdk_bdev_open_ext;
|
|
|
|
spdk_bdev_close;
|
|
|
|
spdk_bdev_desc_get_bdev;
|
|
|
|
spdk_bdev_set_timeout;
|
|
|
|
spdk_bdev_io_type_supported;
|
|
|
|
spdk_bdev_dump_info_json;
|
|
|
|
spdk_bdev_get_name;
|
|
|
|
spdk_bdev_get_product_name;
|
|
|
|
spdk_bdev_get_block_size;
|
|
|
|
spdk_bdev_get_write_unit_size;
|
|
|
|
spdk_bdev_get_num_blocks;
|
|
|
|
spdk_bdev_get_qos_rpc_type;
|
|
|
|
spdk_bdev_get_qos_rate_limits;
|
|
|
|
spdk_bdev_set_qos_rate_limits;
|
|
|
|
spdk_bdev_get_buf_align;
|
|
|
|
spdk_bdev_get_optimal_io_boundary;
|
|
|
|
spdk_bdev_has_write_cache;
|
|
|
|
spdk_bdev_get_uuid;
|
|
|
|
spdk_bdev_get_acwu;
|
|
|
|
spdk_bdev_get_md_size;
|
|
|
|
spdk_bdev_is_md_interleaved;
|
|
|
|
spdk_bdev_is_md_separate;
|
|
|
|
spdk_bdev_is_zoned;
|
|
|
|
spdk_bdev_get_data_block_size;
|
|
|
|
spdk_bdev_get_dif_type;
|
|
|
|
spdk_bdev_is_dif_head_of_md;
|
|
|
|
spdk_bdev_is_dif_check_enabled;
|
|
|
|
spdk_bdev_get_qd;
|
|
|
|
spdk_bdev_get_qd_sampling_period;
|
|
|
|
spdk_bdev_set_qd_sampling_period;
|
|
|
|
spdk_bdev_get_io_time;
|
|
|
|
spdk_bdev_get_weighted_io_time;
|
|
|
|
spdk_bdev_get_io_channel;
|
|
|
|
spdk_bdev_read;
|
|
|
|
spdk_bdev_read_blocks;
|
|
|
|
spdk_bdev_read_blocks_with_md;
|
|
|
|
spdk_bdev_readv;
|
|
|
|
spdk_bdev_readv_blocks;
|
|
|
|
spdk_bdev_readv_blocks_with_md;
|
|
|
|
spdk_bdev_write;
|
|
|
|
spdk_bdev_write_blocks;
|
|
|
|
spdk_bdev_write_blocks_with_md;
|
|
|
|
spdk_bdev_writev;
|
|
|
|
spdk_bdev_writev_blocks;
|
|
|
|
spdk_bdev_writev_blocks_with_md;
|
|
|
|
spdk_bdev_compare_blocks;
|
|
|
|
spdk_bdev_compare_blocks_with_md;
|
|
|
|
spdk_bdev_comparev_blocks;
|
|
|
|
spdk_bdev_comparev_blocks_with_md;
|
|
|
|
spdk_bdev_comparev_and_writev_blocks;
|
|
|
|
spdk_bdev_zcopy_start;
|
|
|
|
spdk_bdev_zcopy_end;
|
|
|
|
spdk_bdev_write_zeroes;
|
|
|
|
spdk_bdev_write_zeroes_blocks;
|
|
|
|
spdk_bdev_unmap;
|
|
|
|
spdk_bdev_unmap_blocks;
|
|
|
|
spdk_bdev_flush;
|
|
|
|
spdk_bdev_flush_blocks;
|
|
|
|
spdk_bdev_reset;
|
lib/bdev: Add spdk_bdev_abort API
Add spdk_bdev_abort function as a new public API.
This goes all the way down to the bdev driver module and attempts to
abort all I/Os which has bio_cb_arg as its callback argument.
We can separate when only a single I/O has bio_cb_arg and when multiple
I/Os have bio_cb_arg, but unify both by using parent - children I/O
relationship. To avoid confusion, return matched_ios by _bdev_abort() and
store it into split_outstanding by the caller.
Exclude any I/O submitted after this abort command because the same cb_arg
may be used by all I/Os and abort may never complete.
bdev_io needs to have both bio_cb_arg and bio_to_abort because bio_cb_arg
is used to continue abort processing when it is stopped due to the capacity
of bdev_io pool, and bio_to_abort is used to pass it to the underlying
bdev module at submission. Parent I/O is not submitted directly, and is
only used in the generic bdev layer, and parent I/O's bdev_io uses bio_cb_arg.
Hence add bio_cb_arg to bdev structure and add bio_to_abort to abort structure.
In the meantime of abort operation, target I/Os may be completed. Hence
check if the target I/O still exists at completion, and set the completion
status to false only if it still exists.
Upon completion of this, i.e., this returned zero, the status
SPDK_BDEV_IO_STATUS_SUCCESS indicates all I/Os were successfully aborted,
or the status SPDK_BDEV_IO_STATUS_FAILED indicates any I/O was failed to
abort by any reason.
spdk_bdev_abort() does not support aborting abort or reset request
due to the complexity for now.
Following patches will support I/O split case.
Add unit tests together to cover the basic paths.
Besides, ABI compatibility check required us to bump up SO version of
a few libraries or modules. Bump up SO version of blob bdev module simply
because it does not have any out-of-tree consumer, and suppress bumping
up SO version of lvol library because the affected struct spdk_lvol
is not part of public APIs.
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I515da688503557615d491bf0bfb36322ce37df08
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2014
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
2020-06-03 01:11:28 +00:00
|
|
|
spdk_bdev_abort;
|
2020-04-03 19:22:12 +00:00
|
|
|
spdk_bdev_nvme_admin_passthru;
|
|
|
|
spdk_bdev_nvme_io_passthru;
|
|
|
|
spdk_bdev_nvme_io_passthru_md;
|
|
|
|
spdk_bdev_free_io;
|
|
|
|
spdk_bdev_queue_io_wait;
|
|
|
|
spdk_bdev_get_io_stat;
|
|
|
|
spdk_bdev_get_device_stat;
|
|
|
|
spdk_bdev_io_get_nvme_status;
|
|
|
|
spdk_bdev_io_get_nvme_fused_status;
|
|
|
|
spdk_bdev_io_get_scsi_status;
|
|
|
|
spdk_bdev_io_get_iovec;
|
|
|
|
spdk_bdev_io_get_md_buf;
|
2020-05-26 21:24:40 +00:00
|
|
|
spdk_bdev_io_get_cb_arg;
|
2020-04-03 19:22:12 +00:00
|
|
|
spdk_bdev_histogram_enable;
|
|
|
|
spdk_bdev_histogram_get;
|
|
|
|
spdk_bdev_get_media_events;
|
|
|
|
|
|
|
|
# Public functions in bdev_module.h
|
|
|
|
spdk_bdev_register;
|
|
|
|
spdk_bdev_unregister;
|
|
|
|
spdk_bdev_destruct_done;
|
|
|
|
spdk_vbdev_register;
|
|
|
|
spdk_bdev_module_examine_done;
|
|
|
|
spdk_bdev_module_init_done;
|
|
|
|
spdk_bdev_module_finish_done;
|
|
|
|
spdk_bdev_module_claim_bdev;
|
|
|
|
spdk_bdev_module_release_bdev;
|
|
|
|
spdk_bdev_alias_add;
|
|
|
|
spdk_bdev_alias_del;
|
|
|
|
spdk_bdev_alias_del_all;
|
|
|
|
spdk_bdev_get_aliases;
|
|
|
|
spdk_bdev_io_get_buf;
|
|
|
|
spdk_bdev_io_get_aux_buf;
|
|
|
|
spdk_bdev_io_put_aux_buf;
|
|
|
|
spdk_bdev_io_set_buf;
|
|
|
|
spdk_bdev_io_set_md_buf;
|
|
|
|
spdk_bdev_io_complete;
|
|
|
|
spdk_bdev_io_complete_nvme_status;
|
|
|
|
spdk_bdev_io_complete_scsi_status;
|
|
|
|
spdk_bdev_io_get_thread;
|
|
|
|
spdk_bdev_io_get_io_channel;
|
|
|
|
spdk_bdev_notify_blockcnt_change;
|
|
|
|
spdk_scsi_nvme_translate;
|
|
|
|
spdk_bdev_module_list_add;
|
|
|
|
spdk_bdev_module_list_find;
|
|
|
|
spdk_bdev_part_base_get_bdev;
|
|
|
|
spdk_bdev_part_base_get_bdev_name;
|
|
|
|
spdk_bdev_part_base_get_desc;
|
|
|
|
spdk_bdev_part_base_get_tailq;
|
|
|
|
spdk_bdev_part_base_get_ctx;
|
|
|
|
spdk_bdev_part_base_free;
|
|
|
|
spdk_bdev_part_free;
|
|
|
|
spdk_bdev_part_base_hotremove;
|
|
|
|
spdk_bdev_part_base_construct;
|
|
|
|
spdk_bdev_part_construct;
|
|
|
|
spdk_bdev_part_submit_request;
|
|
|
|
spdk_bdev_part_get_bdev;
|
|
|
|
spdk_bdev_part_get_base;
|
|
|
|
spdk_bdev_part_get_base_bdev;
|
|
|
|
spdk_bdev_part_get_offset_blocks;
|
|
|
|
spdk_bdev_push_media_events;
|
|
|
|
spdk_bdev_notify_media_management;
|
|
|
|
|
|
|
|
# Public functions in bdev_zone.h
|
|
|
|
spdk_bdev_get_zone_size;
|
|
|
|
spdk_bdev_get_max_open_zones;
|
|
|
|
spdk_bdev_get_optimal_open_zones;
|
|
|
|
spdk_bdev_get_zone_info;
|
|
|
|
spdk_bdev_zone_management;
|
|
|
|
spdk_bdev_zone_append;
|
|
|
|
spdk_bdev_zone_appendv;
|
|
|
|
spdk_bdev_zone_append_with_md;
|
|
|
|
spdk_bdev_zone_appendv_with_md;
|
|
|
|
spdk_bdev_io_get_append_location;
|
|
|
|
|
|
|
|
# Everything else
|
|
|
|
local: *;
|
|
|
|
};
|