e5eddaae1a
Update to the head of the upstream staging branch Rename redhat patches * Previous patches 0001-0012 are now patches 0041-0052 Add 0053-RH-Add-mpathcleanup.patch * add mpathcleanup program
898 lines
32 KiB
Diff
898 lines
32 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Martin Wilck <mwilck@suse.com>
|
|
Date: Mon, 11 Sep 2023 17:58:13 +0200
|
|
Subject: [PATCH] libmultipath: deprecate bindings_file, wwids_file,
|
|
prkeys_file
|
|
|
|
The options bindings_file, wwids_file, and prkeys_file have been
|
|
deprecated since cb4d6db ("libmultipath: deprecate file and directory config
|
|
options") (multipath-tools 0.8.8). Deprecate and ignore them now.
|
|
|
|
Signed-off-by: Martin Wilck <mwilck@suse.com>
|
|
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
---
|
|
libmultipath/alias.c | 43 +++++++++----------
|
|
libmultipath/alias.h | 3 +-
|
|
libmultipath/config.c | 18 --------
|
|
libmultipath/config.h | 3 --
|
|
libmultipath/dict.c | 39 +++---------------
|
|
libmultipath/libmultipath.version | 8 +---
|
|
libmultipath/prkey.c | 7 ++--
|
|
libmultipath/prkey.h | 7 ++--
|
|
libmultipath/propsel.c | 5 +--
|
|
libmultipath/wwids.c | 18 ++------
|
|
multipath/main.c | 2 +-
|
|
multipath/multipath.conf.5.in | 23 +++++------
|
|
multipathd/uxlsnr.c | 17 +++-----
|
|
tests/alias.c | 68 +++++++++++++++----------------
|
|
14 files changed, 90 insertions(+), 171 deletions(-)
|
|
|
|
diff --git a/libmultipath/alias.c b/libmultipath/alias.c
|
|
index 964b8a7b..e5d3f151 100644
|
|
--- a/libmultipath/alias.c
|
|
+++ b/libmultipath/alias.c
|
|
@@ -55,6 +55,8 @@
|
|
/* uatomic access only */
|
|
static int bindings_file_changed = 1;
|
|
|
|
+static const char bindings_file_path[] = DEFAULT_BINDINGS_FILE;
|
|
+
|
|
static pthread_mutex_t timestamp_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
static struct timespec bindings_last_updated;
|
|
|
|
@@ -274,7 +276,6 @@ static int write_bindings_file(const Bindings *bindings, int fd,
|
|
|
|
void handle_bindings_file_inotify(const struct inotify_event *event)
|
|
{
|
|
- struct config *conf;
|
|
const char *base;
|
|
bool changed = false;
|
|
struct stat st;
|
|
@@ -284,12 +285,9 @@ void handle_bindings_file_inotify(const struct inotify_event *event)
|
|
if (!(event->mask & IN_MOVED_TO))
|
|
return;
|
|
|
|
- conf = get_multipath_config();
|
|
- base = strrchr(conf->bindings_file, '/');
|
|
- changed = base && base > conf->bindings_file &&
|
|
- !strcmp(base + 1, event->name);
|
|
- ret = stat(conf->bindings_file, &st);
|
|
- put_multipath_config(conf);
|
|
+ base = strrchr(bindings_file_path, '/');
|
|
+ changed = base && !strcmp(base + 1, event->name);
|
|
+ ret = stat(bindings_file_path, &st);
|
|
|
|
if (!changed)
|
|
return;
|
|
@@ -310,8 +308,7 @@ void handle_bindings_file_inotify(const struct inotify_event *event)
|
|
__func__, (long)ts.tv_sec, (long)ts.tv_nsec / 1000);
|
|
}
|
|
|
|
-static int update_bindings_file(const Bindings *bindings,
|
|
- const char *bindings_file)
|
|
+static int update_bindings_file(const Bindings *bindings)
|
|
{
|
|
int rc;
|
|
int fd = -1;
|
|
@@ -319,7 +316,7 @@ static int update_bindings_file(const Bindings *bindings,
|
|
mode_t old_umask;
|
|
struct timespec ts;
|
|
|
|
- if (safe_sprintf(tempname, "%s.XXXXXX", bindings_file))
|
|
+ if (safe_sprintf(tempname, "%s.XXXXXX", bindings_file_path))
|
|
return -1;
|
|
/* coverity: SECURE_TEMP */
|
|
old_umask = umask(0077);
|
|
@@ -336,13 +333,13 @@ static int update_bindings_file(const Bindings *bindings,
|
|
unlink(tempname);
|
|
return rc;
|
|
}
|
|
- if ((rc = rename(tempname, bindings_file)) == -1)
|
|
+ if ((rc = rename(tempname, bindings_file_path)) == -1)
|
|
condlog(0, "%s: rename: %m", __func__);
|
|
else {
|
|
pthread_mutex_lock(×tamp_mutex);
|
|
bindings_last_updated = ts;
|
|
pthread_mutex_unlock(×tamp_mutex);
|
|
- condlog(1, "updated bindings file %s", bindings_file);
|
|
+ condlog(1, "updated bindings file %s", bindings_file_path);
|
|
}
|
|
return rc;
|
|
}
|
|
@@ -474,7 +471,7 @@ int get_free_id(const Bindings *bindings, const char *prefix, const char *map_ww
|
|
|
|
/* Called with binding_mutex held */
|
|
static char *
|
|
-allocate_binding(const char *filename, const char *wwid, int id, const char *prefix)
|
|
+allocate_binding(const char *wwid, int id, const char *prefix)
|
|
{
|
|
STRBUF_ON_STACK(buf);
|
|
char *alias;
|
|
@@ -498,7 +495,7 @@ allocate_binding(const char *filename, const char *wwid, int id, const char *pre
|
|
return NULL;
|
|
}
|
|
|
|
- if (update_bindings_file(&global_bindings, filename) == -1) {
|
|
+ if (update_bindings_file(&global_bindings) == -1) {
|
|
condlog(1, "%s: deleting binding %s for %s", __func__, alias, wwid);
|
|
delete_binding(&global_bindings, wwid);
|
|
free(alias);
|
|
@@ -565,7 +562,7 @@ static void read_bindings_file(void)
|
|
* that the mpvec corrcectly represents kernel state.
|
|
*/
|
|
|
|
-char *get_user_friendly_alias(const char *wwid, const char *file, const char *alias_old,
|
|
+char *get_user_friendly_alias(const char *wwid, const char *alias_old,
|
|
const char *prefix, bool bindings_read_only)
|
|
{
|
|
char *alias = NULL;
|
|
@@ -622,7 +619,7 @@ new_alias:
|
|
}
|
|
|
|
if (!bindings_read_only && id > 0)
|
|
- alias = allocate_binding(file, wwid, id, prefix);
|
|
+ alias = allocate_binding(wwid, id, prefix);
|
|
|
|
if (alias && !new_binding)
|
|
condlog(2, "Allocated existing binding [%s] for WWID [%s]",
|
|
@@ -715,12 +712,12 @@ static int _check_bindings_file(const struct config *conf, FILE *file,
|
|
header[sizeof(BINDINGS_FILE_HEADER) - 1] = '\0';
|
|
if (fread(header, sizeof(BINDINGS_FILE_HEADER) - 1, 1, file) < 1) {
|
|
condlog(2, "%s: failed to read header from %s", __func__,
|
|
- conf->bindings_file);
|
|
+ bindings_file_path);
|
|
fseek(file, 0, SEEK_SET);
|
|
rc = -1;
|
|
} else if (strcmp(header, BINDINGS_FILE_HEADER)) {
|
|
condlog(2, "%s: invalid header in %s", __func__,
|
|
- conf->bindings_file);
|
|
+ bindings_file_path);
|
|
fseek(file, 0, SEEK_SET);
|
|
rc = -1;
|
|
}
|
|
@@ -787,13 +784,13 @@ static int _read_bindings_file(const struct config *conf, Bindings *bindings,
|
|
}
|
|
}
|
|
|
|
- fd = open_file(conf->bindings_file, &can_write, BINDINGS_FILE_HEADER);
|
|
+ fd = open_file(bindings_file_path, &can_write, BINDINGS_FILE_HEADER);
|
|
if (fd == -1)
|
|
return BINDINGS_FILE_ERROR;
|
|
|
|
file = fdopen(fd, "r");
|
|
if (file != NULL) {
|
|
- condlog(3, "%s: reading %s", __func__, conf->bindings_file);
|
|
+ condlog(3, "%s: reading %s", __func__, bindings_file_path);
|
|
|
|
pthread_cleanup_push(cleanup_fclose, file);
|
|
ret = _check_bindings_file(conf, file, bindings);
|
|
@@ -812,20 +809,20 @@ static int _read_bindings_file(const struct config *conf, Bindings *bindings,
|
|
bindings_last_updated = ts;
|
|
pthread_mutex_unlock(×tamp_mutex);
|
|
} else if (ret == -1 && can_write && !conf->bindings_read_only) {
|
|
- ret = update_bindings_file(bindings, conf->bindings_file);
|
|
+ ret = update_bindings_file(bindings);
|
|
if (ret == 0)
|
|
rc = BINDINGS_FILE_READ;
|
|
else
|
|
rc = BINDINGS_FILE_BAD;
|
|
} else {
|
|
condlog(0, "ERROR: bad settings in read-only bindings file %s",
|
|
- conf->bindings_file);
|
|
+ bindings_file_path);
|
|
rc = BINDINGS_FILE_BAD;
|
|
}
|
|
pthread_cleanup_pop(1);
|
|
} else {
|
|
condlog(1, "failed to fdopen %s: %m",
|
|
- conf->bindings_file);
|
|
+ bindings_file_path);
|
|
close(fd);
|
|
rc = BINDINGS_FILE_ERROR;
|
|
}
|
|
diff --git a/libmultipath/alias.h b/libmultipath/alias.h
|
|
index ca8911f4..629e8d56 100644
|
|
--- a/libmultipath/alias.h
|
|
+++ b/libmultipath/alias.h
|
|
@@ -3,8 +3,7 @@
|
|
|
|
int valid_alias(const char *alias);
|
|
int get_user_friendly_wwid(const char *alias, char *buff);
|
|
-char *get_user_friendly_alias(const char *wwid, const char *file,
|
|
- const char *alias_old,
|
|
+char *get_user_friendly_alias(const char *wwid, const char *alias_old,
|
|
const char *prefix, bool bindings_read_only);
|
|
|
|
struct config;
|
|
diff --git a/libmultipath/config.c b/libmultipath/config.c
|
|
index 7b207590..b7dbc6f5 100644
|
|
--- a/libmultipath/config.c
|
|
+++ b/libmultipath/config.c
|
|
@@ -752,15 +752,6 @@ static void _uninit_config(struct config *conf)
|
|
if (conf->hwhandler)
|
|
free(conf->hwhandler);
|
|
|
|
- if (conf->bindings_file)
|
|
- free(conf->bindings_file);
|
|
-
|
|
- if (conf->wwids_file)
|
|
- free(conf->wwids_file);
|
|
-
|
|
- if (conf->prkeys_file)
|
|
- free(conf->prkeys_file);
|
|
-
|
|
if (conf->prio_name)
|
|
free(conf->prio_name);
|
|
|
|
@@ -922,9 +913,6 @@ int _init_config (const char *file, struct config *conf)
|
|
* internal defaults
|
|
*/
|
|
get_sys_max_fds(&conf->max_fds);
|
|
- conf->bindings_file = set_default(DEFAULT_BINDINGS_FILE);
|
|
- conf->wwids_file = set_default(DEFAULT_WWIDS_FILE);
|
|
- conf->prkeys_file = set_default(DEFAULT_PRKEYS_FILE);
|
|
conf->attribute_flags = 0;
|
|
conf->reassign_maps = DEFAULT_REASSIGN_MAPS;
|
|
conf->checkint = CHECKINT_UNDEF;
|
|
@@ -1078,12 +1066,6 @@ int _init_config (const char *file, struct config *conf)
|
|
merge_blacklist(conf->elist_wwid);
|
|
merge_blacklist_device(conf->elist_device);
|
|
|
|
- if (conf->bindings_file == NULL)
|
|
- conf->bindings_file = set_default(DEFAULT_BINDINGS_FILE);
|
|
-
|
|
- if (!conf->bindings_file || !conf->wwids_file || !conf->prkeys_file)
|
|
- goto out;
|
|
-
|
|
libmp_verbosity = conf->verbosity;
|
|
return 0;
|
|
out:
|
|
diff --git a/libmultipath/config.h b/libmultipath/config.h
|
|
index 0a2c297b..8c22ce75 100644
|
|
--- a/libmultipath/config.h
|
|
+++ b/libmultipath/config.h
|
|
@@ -207,9 +207,6 @@ struct config {
|
|
char * uid_attribute;
|
|
char * features;
|
|
char * hwhandler;
|
|
- char * bindings_file;
|
|
- char * wwids_file;
|
|
- char * prkeys_file;
|
|
char * prio_name;
|
|
char * prio_args;
|
|
char * checker_name;
|
|
diff --git a/libmultipath/dict.c b/libmultipath/dict.c
|
|
index dace343d..044067af 100644
|
|
--- a/libmultipath/dict.c
|
|
+++ b/libmultipath/dict.c
|
|
@@ -168,27 +168,6 @@ fail:
|
|
return 0;
|
|
}
|
|
|
|
-static int
|
|
-set_path(vector strvec, void *ptr, const char *file, int line_nr)
|
|
-{
|
|
- char **str_ptr = (char **)ptr;
|
|
- char *old_str = *str_ptr;
|
|
-
|
|
- *str_ptr = set_value(strvec);
|
|
- if (!*str_ptr) {
|
|
- free(old_str);
|
|
- return 1;
|
|
- }
|
|
- if ((*str_ptr)[0] != '/'){
|
|
- condlog(1, "%s line %d, %s is not an absolute path. Ignoring",
|
|
- file, line_nr, *str_ptr);
|
|
- free(*str_ptr);
|
|
- *str_ptr = old_str;
|
|
- } else
|
|
- free(old_str);
|
|
- return 0;
|
|
-}
|
|
-
|
|
static int
|
|
set_str_noslash(vector strvec, void *ptr, const char *file, int line_nr)
|
|
{
|
|
@@ -831,15 +810,6 @@ declare_hw_snprint(user_friendly_names, print_yes_no_undef)
|
|
declare_mp_handler(user_friendly_names, set_yes_no_undef)
|
|
declare_mp_snprint(user_friendly_names, print_yes_no_undef)
|
|
|
|
-declare_def_warn_handler(bindings_file, set_path)
|
|
-declare_def_snprint(bindings_file, print_str)
|
|
-
|
|
-declare_def_warn_handler(wwids_file, set_path)
|
|
-declare_def_snprint(wwids_file, print_str)
|
|
-
|
|
-declare_def_warn_handler(prkeys_file, set_path)
|
|
-declare_def_snprint(prkeys_file, print_str)
|
|
-
|
|
declare_def_handler(retain_hwhandler, set_yes_no_undef)
|
|
declare_def_snprint_defint(retain_hwhandler, print_yes_no_undef,
|
|
DEFAULT_RETAIN_HWHANDLER)
|
|
@@ -2064,6 +2034,9 @@ declare_deprecated_handler(disable_changed_wwids, "yes")
|
|
declare_deprecated_handler(getuid_callout, "(not set)")
|
|
declare_deprecated_handler(multipath_dir, MULTIPATH_DIR)
|
|
declare_deprecated_handler(pg_timeout, "(not set)")
|
|
+declare_deprecated_handler(bindings_file, DEFAULT_BINDINGS_FILE)
|
|
+declare_deprecated_handler(wwids_file, DEFAULT_WWIDS_FILE)
|
|
+declare_deprecated_handler(prkeys_file, DEFAULT_PRKEYS_FILE)
|
|
|
|
/*
|
|
* If you add or remove a keyword also update multipath/multipath.conf.5
|
|
@@ -2106,9 +2079,9 @@ init_keywords(vector keywords)
|
|
install_keyword("fast_io_fail_tmo", &def_fast_io_fail_handler, &snprint_def_fast_io_fail);
|
|
install_keyword("dev_loss_tmo", &def_dev_loss_handler, &snprint_def_dev_loss);
|
|
install_keyword("eh_deadline", &def_eh_deadline_handler, &snprint_def_eh_deadline);
|
|
- install_keyword("bindings_file", &def_bindings_file_handler, &snprint_def_bindings_file);
|
|
- install_keyword("wwids_file", &def_wwids_file_handler, &snprint_def_wwids_file);
|
|
- install_keyword("prkeys_file", &def_prkeys_file_handler, &snprint_def_prkeys_file);
|
|
+ install_keyword("bindings_file", &deprecated_bindings_file_handler, &snprint_deprecated);
|
|
+ install_keyword("wwids_file", &deprecated_wwids_file_handler, &snprint_deprecated);
|
|
+ install_keyword("prkeys_file", &deprecated_prkeys_file_handler, &snprint_deprecated);
|
|
install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err);
|
|
install_keyword("reservation_key", &def_reservation_key_handler, &snprint_def_reservation_key);
|
|
install_keyword("all_tg_pt", &def_all_tg_pt_handler, &snprint_def_all_tg_pt);
|
|
diff --git a/libmultipath/libmultipath.version b/libmultipath/libmultipath.version
|
|
index 57e50c12..8368ef7a 100644
|
|
--- a/libmultipath/libmultipath.version
|
|
+++ b/libmultipath/libmultipath.version
|
|
@@ -43,7 +43,7 @@ LIBMPATHCOMMON_1.0.0 {
|
|
put_multipath_config;
|
|
};
|
|
|
|
-LIBMULTIPATH_20.0.0 {
|
|
+LIBMULTIPATH_21.0.0 {
|
|
global:
|
|
/* symbols referenced by multipath and multipathd */
|
|
add_foreign;
|
|
@@ -121,6 +121,7 @@ global:
|
|
get_used_hwes;
|
|
get_vpd_sgio;
|
|
group_by_prio;
|
|
+ handle_bindings_file_inotify;
|
|
has_dm_info;
|
|
init_checkers;
|
|
init_config;
|
|
@@ -238,8 +239,3 @@ global:
|
|
local:
|
|
*;
|
|
};
|
|
-
|
|
-LIBMULTIPATH_20.1.0 {
|
|
-global:
|
|
- handle_bindings_file_inotify;
|
|
-};
|
|
diff --git a/libmultipath/prkey.c b/libmultipath/prkey.c
|
|
index a215499d..c66d293b 100644
|
|
--- a/libmultipath/prkey.c
|
|
+++ b/libmultipath/prkey.c
|
|
@@ -157,8 +157,7 @@ static int do_prkey(int fd, char *wwid, char *keystr, int cmd)
|
|
return 0;
|
|
}
|
|
|
|
-int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey,
|
|
- uint8_t *sa_flags)
|
|
+int get_prkey(struct multipath *mpp, uint64_t *prkey, uint8_t *sa_flags)
|
|
{
|
|
int fd;
|
|
int unused;
|
|
@@ -168,7 +167,7 @@ int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey,
|
|
if (!strlen(mpp->wwid))
|
|
goto out;
|
|
|
|
- fd = open_file(conf->prkeys_file, &unused, PRKEYS_FILE_HEADER);
|
|
+ fd = open_file(DEFAULT_PRKEYS_FILE, &unused, PRKEYS_FILE_HEADER);
|
|
if (fd < 0)
|
|
goto out;
|
|
ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_READ);
|
|
@@ -201,7 +200,7 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey,
|
|
sa_flags &= MPATH_F_APTPL_MASK;
|
|
}
|
|
|
|
- fd = open_file(conf->prkeys_file, &can_write, PRKEYS_FILE_HEADER);
|
|
+ fd = open_file(DEFAULT_PRKEYS_FILE, &can_write, PRKEYS_FILE_HEADER);
|
|
if (fd < 0)
|
|
goto out;
|
|
if (!can_write) {
|
|
diff --git a/libmultipath/prkey.h b/libmultipath/prkey.h
|
|
index a16de106..43afd5e4 100644
|
|
--- a/libmultipath/prkey.h
|
|
+++ b/libmultipath/prkey.h
|
|
@@ -16,9 +16,8 @@
|
|
int print_reservation_key(struct strbuf *buff,
|
|
struct be64 key, uint8_t flags, int source);
|
|
int parse_prkey_flags(const char *ptr, uint64_t *prkey, uint8_t *flags);
|
|
-int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey,
|
|
- uint8_t sa_flags);
|
|
-int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey,
|
|
- uint8_t *sa_flags);
|
|
+int set_prkey(struct config *conf, struct multipath *mpp,
|
|
+ uint64_t prkey, uint8_t sa_flags);
|
|
+int get_prkey(struct multipath *mpp, uint64_t *prkey, uint8_t *sa_flags);
|
|
|
|
#endif /* _PRKEY_H */
|
|
diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
|
|
index 354e883f..44241e2a 100644
|
|
--- a/libmultipath/propsel.c
|
|
+++ b/libmultipath/propsel.c
|
|
@@ -401,8 +401,7 @@ int select_alias(struct config *conf, struct multipath * mp)
|
|
|
|
select_alias_prefix(conf, mp);
|
|
|
|
- mp->alias = get_user_friendly_alias(mp->wwid, conf->bindings_file,
|
|
- mp->alias_old, mp->alias_prefix,
|
|
+ mp->alias = get_user_friendly_alias(mp->wwid, mp->alias_old, mp->alias_prefix,
|
|
conf->bindings_read_only);
|
|
|
|
if (mp->alias && !strncmp(mp->alias, mp->alias_old, WWID_SIZE))
|
|
@@ -992,7 +991,7 @@ int select_reservation_key(struct config *conf, struct multipath *mp)
|
|
out:
|
|
if (mp->prkey_source == PRKEY_SOURCE_FILE) {
|
|
from_file = " (from prkeys file)";
|
|
- if (get_prkey(conf, mp, &prkey, &mp->sa_flags) != 0)
|
|
+ if (get_prkey(mp, &prkey, &mp->sa_flags) != 0)
|
|
put_be64(mp->reservation_key, 0);
|
|
else
|
|
put_be64(mp->reservation_key, prkey);
|
|
diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
|
|
index 89bb60ca..591cd09b 100644
|
|
--- a/libmultipath/wwids.c
|
|
+++ b/libmultipath/wwids.c
|
|
@@ -94,12 +94,8 @@ replace_wwids(vector mp)
|
|
struct multipath * mpp;
|
|
size_t len;
|
|
int ret = -1;
|
|
- struct config *conf;
|
|
|
|
- conf = get_multipath_config();
|
|
- pthread_cleanup_push(put_multipath_config, conf);
|
|
- fd = open_file(conf->wwids_file, &can_write, WWIDS_FILE_HEADER);
|
|
- pthread_cleanup_pop(1);
|
|
+ fd = open_file(DEFAULT_WWIDS_FILE, &can_write, WWIDS_FILE_HEADER);
|
|
if (fd < 0)
|
|
goto out;
|
|
|
|
@@ -200,7 +196,6 @@ remove_wwid(char *wwid) {
|
|
int len, can_write;
|
|
char *str;
|
|
int ret = -1;
|
|
- struct config *conf;
|
|
|
|
len = strlen(wwid) + 4; /* two slashes the newline and a zero byte */
|
|
str = malloc(len);
|
|
@@ -216,10 +211,7 @@ remove_wwid(char *wwid) {
|
|
goto out;
|
|
}
|
|
condlog(3, "removing line '%s' from wwids file", str);
|
|
- conf = get_multipath_config();
|
|
- pthread_cleanup_push(put_multipath_config, conf);
|
|
- fd = open_file(conf->wwids_file, &can_write, WWIDS_FILE_HEADER);
|
|
- pthread_cleanup_pop(1);
|
|
+ fd = open_file(DEFAULT_WWIDS_FILE, &can_write, WWIDS_FILE_HEADER);
|
|
|
|
if (fd < 0) {
|
|
ret = -1;
|
|
@@ -244,12 +236,8 @@ check_wwids_file(char *wwid, int write_wwid)
|
|
{
|
|
int fd, can_write, found, ret;
|
|
FILE *f;
|
|
- struct config *conf;
|
|
|
|
- conf = get_multipath_config();
|
|
- pthread_cleanup_push(put_multipath_config, conf);
|
|
- fd = open_file(conf->wwids_file, &can_write, WWIDS_FILE_HEADER);
|
|
- pthread_cleanup_pop(1);
|
|
+ fd = open_file(DEFAULT_WWIDS_FILE, &can_write, WWIDS_FILE_HEADER);
|
|
if (fd < 0)
|
|
return -1;
|
|
|
|
diff --git a/multipath/main.c b/multipath/main.c
|
|
index b91289e8..9e1c5052 100644
|
|
--- a/multipath/main.c
|
|
+++ b/multipath/main.c
|
|
@@ -856,7 +856,7 @@ main (int argc, char *argv[])
|
|
libmp_verbosity = atoi(optarg);
|
|
break;
|
|
case 'b':
|
|
- conf->bindings_file = strdup(optarg);
|
|
+ condlog(1, "option -b ignored");
|
|
break;
|
|
case 'B':
|
|
conf->bindings_read_only = 1;
|
|
diff --git a/multipath/multipath.conf.5.in b/multipath/multipath.conf.5.in
|
|
index 20df2232..d320a88f 100644
|
|
--- a/multipath/multipath.conf.5.in
|
|
+++ b/multipath/multipath.conf.5.in
|
|
@@ -794,35 +794,28 @@ The default is: \fB<unset>\fR
|
|
.
|
|
.TP
|
|
.B bindings_file
|
|
-(Deprecated) This option is deprecated, and will be removed in a future release.
|
|
-The full pathname of the binding file to be used when the user_friendly_names
|
|
-option is set.
|
|
+(Deprecated) This option is not supported any more, and will be ignored.
|
|
.RS
|
|
.TP
|
|
-The default is: \fB@STATE_DIR@/bindings\fR
|
|
+The compiled-in value is: \fB@STATE_DIR@/bindings\fR
|
|
.RE
|
|
.
|
|
.
|
|
.TP
|
|
.B wwids_file
|
|
-(Deprecated) This option is deprecated, and will be removed in a future release.
|
|
-The full pathname of the WWIDs file, which is used by multipath to keep track
|
|
-of the WWIDs for LUNs it has created multipath devices on in the past.
|
|
+(Deprecated) This option is not supported any more, and will be ignored.
|
|
.RS
|
|
.TP
|
|
-The default is: \fB@STATE_DIR@/wwids\fR
|
|
+The compiled-in value is: \fB@STATE_DIR@/wwids\fR
|
|
.RE
|
|
.
|
|
.
|
|
.TP
|
|
.B prkeys_file
|
|
-(Deprecated) This option is deprecated, and will be removed in a future release.
|
|
-The full pathname of the prkeys file, which is used by multipathd to keep
|
|
-track of the persistent reservation key used for a specific WWID, when
|
|
-\fIreservation_key\fR is set to \fBfile\fR.
|
|
+(Deprecated) This option is not supported any more, and will be ignored.
|
|
.RS
|
|
.TP
|
|
-The default is: \fB@STATE_DIR@/prkeys\fR
|
|
+The compiled-in value is: \fB@STATE_DIR@/prkeys\fR
|
|
.RE
|
|
.
|
|
.
|
|
@@ -989,6 +982,10 @@ The default is: \fB<unset>\fR
|
|
.TP
|
|
.B config_dir
|
|
(Deprecated) This option is not supported any more, and the value is ignored.
|
|
+.RS
|
|
+.TP
|
|
+The compiled-in value is: \fB@CONFIGDIR@\fR
|
|
+.RE
|
|
.
|
|
.
|
|
.TP
|
|
diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c
|
|
index d1f8f234..4d6f258c 100644
|
|
--- a/multipathd/uxlsnr.c
|
|
+++ b/multipathd/uxlsnr.c
|
|
@@ -203,7 +203,6 @@ static void reset_watch(int notify_fd, struct watch_descriptors *wds,
|
|
int dir_reset = 0;
|
|
int conf_reset = 0;
|
|
int mp_reset = 0;
|
|
- char *bindings_file __attribute__((cleanup(cleanup_charp))) = NULL;
|
|
|
|
if (notify_fd == -1)
|
|
return;
|
|
@@ -221,7 +220,6 @@ static void reset_watch(int notify_fd, struct watch_descriptors *wds,
|
|
if (wds->mp_wd == -1)
|
|
mp_reset = 1;
|
|
}
|
|
- bindings_file = strdup(conf->bindings_file);
|
|
put_multipath_config(conf);
|
|
|
|
if (dir_reset) {
|
|
@@ -242,17 +240,12 @@ static void reset_watch(int notify_fd, struct watch_descriptors *wds,
|
|
if (wds->conf_wd == -1)
|
|
condlog(3, "didn't set up notifications on /etc/multipath.conf: %m");
|
|
}
|
|
- if (mp_reset && bindings_file) {
|
|
- char *slash = strrchr(bindings_file, '/');
|
|
-
|
|
- if (slash && slash > bindings_file) {
|
|
- *slash = '\0';
|
|
- wds->mp_wd = inotify_add_watch(notify_fd, bindings_file,
|
|
- IN_MOVED_TO|IN_ONLYDIR);
|
|
- if (wds->mp_wd == -1)
|
|
+ if (mp_reset) {
|
|
+ wds->mp_wd = inotify_add_watch(notify_fd, STATE_DIR,
|
|
+ IN_MOVED_TO|IN_ONLYDIR);
|
|
+ if (wds->mp_wd == -1)
|
|
condlog(3, "didn't set up notifications on %s: %m",
|
|
- bindings_file);
|
|
- }
|
|
+ STATE_DIR);
|
|
}
|
|
}
|
|
|
|
diff --git a/tests/alias.c b/tests/alias.c
|
|
index 94df36d8..f893d174 100644
|
|
--- a/tests/alias.c
|
|
+++ b/tests/alias.c
|
|
@@ -1264,10 +1264,10 @@ static void al_a(void **state)
|
|
will_return(__wrap_write, ln);
|
|
will_return(__wrap_write, strlen(BINDINGS_FILE_HEADER) + strlen(ln));
|
|
will_return(__wrap_rename, 0);
|
|
- expect_condlog(1, "updated bindings file foo");
|
|
+ expect_condlog(1, "updated bindings file " DEFAULT_BINDINGS_FILE);
|
|
expect_condlog(3, NEW_STR("MPATHa", "WWIDa"));
|
|
|
|
- alias = allocate_binding("foo", "WWIDa", 1, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 1, "MPATH");
|
|
assert_ptr_not_equal(alias, NULL);
|
|
assert_string_equal(alias, "MPATHa");
|
|
check_bindings_size(1);
|
|
@@ -1283,10 +1283,10 @@ static void al_zz(void **state)
|
|
will_return(__wrap_write, ln);
|
|
will_return(__wrap_write, strlen(BINDINGS_FILE_HEADER) + strlen(ln));
|
|
will_return(__wrap_rename, 0);
|
|
- expect_condlog(1, "updated bindings file foo");
|
|
+ expect_condlog(1, "updated bindings file " DEFAULT_BINDINGS_FILE);
|
|
expect_condlog(3, NEW_STR("MPATHzz", "WWIDzz"));
|
|
|
|
- alias = allocate_binding("foo", "WWIDzz", 26*26 + 26, "MPATH");
|
|
+ alias = allocate_binding("WWIDzz", 26*26 + 26, "MPATH");
|
|
assert_ptr_not_equal(alias, NULL);
|
|
assert_string_equal(alias, "MPATHzz");
|
|
check_bindings_size(1);
|
|
@@ -1298,7 +1298,7 @@ static void al_0(void **state)
|
|
char *alias;
|
|
|
|
expect_condlog(0, "allocate_binding: cannot allocate new binding for id 0\n");
|
|
- alias = allocate_binding(0, "WWIDa", 0, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 0, "MPATH");
|
|
assert_ptr_equal(alias, NULL);
|
|
check_bindings_size(0);
|
|
}
|
|
@@ -1308,7 +1308,7 @@ static void al_m2(void **state)
|
|
char *alias;
|
|
|
|
expect_condlog(0, "allocate_binding: cannot allocate new binding for id -2\n");
|
|
- alias = allocate_binding(0, "WWIDa", -2, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", -2, "MPATH");
|
|
assert_ptr_equal(alias, NULL);
|
|
check_bindings_size(0);
|
|
}
|
|
@@ -1325,10 +1325,10 @@ static void al_write_partial(void **state)
|
|
will_return(__wrap_write, ln + sizeof(ln) - 2);
|
|
will_return(__wrap_write, 1);
|
|
will_return(__wrap_rename, 0);
|
|
- expect_condlog(1, "updated bindings file foo");
|
|
+ expect_condlog(1, "updated bindings file " DEFAULT_BINDINGS_FILE);
|
|
expect_condlog(3, "Created new binding [MPATHa] for WWID [WWIDa]\n");
|
|
|
|
- alias = allocate_binding("foo", "WWIDa", 1, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 1, "MPATH");
|
|
assert_ptr_not_equal(alias, NULL);
|
|
assert_string_equal(alias, "MPATHa");
|
|
check_bindings_size(1);
|
|
@@ -1350,7 +1350,7 @@ static void al_write_short(void **state)
|
|
expect_condlog(1, "failed to write new bindings file");
|
|
expect_condlog(1, "allocate_binding: deleting binding MPATHa for WWIDa");
|
|
|
|
- alias = allocate_binding("foo", "WWIDa", 1, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 1, "MPATH");
|
|
assert_ptr_equal(alias, NULL);
|
|
check_bindings_size(0);
|
|
}
|
|
@@ -1366,7 +1366,7 @@ static void al_write_err(void **state)
|
|
expect_condlog(1, "failed to write new bindings file");
|
|
expect_condlog(1, "allocate_binding: deleting binding MPATHa for WWIDa");
|
|
|
|
- alias = allocate_binding("foo", "WWIDa", 1, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 1, "MPATH");
|
|
assert_ptr_equal(alias, NULL);
|
|
check_bindings_size(0);
|
|
}
|
|
@@ -1383,7 +1383,7 @@ static void al_rename_err(void **state)
|
|
|
|
expect_condlog(0, "update_bindings_file: rename: Read-only file system");
|
|
expect_condlog(1, "allocate_binding: deleting binding MPATHa for WWIDa");
|
|
- alias = allocate_binding("foo", "WWIDa", 1, "MPATH");
|
|
+ alias = allocate_binding("WWIDa", 1, "MPATH");
|
|
assert_ptr_equal(alias, NULL);
|
|
check_bindings_size(0);
|
|
}
|
|
@@ -1415,7 +1415,7 @@ static int test_allocate_binding(void)
|
|
strlen(BINDINGS_FILE_HEADER) + (len) + strlen(ln)); \
|
|
will_return(__wrap_rename, err); \
|
|
if (err == 0) { \
|
|
- expect_condlog(1, "updated bindings file x\n"); \
|
|
+ expect_condlog(1, "updated bindings file " DEFAULT_BINDINGS_FILE); \
|
|
expect_condlog(3, NEW_STR(alias, wwid)); \
|
|
} else { \
|
|
expect_condlog(0, "update_bindings_file: rename: " msg "\n"); \
|
|
@@ -1441,7 +1441,7 @@ static void gufa_empty_new_rw(void **state) {
|
|
expect_condlog(3, NOMATCH_WWID_STR("WWID0"));
|
|
|
|
mock_allocate_binding("MPATHa", "WWID0");
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1454,7 +1454,7 @@ static void gufa_empty_new_ro_1(void **state) {
|
|
expect_condlog(3, NOMATCH_WWID_STR("WWID0"));
|
|
mock_allocate_binding_err("MPATHa", "WWID0", -EROFS, "Read-only file system");
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", false);
|
|
assert_ptr_equal(alias, NULL);
|
|
}
|
|
|
|
@@ -1465,7 +1465,7 @@ static void gufa_empty_new_ro_2(void **state) {
|
|
expect_condlog(3, NOMATCH_WWID_STR("WWID0"));
|
|
mock_unused_alias("MPATHa");
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", true);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", true);
|
|
assert_ptr_equal(alias, NULL);
|
|
}
|
|
|
|
@@ -1477,7 +1477,7 @@ static void gufa_match_a_unused(void **state) {
|
|
mock_unused_alias("MPATHa");
|
|
expect_condlog(3, EXISTING_STR("MPATHa", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", true);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", true);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1490,7 +1490,7 @@ static void gufa_match_a_self(void **state) {
|
|
mock_self_alias("MPATHa", "WWID0");
|
|
expect_condlog(3, EXISTING_STR("MPATHa", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", true);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", true);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1503,7 +1503,7 @@ static void gufa_match_a_used(void **state) {
|
|
expect_condlog(3, FOUND_STR("MPATHa", "WWID0"));
|
|
mock_used_alias("MPATHa", "WWID0");
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", true);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", true);
|
|
assert_ptr_equal(alias, NULL);
|
|
}
|
|
|
|
@@ -1518,7 +1518,7 @@ static void gufa_nomatch_a_c(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHb", "WWID1", strlen(bindings));
|
|
|
|
- alias = get_user_friendly_alias("WWID1", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID1", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHb");
|
|
free(alias);
|
|
}
|
|
@@ -1534,7 +1534,7 @@ static void gufa_nomatch_c_a(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHb", "WWID1", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID1", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID1", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHb");
|
|
free(alias);
|
|
}
|
|
@@ -1550,7 +1550,7 @@ static void gufa_nomatch_c_b(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHa", "WWID0", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1567,7 +1567,7 @@ static void gufa_nomatch_c_b_used(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHd", "WWID4", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID4", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID4", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHd");
|
|
free(alias);
|
|
}
|
|
@@ -1584,7 +1584,7 @@ static void gufa_nomatch_b_f_a(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHc", "WWID7", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID7", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID7", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHc");
|
|
free(alias);
|
|
}
|
|
@@ -1599,7 +1599,7 @@ static void gufa_nomatch_b_aa_a(void **state) {
|
|
mock_unused_alias("MPATHab");
|
|
mock_allocate_binding_len("MPATHab", "WWID28", get_strbuf_len(&buf));
|
|
|
|
- alias = get_user_friendly_alias("WWID28", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID28", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHab");
|
|
free(alias);
|
|
}
|
|
@@ -1616,7 +1616,7 @@ static void gufa_nomatch_b_f_a_sorted(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHc", "WWID7", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID7", "x", "", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID7", "", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHc");
|
|
free(alias);
|
|
}
|
|
@@ -1632,7 +1632,7 @@ static void gufa_old_empty(void **state) {
|
|
mock_allocate_binding("MPATHz", "WWID0");
|
|
expect_condlog(2, ALLOC_STR("MPATHz", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHz");
|
|
free(alias);
|
|
}
|
|
@@ -1644,7 +1644,7 @@ static void gufa_old_match(void **state) {
|
|
"MPATHz WWID0");
|
|
expect_condlog(3, FOUND_ALIAS_STR("MPATHz", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHz");
|
|
free(alias);
|
|
}
|
|
@@ -1661,7 +1661,7 @@ static void gufa_old_match_other(void **state) {
|
|
|
|
mock_allocate_binding_len("MPATHa", "WWID0", sizeof(bindings) - 1);
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1678,7 +1678,7 @@ static void gufa_old_match_other_used(void **state) {
|
|
mock_unused_alias("MPATHb");
|
|
|
|
mock_allocate_binding_len("MPATHb", "WWID0", sizeof(bindings) - 1);
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHb");
|
|
free(alias);
|
|
}
|
|
@@ -1695,7 +1695,7 @@ static void gufa_old_match_other_wwidmatch(void **state) {
|
|
mock_unused_alias("MPATHc");
|
|
expect_condlog(3, EXISTING_STR("MPATHc", "WWID2"));
|
|
|
|
- alias = get_user_friendly_alias("WWID2", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID2", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHc");
|
|
free(alias);
|
|
}
|
|
@@ -1711,7 +1711,7 @@ static void gufa_old_match_other_wwidmatch_used(void **state) {
|
|
expect_condlog(3, FOUND_STR("MPATHc", "WWID2"));
|
|
mock_used_alias("MPATHc", "WWID2");
|
|
|
|
- alias = get_user_friendly_alias("WWID2", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID2", "MPATHz", "MPATH", false);
|
|
assert_ptr_equal(alias, NULL);
|
|
}
|
|
|
|
@@ -1725,7 +1725,7 @@ static void gufa_old_nomatch_wwidmatch(void **state) {
|
|
mock_unused_alias("MPATHa");
|
|
expect_condlog(3, EXISTING_STR("MPATHa", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHa");
|
|
free(alias);
|
|
}
|
|
@@ -1739,7 +1739,7 @@ static void gufa_old_nomatch_wwidmatch_used(void **state) {
|
|
expect_condlog(3, FOUND_STR("MPATHa", "WWID0"));
|
|
mock_used_alias("MPATHa", "WWID0");
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_ptr_equal(alias, NULL);
|
|
}
|
|
|
|
@@ -1754,7 +1754,7 @@ static void gufa_old_nomatch_nowwidmatch(void **state) {
|
|
mock_allocate_binding_len("MPATHz", "WWID0", sizeof(bindings) - 1);
|
|
expect_condlog(2, ALLOC_STR("MPATHz", "WWID0"));
|
|
|
|
- alias = get_user_friendly_alias("WWID0", "x", "MPATHz", "MPATH", false);
|
|
+ alias = get_user_friendly_alias("WWID0", "MPATHz", "MPATH", false);
|
|
assert_string_equal(alias, "MPATHz");
|
|
free(alias);
|
|
}
|