From: Martin Wilck <[email protected]>

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
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to