From: Martin Wilck <mwilck@xxxxxxxx> This version script documents the current ABI of libmultipath, as used by multipath, multipathd, (lib)mpathpersist, and the dynamically loaded libraries (prioritizers, checkers, and foreign). This reduces the amount of exported symbols of libmultipath.so.0 by more than a half (199 vs. 434). --- libmultipath/Makefile | 7 +- libmultipath/libmultipath.version | 215 ++++++++++++++++++++++++++++++ 2 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 libmultipath/libmultipath.version diff --git a/libmultipath/Makefile b/libmultipath/Makefile index cf13561..bfc7263 100644 --- a/libmultipath/Makefile +++ b/libmultipath/Makefile @@ -6,6 +6,7 @@ include ../Makefile.inc SONAME = 0 DEVLIB = libmultipath.so LIBS = $(DEVLIB).$(SONAME) +VERSION_SCRIPT := libmultipath.version CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -I$(mpathpersistdir) -I$(nvmedir) @@ -68,8 +69,10 @@ nvme-ioctl.c: nvme/nvme-ioctl.c nvme-ioctl.h: nvme/nvme-ioctl.h $(call make_static,$<,$@) -$(LIBS): $(OBJS) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) + +$(LIBS): $(OBJS) $(VERSION_SCRIPT) + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ + -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) $(DEVLIB): $(LIBS) $(LN) $(LIBS) $@ diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version new file mode 100644 index 0000000..d6ac0e1 --- /dev/null +++ b/libmultipath/libmultipath.version @@ -0,0 +1,215 @@ +LIBMULTIPATH_0.8.4.0 { +global: + /* symbols referenced by multipath and multipathd */ + add_foreign; + add_map_with_path; + adopt_paths; + alloc_multipath; + alloc_path; + alloc_path_with_pathinfo; + alloc_strvec; + change_foreign; + check_alias_settings; + checker_clear_message; + checker_disable; + checker_enable; + checker_is_sync; + checker_message; + checker_name; + checker_state_name; + check_foreign; + cleanup_checkers; + cleanup_foreign; + cleanup_lock; + cleanup_prio; + close_fd; + coalesce_paths; + convert_dev; + count_active_paths; + delete_all_foreign; + delete_foreign; + disassemble_map; + disassemble_status; + dlog; + dm_cancel_deferred_remove; + dm_drv_version; + dm_enablegroup; + dm_fail_path; + _dm_flush_map; + dm_flush_map_nopaths; + dm_flush_maps; + dm_geteventnr; + dm_get_info; + dm_get_major_minor; + dm_get_map; + dm_get_maps; + dm_get_multipath; + dm_get_status; + dm_get_uuid; + dm_is_mpath; + dm_mapname; + dm_map_present; + dm_queue_if_no_path; + dm_reassign; + dm_reinstate_path; + dm_simplecmd_noflush; + dm_switchgroup; + dm_tgt_version; + domap; + ensure_directories_exist; + extract_hwe_from_path; + filter_devnode; + filter_path; + filter_wwid; + find_mp_by_alias; + find_mp_by_minor; + find_mp_by_str; + find_mp_by_wwid; + find_mpe; + find_path_by_dev; + find_path_by_devt; + find_slot; + foreign_multipath_layout; + foreign_path_layout; + free_config; + free_multipath; + free_multipathvec; + free_path; + free_pathvec; + free_strvec; + get_monotonic_time; + get_multipath_layout; + get_path_layout; + get_pgpolicy_id; + get_refwwid; + get_state; + get_udev_device; + get_uid; + get_used_hwes; + group_by_prio; + init_checkers; + init_foreign; + init_prio; + io_err_stat_attr; + io_err_stat_handle_pathfail; + is_path_valid; + is_quote; + libmp_dm_task_create; + libmp_udev_set_sync_support; + load_config; + log_thread_reset; + log_thread_start; + log_thread_stop; + need_io_err_check; + normalize_timespec; + orphan_path; + orphan_paths; + parse_prkey_flags; + pathcount; + path_discovery; + path_get_tpgs; + pathinfo; + path_offline; + print_all_paths; + print_foreign_topology; + _print_multipath_topology; + pthread_cond_init_mono; + recv_packet; + recv_packet_from_client; + reinstate_paths; + remember_wwid; + remove_map; + remove_map_by_alias; + remove_maps; + remove_wwid; + replace_wwids; + reset_checker_classes; + select_all_tg_pt; + select_action; + select_find_multipaths_timeout; + select_no_path_retry; + select_path_group; + select_reservation_key; + send_packet; + set_max_fds; + __set_no_path_retry; + set_path_removed; + set_prkey; + setup_map; + setup_thread_attr; + should_multipath; + snprint_blacklist_report; + snprint_config; + snprint_devices; + snprint_foreign_multipaths; + snprint_foreign_paths; + snprint_foreign_topology; + _snprint_multipath; + snprint_multipath_header; + snprint_multipath_map_json; + _snprint_multipath_topology; + snprint_multipath_topology_json; + _snprint_path; + snprint_path_header; + snprint_status; + snprint_wildcards; + stop_io_err_stat_thread; + store_path; + store_pathinfo; + strchop; + strlcpy; + sync_map_state; + sysfs_attr_set_value; + sysfs_get_size; + sysfs_is_multipathed; + timespecsub; + trigger_paths_udev_change; + uevent_dispatch; + uevent_get_dm_str; + uevent_get_env_positive_int; + uevent_is_mpath; + uevent_listen; + update_mpp_paths; + update_multipath_status; + update_multipath_strings; + update_multipath_table; + update_pathvec_from_dm; + update_queue_mode_add_path; + update_queue_mode_del_path; + ux_socket_listen; + valid_alias; + vector_alloc; + vector_alloc_slot; + vector_del_slot; + vector_free; + vector_reset; + vector_set_slot; + verify_paths; + + /* checkers */ + sg_read; + + /* prioritizers */ + get_asymmetric_access_state; + get_prio_timeout; + get_target_port_group; + get_target_port_group_support; + libmp_nvme_ana_log; + libmp_nvme_get_nsid; + libmp_nvme_identify_ns; + log_nvme_errcode; + nvme_id_ctrl_ana; + snprint_host_wwnn; + snprint_host_wwpn; + snprint_path_serial; + snprint_tgt_wwnn; + snprint_tgt_wwpn; + sysfs_get_asymmetric_access_state; + + /* foreign */ + free_scandir_result; + sysfs_attr_get_value; + +local: + *; +}; -- 2.28.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel