]>
Commit | Line | Data |
---|---|---|
289c5516 MT |
1 | --- |
2 | libmultipath/config.c | 1 + | |
3 | libmultipath/config.h | 1 + | |
4 | libmultipath/dict.c | 33 +++++++++++++++++++++++++++++++++ | |
5 | libmultipath/discovery.c | 8 ++++++-- | |
6 | multipath.conf.annotated | 10 ++++++++++ | |
7 | multipath/multipath.conf.5 | 9 +++++++++ | |
8 | 6 files changed, 60 insertions(+), 2 deletions(-) | |
9 | ||
10 | Index: multipath-tools-130222/libmultipath/config.c | |
11 | =================================================================== | |
12 | --- multipath-tools-130222.orig/libmultipath/config.c | |
13 | +++ multipath-tools-130222/libmultipath/config.c | |
14 | @@ -556,6 +556,7 @@ load_config (char * file, struct udev *u | |
15 | conf->retain_hwhandler = DEFAULT_RETAIN_HWHANDLER; | |
16 | conf->detect_prio = DEFAULT_DETECT_PRIO; | |
17 | conf->hw_strmatch = 0; | |
18 | + conf->force_sync = 0; | |
19 | ||
20 | /* | |
21 | * preload default hwtable | |
22 | Index: multipath-tools-130222/libmultipath/config.h | |
23 | =================================================================== | |
24 | --- multipath-tools-130222.orig/libmultipath/config.h | |
25 | +++ multipath-tools-130222/libmultipath/config.h | |
26 | @@ -115,6 +115,7 @@ struct config { | |
27 | int reassign_maps; | |
28 | int retain_hwhandler; | |
29 | int detect_prio; | |
30 | + int force_sync; | |
31 | unsigned int version[3]; | |
32 | ||
33 | char * dev; | |
34 | Index: multipath-tools-130222/libmultipath/dict.c | |
35 | =================================================================== | |
36 | --- multipath-tools-130222.orig/libmultipath/dict.c | |
37 | +++ multipath-tools-130222/libmultipath/dict.c | |
38 | @@ -712,6 +712,29 @@ def_hw_strmatch_handler(vector strvec) | |
39 | return 0; | |
40 | } | |
41 | ||
42 | +static int | |
43 | +def_force_sync_handler(vector strvec) | |
44 | +{ | |
45 | + char * buff; | |
46 | + | |
47 | + buff = set_value(strvec); | |
48 | + | |
49 | + if (!buff) | |
50 | + return 1; | |
51 | + | |
52 | + if ((strlen(buff) == 2 && !strcmp(buff, "no")) || | |
53 | + (strlen(buff) == 1 && !strcmp(buff, "0"))) | |
54 | + conf->force_sync = 0; | |
55 | + else if ((strlen(buff) == 3 && !strcmp(buff, "yes")) || | |
56 | + (strlen(buff) == 1 && !strcmp(buff, "1"))) | |
57 | + conf->force_sync = 1; | |
58 | + else | |
59 | + conf->force_sync = 0; | |
60 | + | |
61 | + FREE(buff); | |
62 | + return 0; | |
63 | +} | |
64 | + | |
65 | /* | |
66 | * blacklist block handlers | |
67 | */ | |
68 | @@ -2822,6 +2845,15 @@ snprint_def_hw_strmatch(char * buff, int | |
69 | } | |
70 | ||
71 | static int | |
72 | +snprint_def_force_sync(char * buff, int len, void * data) | |
73 | +{ | |
74 | + if (conf->force_sync) | |
75 | + return snprintf(buff, len, "yes"); | |
76 | + else | |
77 | + return snprintf(buff, len, "no"); | |
78 | +} | |
79 | + | |
80 | +static int | |
81 | snprint_ble_simple (char * buff, int len, void * data) | |
82 | { | |
83 | struct blentry * ble = (struct blentry *)data; | |
84 | @@ -2889,6 +2921,7 @@ init_keywords(void) | |
85 | install_keyword("retain_attached_hw_handler", &def_retain_hwhandler_handler, &snprint_def_retain_hwhandler_handler); | |
86 | install_keyword("detect_prio", &def_detect_prio_handler, &snprint_def_detect_prio); | |
87 | install_keyword("hw_str_match", &def_hw_strmatch_handler, &snprint_def_hw_strmatch); | |
88 | + install_keyword("force_sync", &def_force_sync_handler, &snprint_def_force_sync); | |
89 | __deprecated install_keyword("default_selector", &def_selector_handler, NULL); | |
90 | __deprecated install_keyword("default_path_grouping_policy", &def_pgpolicy_handler, NULL); | |
91 | __deprecated install_keyword("default_uid_attribute", &def_uid_attribute_handler, NULL); | |
92 | Index: multipath-tools-130222/libmultipath/discovery.c | |
93 | =================================================================== | |
94 | --- multipath-tools-130222.orig/libmultipath/discovery.c | |
95 | +++ multipath-tools-130222/libmultipath/discovery.c | |
96 | @@ -952,8 +952,12 @@ get_state (struct path * pp, int daemon) | |
97 | } | |
98 | } | |
99 | checker_clear_message(c); | |
100 | - if (daemon) | |
101 | - checker_set_async(c); | |
102 | + if (daemon) { | |
103 | + if (conf->force_sync == 0) | |
104 | + checker_set_async(c); | |
105 | + else | |
106 | + checker_set_sync(c); | |
107 | + } | |
108 | if (!conf->checker_timeout && | |
109 | (pp->bus != SYSFS_BUS_SCSI || | |
110 | sysfs_get_timeout(pp, &(c->timeout)))) | |
111 | Index: multipath-tools-130222/multipath.conf.annotated | |
112 | =================================================================== | |
113 | --- multipath-tools-130222.orig/multipath.conf.annotated | |
114 | +++ multipath-tools-130222/multipath.conf.annotated | |
115 | @@ -214,6 +214,8 @@ | |
116 | # # values : n > 0 | |
117 | # # default : determined by the OS | |
118 | # dev_loss_tmo 600 | |
119 | +# | |
120 | +# # | |
121 | # # name : bindings_file | |
122 | # # scope : multipath | |
123 | # # desc : The location of the bindings file that is used with | |
124 | @@ -222,6 +224,14 @@ | |
125 | # # default : "/var/lib/multipath/bindings" | |
126 | # bindings_file "/etc/multipath_bindings" | |
127 | # | |
128 | +# # | |
129 | +# # name : force_sync | |
130 | +# # scope : multipathd | |
131 | +# # desc : If set to yes, multipath will run all of the checkers in | |
132 | +# # sync mode, even if the checker has an async mode. | |
133 | +# # values : yes|no | |
134 | +# # default : no | |
135 | +# force_sync yes | |
136 | #} | |
137 | # | |
138 | ## | |
139 | Index: multipath-tools-130222/multipath/multipath.conf.5 | |
140 | =================================================================== | |
141 | --- multipath-tools-130222.orig/multipath/multipath.conf.5 | |
142 | +++ multipath-tools-130222/multipath/multipath.conf.5 | |
143 | @@ -411,6 +411,15 @@ modify an existing config, or create a n | |
144 | , the user device configs will be regular expression matched against the | |
145 | built-in configs instead. Default is | |
146 | .I no | |
147 | +.TP | |
148 | +.B force_sync | |
149 | +If set to | |
150 | +.I yes | |
151 | +, multipathd will call the path checkers in sync mode only. This means that | |
152 | +only one checker will run at a time. This is useful in the case where many | |
153 | +multipathd checkers running in parallel causes significant CPU pressure. The | |
154 | +Default is | |
155 | +.I no | |
156 | . | |
157 | .SH "blacklist section" | |
158 | The |