From: Martin Wilck <mwilck@xxxxxxxx> This thread attribute can be dynamically initialized and destroyed. No need to carry it along in multipathd. Removal of the symbol requires to bump the ABI version to 3. Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- libmultipath/io_err_stat.c | 7 +++++-- libmultipath/libmultipath.version | 23 ++++++++--------------- multipathd/main.c | 2 -- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c index 58bc1dd..5363049 100644 --- a/libmultipath/io_err_stat.c +++ b/libmultipath/io_err_stat.c @@ -34,6 +34,7 @@ #include "lock.h" #include "time-util.h" #include "io_err_stat.h" +#include "util.h" #define TIMEOUT_NO_IO_NSEC 10000000 /*10ms = 10000000ns*/ #define FLAKY_PATHFAIL_THRESHOLD 2 @@ -70,8 +71,7 @@ struct io_err_stat_path { int err_rate_threshold; }; -pthread_t io_err_stat_thr; -pthread_attr_t io_err_stat_attr; +static pthread_t io_err_stat_thr; static pthread_mutex_t io_err_thread_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t io_err_thread_cond = PTHREAD_COND_INITIALIZER; @@ -727,6 +727,7 @@ static void *io_err_stat_loop(void *data) int start_io_err_stat_thread(void *data) { int ret; + pthread_attr_t io_err_stat_attr; if (uatomic_read(&io_err_thread_running) == 1) return 0; @@ -739,6 +740,7 @@ int start_io_err_stat_thread(void *data) if (!paths) goto destroy_ctx; + setup_thread_attr(&io_err_stat_attr, 32 * 1024, 0); pthread_mutex_lock(&io_err_thread_lock); pthread_cleanup_push(cleanup_unlock, &io_err_thread_lock); @@ -750,6 +752,7 @@ int start_io_err_stat_thread(void *data) &io_err_thread_lock) == 0); pthread_cleanup_pop(1); + pthread_attr_destroy(&io_err_stat_attr); if (ret) { io_err_stat_log(0, "cannot create io_error statistic thread"); diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version index 0c300c8..84beb7f 100644 --- a/libmultipath/libmultipath.version +++ b/libmultipath/libmultipath.version @@ -31,7 +31,7 @@ * The new version inherits the previous ones. */ -LIBMULTIPATH_2.0.0 { +LIBMULTIPATH_3.0.0 { global: /* symbols referenced by multipath and multipathd */ add_foreign; @@ -121,7 +121,6 @@ global: init_checkers; init_foreign; init_prio; - io_err_stat_attr; io_err_stat_handle_pathfail; is_path_valid; is_quote; @@ -242,30 +241,24 @@ global: free_scandir_result; sysfs_attr_get_value; -local: - *; -}; - -LIBMULTIPATH_2.1.0 { -global: + /* added in 2.1.0 */ libmp_dm_task_run; cleanup_mutex; -} LIBMULTIPATH_2.0.0; -LIBMULTIPATH_2.2.0 { -global: + /* added in 2.2.0 */ libmp_get_multipath_config; get_multipath_config; libmp_put_multipath_config; put_multipath_config; init_config; uninit_config; -} LIBMULTIPATH_2.1.0; -LIBMULTIPATH_2.3.0 { -global: + /* added in 2.3.0 */ udev; logsink; libmultipath_init; libmultipath_exit; -} LIBMULTIPATH_2.2.0; + +local: + *; +}; diff --git a/multipathd/main.c b/multipathd/main.c index ce14bb6..abc6a9f 100644 --- a/multipathd/main.c +++ b/multipathd/main.c @@ -2954,7 +2954,6 @@ child (__attribute__((unused)) void *param) setup_thread_attr(&misc_attr, 64 * 1024, 0); setup_thread_attr(&uevent_attr, DEFAULT_UEVENT_STACKSIZE * 1024, 0); setup_thread_attr(&waiter_attr, 32 * 1024, 1); - setup_thread_attr(&io_err_stat_attr, 32 * 1024, 0); if (logsink == 1) { setup_thread_attr(&log_attr, 64 * 1024, 0); @@ -3164,7 +3163,6 @@ child (__attribute__((unused)) void *param) rcu_assign_pointer(multipath_conf, NULL); call_rcu(&conf->rcu, rcu_free_config); pthread_attr_destroy(&waiter_attr); - pthread_attr_destroy(&io_err_stat_attr); #ifdef _DEBUG_ dbg_free_final(NULL); #endif -- 2.29.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel