1 2005-05-23 multipath-tools-0.4.5
3 * [libmultipath] default_prio and prio_callout keyword can be
4 explicitly set to "none". Suggested by Kiyoshi Ueda, NEC
5 * [path_prio] don't exit pp_balance_units with error when
6 find_controler() is not successful. It just means no other
7 path is currently active on this controler.
8 * [path_prio] move balance_units in its own dir
9 * [multipathd] proactively fail_path upon checker up->down
10 transitions. Suggested by Edward Goggin, EMC
11 * [libmultipath] .priority is clearly an int, not an unsigned
12 int. /bin/false is now personna non grata as a prio callout.
14 * [libmultipath] callout.c argv parsing fix. Kiyoshi Ueda,
16 * [multipathd] check return codes in init_paths(), split out
18 * [libmultipath] add find_slot(vec, addr) to vector lib.
19 * [multipath] remove signal sending
20 * [multipathd] use uevent to do paths list housekeeping for
21 checkers. Remove signal handling.
22 * [libmultipath] add uevent.[ch]
24 2005-04-23 multipath-tools-0.4.4
26 * [path_prio] clarify pp_alua licensing. Stefan Bader, IBM.
27 * [devmap_name] add a target_type filter (suggested by Hannes)
28 and set DM task device by major:minor rather than parsing
30 * [libmultipath] propagate an error on getprio callout
31 failures, so that multipath can mark the map as immutable.
32 Reported by Lars Marowsky-Brée, Suse.
33 * [libmultipath] move push_callout() from dict.c to config.c
34 Use it in store_hwe() to get in multipathd's ramfs the
35 callout defined in hwtable.c when no config file is used.
36 Reported by Lars Marowsky-Brée, Suse.
37 * [checkers] zero sense buffers before use in EMC checker.
38 Lars Marowsky-Brée, Suse.
39 * [all] pre-release bugfixing effort from Alasdair, Hannes,
40 Lars, Benjamin Marzinski
41 * [multipathd] set oom_adj to -17 when kernel permits.
42 Immune to OOM killer ? agk says : watch out for mem
44 * [multipathd] safety nets from udevd : exit early if
45 not root, chdir to / to avoid pining a mount.
46 * [multipathd] multipathd could loose events coming from
47 sighup or DM waitev. Add a pending_event counter to
49 * [path_prio] add pp_emc from Lars M Bree, Suse.
50 * [path_prio] add pp_alua from Stefan Bader, IBM.
51 * [libmultipath] add config.c:load_config(), which sucks
52 a big chunk of code out of multipath/main.c.
53 * [libmultipath] don't allocate memory in :
54 * devmapper.c:dm_get_map()
55 * devmapper.c:dm_get_status()
56 * [libmultipath] devinfo() a la carte fetching
57 * [libmultipath] merge keepalived memory audit framework
58 (Thanks again, M. Cassen). Already found and fixed a
60 * [libmultipath] flatten/optimize dm_map_present() and
61 dm_mapname(). Inspired by Alasdair Kergon, RedHat.
62 * [kpartx] dm_map_name() free before use bugfix. Kiyoshi
64 * [kpartx] add hotplug mode. To enable name the binary
65 "kpartx.dev". Kiyoshi Ueda, NEC
66 * [multipathd] don't loose events in event waiter thread.
67 Suggested and prototyped by Edward Goggin, EMC
68 * [libmultipath] add return values to vector manipulation
69 fonctions. Mem alloc return code audit.
70 * [libmultipath] Use "config->udev_dir + path->dev" as
71 a path devnode to open instead of mknod'ing for each
72 one. Fix some DoS issues regarding usage of /tmp in
73 libmultipath/discovery.c:opennode(). Kill unlinknode()
74 * [multipathd] merged the redhat init script and stop
75 installing one on "make install"
76 * [libmultipath] fold safe_sprintf.h into util.h
77 * [libmultipath] move blacklist to a real regex matcher
78 Example config files updated : check yours !!
79 * [multipath] fix path group compare logic to not stop
80 comparing at first path in each PG.
81 * [multipathd] check if pidfile is a dead remnent of a
82 crashed daemon. If so, overwrite it. Suggested by
83 Alasdair Kergon, RedHat. Code heavily based on work
84 by Andrew Tridgell, Samba Fame.
85 * [build] dropped libdevmapper/ and libsysfs/ from the
86 package. klibc build is now broken until distributors
87 provide klibc compiled static libraries in their
89 * [libmultipath] dm_task_no_open_count() before each DM
90 ioctl. Not doing that is reported to cause deadlocks
91 in kernel-space. Reported by Edward Goggin, EMC, fix
92 suggested by Alasdair Kergon, RedHat
93 Note minimal libdevmapper version bumped up to 1.01.
94 * [multipath] switched to condlog(). "make DEBUG=N" is
95 deprecated. Debug is spat with "-v3" or more.
96 * [multipathd] "multipathd -vN" cmdline arg to control
97 daemon verbosity. 0 < N < 4. "make LOGLEVEL=N" is
99 * [libmultipath] provide a common condlog() primitive to
100 switch lib messages to syslog or stdout depending on
101 who uses the lib (daemon or tool).
102 * [kpartx] give kpartx a private, slim copy of devmap.[ch]
103 * [multipath] allow wwid in blacklist{} config section.
105 * [multipathd] set mode value before use (S_IRWXU). Fixes
106 RedHat Bugzilla Bug 150665.
107 * [all] add ->fd to "struct path *". remove fd from all
108 checker context declaration. remove lots of duplicate
109 logic. Now a fd is opened only once for path. It should
110 also bring a bit safety in contended memory scenarii
111 * [libcheckers] remove redundant sg_include.h
112 * [libmultipath] merge multipath:dict.[ch] with
113 multipathd:dict.[ch] into libmultipath/. move config.h
114 there too, add some helper functions to alloc/free
115 "struct config *" in a new config.c. Start using a
116 config in the daemon.
117 * [libmultipath] move dm_geteventnr(), dm_get_maps() and
118 dm_switchgroup() in devmapper.[ch]
119 * [libmultipath] move path discovery logic in
120 libmultipath. merge devinfo.[ch] and sysfs_devinfo.[ch]
122 * [libmultipath] move config.h in libmultipath. Move
123 find_[mp|hw]e in a new config.c. Move "struct hwtable"
124 declaration in config.h. Move propsel.[ch] in the
126 * [multipathd] use libmultipath:dm_type() instead of
127 duplacate and bogus devmap discovery code.
128 * [multipathd] asynchronous & non-blocking logger
129 thread. Implementation split into a generic log
130 lib and a pthread wrapper for locking and events.
131 An ipc wrapper could be easily created by
133 * [multipath] add "multipath -l -v2 [devname|devt]"
134 support in complement to [mapname|wwid]
135 * [kpartx] suppress loop.h private copy. Should fix
136 the reported build problems
137 * [multipath] do sysfs_get_mnt_path() only one time
138 and store in a global var.
139 * [multipath] further path discovery optimzation
140 * [multipath] purge superfluous includes in main.c
141 * [libmultipath] introduce a cache file. expiry set
142 to 5 secondes to covert the hotplug event storms.
143 * [multipath] split get_pathvec_sysfs(). Introduce
144 get_refwwid() and filter_pathvec()
146 2005-03-19 multipath-tools-0.4.3
148 * [libmultipath] rename find_[mp|hw] to find_[mp|hw]e and
149 introduce a real find_mp().
150 * [priority] provison for recursive compilation of prio
151 subdirs, in preparation of merging more signicant
152 prioritizers. Stephan Bader, IBM
153 * [libmultipath] add a netapp controler to the hwtable
154 * [libmultipath] blacklist() not to discard sda[0-9]*
155 when sda is blacklisted
156 * [multipath] add a rr_min_io keyword in config file.
157 Suggested by Igor Feoktistov, NetApp
158 * [multipath] stop trying to avoid running in parallel
159 * [multipath] bump up params size to 1024
160 * [multipathd] put prio callouts in to ramfs. Stephan
162 * [multipath] simplify multibus pgpolicy : no need to
163 copy mp->paths into mp->pg->paths then free source :
164 just copy the ptr and set source to NULL.
165 * [multipath] sort PG by descending prio value in
166 group_by_prio. Stephan Bader, IBM
167 * [multipath] fix a bug in group_by_prio that lead to
168 creation of multiple PG for a single prio value
169 * [multipath] don't store multipaths in a vector anymore :
170 free the "struct multipath" after usage.
171 * [multipath] multiple optimizations in the exec plan
172 * [multipath] allow "multipath -l -v2 [mapname|wwid]"
173 * [build] rip off klibc and move to klcc, at last.
174 Good job hpa. multipath-tools now depend on klibc
175 > 1.0 to build with BUILD=klibc flag.
176 * [multipath] never reload a map if no path is up in the
178 * [multipath] don't flush maps with open count != 0
179 * [libmultipath] add "int *dm_get_opencount(char *map)"
181 * [multipath] plug leaks and optimize devinfo.c. From
183 * [multipath] fix the multipath.dev hotplug script to not
184 do kpartx stuff in the same run as multipath stuff.
185 Igor Feoktistov, NetApp, noted the devmap symlink was
186 not yet present for kpartx to use.
187 * [devmap_name] accept major:minor synthax
188 * [libmultipath] add "char *dm_mapname(int maj, int min)",
189 needed to fail paths from checker thread
190 * [libmultipath] move dm_reinstate() in the lib, and add
192 * [multipathd] mark failed path as failed upon DM
193 event. This should fix the design bug noticed by
194 Ramesh Caushik, Intel, where the daemon didn't run
195 multipath when a path went down and up in between 2
197 * [libmultipath] allow NULL as a pathvec in disassemble_map
198 as is passed only for memory optimization
199 * [libmultipath] add structs.c to store alloc_*() and
201 * [libmultipath] move dmparser.[ch] to the lib.
202 remove devinfo.[ch] dependency.
203 * [build] fix compilation glitch with BUILD=klibc,
204 flags to force use of local libs, remove the link
205 dependency in klibc, try to guess kernel sources
206 and build dirs. Stefan Bader, IBM
207 * [libmultipath] find_hw matching logic to take str
208 lengths in account. Noticed by Ramesh Caushik, Intel
209 * [multipath] select_action matching logic to take str
211 * [multipath] lookup mp alias name earlier (in coalesce)
212 Edward Goggin, EMC, noticed we tried to use it before
215 2005-01-23 multipath-tools-0.4.2
217 * [libmultipath] add symmetrix controler family to the
218 hwtable. Edward Goggin, EMC
219 * [libmultipath] factorize core structs (path, ...)
220 and defaults (pidfile, configfile, ...). Convert
222 * [multipath] fix dmparser to properly fetch non-default
223 hwhandler. Edward Goggin, EMC
224 * [multipath] fix devt2devname matching 8:1 with 8:10
225 for example. Edward Goggin, EMC
226 * [multipath] switch_pg upon devmap create or reload
228 * [libmultipath] move find_hw() the library. Convert
229 users. Now multipathd understand '*' as a product
231 * [multipath] dissaemble_map() fix to avoid to
232 interpret 'D' as a disable PG (not 'F'). Edward
234 * [multipath] find_path() fix to avoid matching 8:1
235 with 8:10 for example. Edward Goggin, EMC
236 * [libmultipath] move some sysfs fetching routines
237 to library, under sysfs_devinfo.[ch]. Convert
239 * [multipath] fix -v0 : avoids the daemon waiting
240 for the initial multipath run to complete, which
241 will never happen because of a flooded pipe
242 * [multipathd] add scsi_id to default binvec
243 * [libmultipath] move hwtable related logic to the
244 library. Convert multipath and multipathd
245 * [multipath] move first blacklist call down after
246 setup_default_blist()
247 * [libmultipath] move basename() to the lib. Convert
248 multipath and multipathd.
249 * [libmultipath] move blacklist related logic to the
250 library. Convert multipath and multipathd
251 * [multipath] fix bug in the default hardware table
252 matching logic (Lars M-B, Suse)
253 * [multipath] allow "*" as scsi model string wildcard
255 * [multipath] provide a macro to fill all hwe fields,
256 use it to declare Clariion models (Lars M-B, Suse)
257 * [multipath] use DEFAULT_GETUID instead of hardcoded
258 *and* incorrect "/bin/scsi_id -g -s" (Lars M-B, Suse)
259 * [multipath] kill superfluous suspend before table
260 reload. The code was unsafe, as spotted by Edward
262 * [multipath] exit early if device parameter is
264 * [multipath] don't check for prefix in initrd's
265 multipath.dev : this is the tool responsability to
266 exit early based on its blacklist.
267 * [multipath] don't signal the daemon in initrd
268 (Guido Guenther, Debian tracker)
269 * [multipath] better fail to run kpartx in initrd
270 than crashing the whole system. So don't sleep
271 waiting for udev to create the DM node. Maybe udev
272 has made progress I this regard ... (noticed by
273 Paul Wagland, Debian tracker)
274 * [multipath] don't reinstate when listing, ie list
276 * [checkers] fix the emc checker (Hergen Lange)
277 * [multipath] node_name fetching shouldn't exit on
278 error. FC SAN are not the only multipathed context
279 (noticed by Ramesh Caushik)
281 2004-12-20 multipath-tools-0.4.1
283 * [multipath] bump SERIAL_SIZE to 19
284 * [multipath] add a new group_by_node_name pgpolicy
285 * [multipath] move getopt policy parser to
287 * [multipath] remove get_evpd_wwid()
288 * [checkers] fix the wwn_set test in emc checker
290 * [checkers] treat the emc checker in the name to
291 index translator function (Hergen Lange)
292 * [multipath] print to stderr DM unmet requirement
294 * [multipath] fix realloc return value store not
295 propagated to caller by merge_word() (Nicola Ranaldo)
297 2004-12-10 multipath-tools-0.4.0
299 * [checkers] forgot to return back to caller the newly
300 allocated context. Lead to fd leak notably.
301 * [checkers] heavy check logic fix
302 * [checkers] really malloc the checker context size,
303 not the pointer size (stupidy may kill)
304 * [multipathd] check more sysfs calls return values
305 * [multipathd] search for sysfs mount point only once,
306 not on each updatepaths() iteration
307 * [multipathd] plug (char *) leak in the daemon
308 * [multipath] change pgcmp logic : we want to reload a
309 map only if a path is in computed map but not in cur
310 map (ie accept to load a map if it brings more paths)
311 * [multipath] undust coalesce_paths()
312 * [multipath] don't print unchanged multipath
313 * [multipath] store the action to take in the multipath
315 * [multipath] print mp size with kB, MB, GB or TB units
316 * [multipath] compilation fix for merge_words() (Andy)
317 * [multipath] don't feed the kernel DM maps with paths of
318 different sizes : DM fails and we end up with an empty
320 * [multipath] cover a new corner case : path listed in
321 status string but disappeared from sysfs
322 * [multipath] remove the "-D" command line flag : now
323 we can pass major:minor directly as last argument, like
324 device names or device map names. Update multipathd
326 * [multipath] try reinstate again paths after a switchpg
327 * [multipath] reinstate condition change :
329 2004-12-05 multipath-tools-0.3.9
331 * [multipath] add a "-l" flag to list the current
332 multipath maps and their status info
333 * [priority] zalloc controler to avoid random path_count
335 * [multipath] add configlet pointers in struct multipath
336 to avoid searching for an entry over and over again
337 * [multipath] new reinstate policy : on multipath exec,
338 reinstate all failed paths the checkers report as ready
339 if they belong to enabled path groups (not disabled, not
341 * [multipath] fork a print_mp() out of print_all_mp()
342 * [multipath] introduce PG priority, which is the sum of
343 its path priorities. Set first_pg in the map string to
344 the highest prio PG index.
345 * [multipath] assemble maps scaning PG top down now that
346 PG vector is unsorted
347 * [multipath] move select_*() to propsel.c
348 * [multipath] move devinfo() to devinfo.c
349 * [multipath] move h/b/t/l fetching to sysfs_devinfo()
350 * [multipath] move devt2devname() to devinfo.c so we can
351 use it from dmparser.c too
352 * [multipath] introduce select_alias() and clarify a bit
354 * [multipath] don't sort PG anymore. We want the map as
356 * [multipath] fix a segfault in apply_format() triggered
357 when no config file found.
358 * [multipath] kill unused vars all over the place
359 * [multipath] add a struct pathgroup in struct multipath
360 Store the pathvec in it. We now have a place to store
362 * [multipath] new dmparser.c, with disassemble_map(),
364 * [multipath] suppress *selector_args keywords. Merge
365 in the selector string. Update config file templates.
367 2004-11-26 multipath-tools-0.3.8
369 * [priority] teach multipath to read callout keywords
370 formatted as /sbin/scsi_id -g -u -s /block/%n
371 Apply one substitutions out of :
372 * %n : blockdev basename (ie sdb)
373 * %d : blockdev major:minor string (ie 8:16)
374 update sample config files
375 * [priority] fix find_controler(). Now works, verified
376 on IBM T200 at OSDL (thanks again, Dave). Add to the
378 * [multipath] add a controler specific "prio_callout"
379 keyword. Noticed by Ake
380 * [multipath] normalize the debug ouput
381 * [multipath] add select_getuid(). De-spaghetti
382 devinfo() thanks to that helper.
383 * [libmultipath] add VECTOR_LAST_SLOT macro.
384 multipath/dict.h now use it heavily.
385 * [multipath] policies selectors speedup and cleanup
386 (pgpolicy, features, hwhandler, selector)
387 * [multipath] new "flush" command flag
388 * [libmultipath] add dm_type() and dm_flush_maps()
389 * [multipath] move dm_get_map() to libmultipath
390 * [multipath] rename iopolicy to pgpolicy everywhere.
391 Dual terminology was getting confusing.
392 * [multipath] assemble_map() to always set next_pg to 1
394 * [multipath] update config file to show new keywords.
395 Add an IBM array tested at OSDL.
396 * [multipath] fork select_iopolicy() from setup_map()
397 * [multipath] introduce select_features() and
398 select_hwhandler(). Should merge select_* one day ...
399 * [multipath] add features and hardware_handler keywords
400 and use them in the map setup
401 * [build] make clean really clean. Noticed by Dave Olien,
403 * [multipath] group_by_serial bugfix
404 * [multipath] dm_addmap() return value fix. Now multipath
405 really creates the maps
406 * [multipath] try dm_log_init_verbose() instead of dup()
407 + close() to silence libdevmapper (Ake at umu)
408 * [libcheckers] remove checkpath() wrapper, obsoleted by
409 the "fd in context" changes
410 * [multipathd] let pathcheckers allocate their context.
411 No more over or unneeded allocation. Suggested by Lars,
413 * [multipathd] store the pathcheckers fd in their context.
414 No more open / close on each check. Suggested by Lars,
417 2004-11-05 multipath-tools-0.3.7
419 * [multipathd] fix off by one memory allocation (Hannes,
421 * [multipathd] introduce a default callout handler that
422 just remembers to put the callout in ramfs, even if the
423 daemon has no direct use of them. multipath need some
424 that where forgotten, so parse them and use that default
426 * [libcheckers] emc_clariion checker update (Lars, Suse)
427 * [build] exit build process on failure (Lars, Suse)
428 * [kpartx] exit early if DM prereq not met
429 * [multipath] exit early if DM prereq not met
430 * [libmultipath] new dm_prereq() fn to check out if all DM
431 prerequisites are met
432 * [libmultipath] move callout.[ch] function in there.
433 multipath and multipathd impacted
434 * [libmultipath] move dm_* function in there. kpartx,
435 multipath are impacted
436 * [priority] pp_balance_lun should use DM_DEVICE_TABLE ioctl
437 instead of DM_DEVICE_STATUS to find out paths from the
439 * [klibc] drop in "Stable" version 0.190
440 * [build] add manpages for kpartx and multipathd (Patrick
442 * [build] use system's sysfs for multipathd linking
443 * [build] make glibc the default build
444 * [build] "make BUILD=klibc" is enough, deprecate the
445 "make BUILD=klibc klibc" synthax
447 2004-10-30 multipath-tools-0.3.6
449 * Patrick Caulfield took over debian packaging. Showing
450 evident expertise, his first wish is to see debian/
451 disappear. :) So be it.
452 * [libmultipath] add a vector_foreach_slot macro. Still
453 needs an iterator but saves 1 line per loop occurence and
454 tame this UPPERCASE MACROS bad taste.
455 * [multipathd] don't load sg anymore on multipathd startup
456 * [multipathd] change killall for kill `cat $PIDFILE` in
457 init script (Jaime Peñalba & Cesar Solera)
458 * [multipathd] the fork fallback was borked (just exiting)
459 noticed by Jaime Peñalba & Cesar Solera
460 * [multipathd] try without the FLOATING_STACKS flag. Does
462 * [multipathd] merge clone_platform.h from LTP and cover
463 the hppa special case.
464 * [multipath] since we will be able to create a devmap with
465 paths too small, don't rely anymore on the first path's
466 size blindly : verify the path is up, before assigning its
467 size to the multipath
468 * [priority] add a path priority fetcher to balance LU accross
469 controlers based on the controler serial detection. Untested
470 but provides a good example of what can be done with the
472 * [priority] create subdir and drop a test pp_random
473 * [multipath] add dev_t reporting to print_path() to ease
474 devmap decoding by humans
475 * [multipath] change default path priority to 1
476 * [multipath] add wits to the sort_by_prio policy, so that
477 sort_pathvec_by_prio() is now useless. Remove it.
478 * [multipath] invert sort_pg_by_summed_prio sort order :
479 highest prio leftmost
480 * [libmultipath] add vector_del_slot
481 * revert multipath.rules change : devmap_name still takes
482 "major minor" and not "major:minor" as argument
483 * Makefile refinement : you can now enter any tool directory
484 and build from here, deps are solved
486 2004-10-26 multipath-tools-0.3.5
488 * [multipathd] fix broken test for path going up or shaky
489 that kept executing multipath when it shouldn't
490 * change multipath.dev to exit early when udev' DEVNAME is
491 a devmap (/dev/dm-*). This avoids a recursion case when
492 the kernel devmapper keeps removing a map after multipath
494 * change multipath.rules to follow the new -D synthax
495 * [multipath] "-D major minor" synthax changed to
496 "-D major:minor" to match the sysfs attribute value.
497 This change removes a few translations in multipath and
499 * [multipath] fix segfault in test if conf->dev is a devmap
500 (the one forwarded by MikeAnd)
501 * SG_IO ioctl seem to work in lk 2.6.10+, so remove all sg
502 device knowledge and advertise (here) the new dependency.
503 * [multipath] remove unused do_tur()
504 * [multipath] fix sort_pg_by_summed_prio(), and don't add up
507 2004-10-26 multipath-tools-0.3.4
509 * [multipathd] exec multipath precisely : pass in the path
510 or the devmap to update. No more full reconfiguration, and
511 really use the reinstate feature of multipath.
512 * [multipathd] check all paths, not only failed ones. Path
513 checker now trigger on state change (formerly triggred on
514 state == UP condition)
515 * [multipathd] incremental updatepaths() instead of scrap /
517 * [multipathd] path checkers now take *msg and *context
518 params. consensus w/ lmb at suse. tur.c modified as example
519 * [multipath] assemble maps in PG vector descending order to
520 fit the layered policies design
521 * [multipath] stop playing with strings in pgpolicies, as it
522 uses more memory and looses info for no gain
523 * [multipath] remove lk2.4 scsi ioctl scsi_type remnant
524 * [multipath] layered pgpolicies : (see pgpolicies.c)
526 * group_by_serial | multibus | failover | group_by_prio
527 * sort_pg_by_summed_prio
528 thus remove duplicated failedpath logic in pgpolicies
529 * [libmultipath] add vector_insert_slot
530 * [checkers] framework for arbitrate checkers return values
531 * [multipathd] scrap yet another reinvented wheel in the
532 name of the LOG macro : learn the existance of setloglevel
534 * glibc make with "make BUILD=glibc", asked by lmb at suse
536 2004-10-20 multipath-tools-0.3.3
538 * [checkers] add the emc_clariion path checker (lmb at Suse)
539 * [multipath] introduce safe_snprintf macro to complement the
540 safe_sprintf. Needed to cover the sizeof(pointer) cases
541 pointed by Dave Olien at OSDL
542 * [multipath] move to the common libchecker framework and
543 activate the selector
544 * [multipath] fix an iopolicy selector bug (initialized lun
545 iopolicy overrode controler-wide iopolicy)
546 * [multipathd] cleanly separate out the checker selector, as
547 done with iopolicy selector
548 * [multipathd] move out the checkers into a common libcheckers
549 * [multipath] fix the anti-parallel-exec logic : use a write
550 lease for the task. From Dave Olien at osdl.
551 * [multipath] fix reinstate : pass a devt, not a devname
553 2004-10-16 multipath-tools-0.3.2
555 * [multipath] add path reinstate logic :
556 * if a path is given as multipath arg
557 * if the map containing that path already exists
558 * if this map is the same as the that would be
559 created by this multipath run
560 * THEN reinstate the path
561 multipathd is is thus unchanged, while now supporting
563 * audit and ensafe all sprintf usage
564 * [multipath] fix the annoying \n after each dev_t in
565 params string reporting
566 * [multipath] print out devmaps in "-v2 -d" mode
567 * [kpartx] bump up the params string size (lmb at suse)
568 * [kpartx] replace sprintf by snprintf (lmb at suse)
569 * [kpartx] initialize some more vars (lmb at suse)
570 * [multipath] mp->pg == NULL safety net before calling
571 assemble_map() (for Andy who happen to hit the bug)
572 * [multipath] last rampant bug in map CREATE or UPDATE switch
573 logic due to the device alias feature
574 * [kpartx] zeroe "struct slice all" (lmb at suse)
576 2004-10-11 multipath-tools-0.3.1
578 * [kpartx] move back to getopt, originaly removed from the
579 original partx because of lack of implementation in klibc
580 * [kpartx] don't map extended partitions
581 * [kpartx] add a -p command flag to allow admin to force a
582 delimiting string between disk name and part number. When
583 specified always use it, when unspecified use 'p' as a delim
584 when last char of disk name is a digit, NUL otherwise.
586 * bump klibc to 0.182
587 * one step further : use klibc MCONFIG for all klibc specific
588 FLAGS definitions, ie massive Makefile.inc cleanup
589 * follow the klibc compilation rules by appending its OPTFLAGS
590 to multipath-tools' CFLAGS. This corrects the segfaults seen
591 on i386 where klibc is built with regparm=3 and tools are not
592 * [multipathd] fall back to fork when clone not available
594 * [kpartx] move .start and .size from uint to ulong (Ake)
595 * briefly document system-disk-on-multipath in the FAQ file
597 2004-10-06 multipath-tools-0.3.0
599 * first cut at making scripts to create multipath-aware initrds
600 those scripts are tested on Debian SID, and must be copied into
601 /etc/mkinitrd/scripts. it works here.
602 * [multipath] verify presence of the /sys/block/... node before
603 reading sysfs attributes. Avoids libsysfs and scsi_id stderr
605 * [multipath] move down the stderr close (Ake Sandgren at umu.se)
606 * [multipath] don't care about 0-sized mp (Ake Sandgren at umu.se)
607 * [multipath] bump mp size field to ulong (Ake Sandgren at umu.se)
608 * [multipath] replace quiet/verbose flags by a verbosity one.
609 introduce a new verbosity level : 1 == print only devmap names
610 thus we can feed kpartx with that output
611 * [multipath] update man page to reflect the hotplug.d -> dev.d
612 transition and replace the obsolete group_by_tur policy by the
613 forgotten group_by_prio
614 * [multipath] provide a /etc/udev/rules.d/multipath.rules for
615 multipath devices naming. Cleaner than the previously suggested
616 rule addition in the main udev.rules
617 * [multipath] move out of hotplug.d to dev.d : kill synchronisation
618 problems between device node creation and multipath execution.
619 Incidentally the unfriendly $DEVPATH param become a friendly
620 $DEVNAME (simply /dev/sdb)
621 * [multipath] rework the iopolicies name-to-id & id-to-name
622 translations. kills the last compilation warning here too
623 * [kpartx] kill last compilation warnings
624 * bump klibc to 0.181
625 * add the debian/ packaging dir (make deb)
626 * prototype __clone & __clone2
628 2004-09-24 multipath-tools-0.2.9
630 * [multipathd] finally tame the clone compilation glitch on IA64
631 move from sys_clone to __clone / __clone2
632 * [kpartx] rework from Stephan Bader, IBM :
635 * push the partname string size to handle wwwids
636 * quieten implicit cast warnings
637 * [multipath] add an 'alias' multipath keyword for friendlier device
638 names. This was "asked" by OSDL' CGL board of secret reviewers
639 * [multipath] last pass with JBOD and parallel SCSI support :
640 hard-code scsi_id as a fallback when disk strings doesn't match
642 * [multipath & multipathd] change the parser to not coalesce
643 consecutive spaces (Patrick Mansfield)
644 * [multipath] remove the [UN]: output prefix, so that stdout can be
645 easily fed to a tool like dmsetup
646 * [multipathd] DEBUG=3 logs more readable/usefull
647 * [multipathd] add a multipath_tool config keyword
648 * [multipathd] move to execute_program() like multipath already did
649 * [multipath] don't print the "no path" msg in quiet mode
650 * [multipathd] include linux/unistd.h for _syscall2
651 definition on RedHat systems. Remove superfluous
653 * [libsysfs] forked : last version uses mntent, which
654 klibc doesn't provide. That, plus the fact we use
655 only 1/3 of the lib, pushed me to freeze the version
656 and strip all unused stuff.
657 * [multipathd] prepare_namespace() cleanup : no more "multipath"
658 special casing since we push it to binvec vector, like the other
659 callouts detected in the config file.
661 2004-08-13 multipath-tools-0.2.8
663 * [multipathd] setsched prio to RT
664 * [multipath] massive include cleanup
665 * [multipath] add a "default_prio_callout" keyword
666 first user will be SPC-3 ALUA priority field fetcher
668 * [multipath] reenable stdout on some error paths
669 * [build] spilt KERNEL_DIR into KERNEL_SOURCE &
670 KERNEL_BUILD as per 2.6 and SuSe convention
671 * [klibc] kill warnings due to awk parsing wrong locale in
673 * [multipath] implement a generic group_by_prio pgpolicy
674 * [multipath] fix the broken failover pgpolicy
676 2004-07-24 multipath-tools-0.2.7
678 * [multipath] args parser moved to getopt
679 <genanr@emsphone.com>
680 * [multipath] zero conf->hotplugdev at allocation
681 <genanr@emsphone.com>
682 * [multipath] clean up failed devmap creation attempt
683 * [libs] update to libdevmapper 1.00.19
684 * [multipath] framework for claimed device skipping
685 still lacks a reliable way to know if the device is
686 claimed and by who (fs, swap, md, dm, ...). If you
687 think it is valid to let libdevmapper hit the wall,
688 please speak up and tell so.
689 * [multipath] shut down stderr when calling into libdm
690 * [multipath] reformat the verbose output
691 * [multipath] framework for path priority handling (ALUA)
692 * [multipath] kill all reference to group_by_tur
693 * [multipath] integrate path state logic into multibus &
694 failover pgpolicies. This obsoletes the group_by_tur one
695 which is now the same as multibus.
696 * [multipath] zalloc mp structs to avoid garbage in ->size
697 * bump version requisite for scsi_id to 0.6 to support the new
698 '-u' flag (s/ /_/ for proper JBOD device map naming)
699 * [multipath] correct the for(;;) limits to accept 1-slot
701 * [multipath] push WWID_SIZE to 64 char (scsi_id w/ JBODs)
702 * [multipath] add a exit_tool() wrapper fn for runfile unlink
703 * [multipath] add a "default_path_grouping_policy" keyword in the
705 * [multipath] add a "default_getuid_callout" keyword in the
706 "defaults" block. Now multipath is going to work with JBODs
707 * [multipath] fix segfault when pathvec is empty after
709 * move to template based specfile to avoid regular version skew
711 2004-07-16 multipath-tools-0.2.6
713 * [multipathd] implement the system-disk-on-SAN safety net
714 * [multipathd] add exit_daemon() wrapper function
715 * [multipathd] mlockall() all daemon threads
716 * [multipath] fix a bug in the mp_iopolicy_handler that kept
717 the iopolicy per LUN override from working
718 * [multipath] display the tur bit value in print_path
720 * try to open /$udev/reverse/$major:$minor before falling back
722 * add "udev_dir" to the defaults block in the config file
723 * merge "daemon" & "device_maps" config blocks into a new
725 * [multipath] properly comment the config file
726 * [multipath] generalize the dbg() macro usage
727 Makefile now has a DEBUG flag
728 * [multipath] move to callout based WWID fetching. Default to
729 scsi_id callout. I merged execute_program from udev for that
730 (so credit goes to GregKH)
731 * [multipath] get rid of "devnodes in /dev" assumption
732 ie move to "maj:min" device mapper target synthax
734 2004-07-10 multipath-tools-0.2.5
736 * [multipathd] fix misbehaviour noted by <genanr@emsphone.com>
737 improper tar directive in Makefile on some systems
738 * [multipathd] fix bug noted by <genanr@emsphone.com>
739 get_devmaps fills a private vector and forget to pass its
741 * [multipath] extend EVPD 0x83 id fetching logic.
742 Code borrowed from scsi_id (thanks goes to Patrick
743 Mansfield @IBM) and merged by Hannes Reinecke @SUSE
744 * [multipathd] fix regression noted by <genanr@emsphone.com>
745 (segfault when no config file)
747 2004-06-20 multipath-tools-0.2.4
749 * [multipathd] break free from system's libsysfs for now
750 as it is not that common these days
751 * [multipath] introduce per LUN policies in the config
752 file : path_grouping_policy, path_selector and
753 path_selector_args are supported.
754 See updated sample config file.
755 * [multipath] move ->iopolicy to multipath struct (from
757 * [multipath] fill the voids left in the config file with
759 * [multipath] group config & flags in a global struct *
760 * [multipath] fix segfault when no config file (was a
761 regression since hwtable vectorisation in 0.2.2)
762 * [multipath] default path selector override in config file
763 * [multipath] don't play with strings in pgpolicies, leave
764 that to a new assemble_map fn. policies now use vector
765 * [multipathd] compilation fix for gentoo (Franck Denis)
766 * [multipath] strcmp fix (Franck Denis)
768 2004-06-14 multipath-tools-0.2.3
770 * [multipath] group_by_serial try to be smart with LUN
771 balancing across controlers (for STK / LSI) :
772 1st multipath : 1st pg made of path through 1st controler
773 2nd multipath : 1st pg made of path through 2nd controler
774 3rd multipath : 1st pg made of path through 1st controler
776 * [multipath] drop .pindex[] in struct multipath in favor
777 of a *paths vector : much cleaner
778 * [multipath] fix group_by_serial pgpolicy broken by
779 vectorisation in 0.2.2
780 * add a StorageTek array in the sample multipath.conf
781 * [multipathd] strcmp fix from Franck Denis
782 * [multipathd] convert to vector api
783 * [multipathd] add a configfile option for path checking
784 interval. See sample configfile for synthax.
786 2004-06-07 multipath-tools-0.2.2
788 * [multipath] leave out 2.4 compat code. Is there
790 * [multipath] convert all_paths table to vector api.
791 Rename to pathvec. Get rid of max_devs
792 * [multipath] convert mp table to vector api
793 * convert blacklist to vector api
794 * 2.6.7-rc? adds _user annotations to scsi/sg.h, causing
795 compilation breakage. Add a "#define _user" in all
796 sg_include.h (and remove cruft)
797 * merge a real parser (from keepalived) courtesy of
798 Alexandre Cassen. Now multipath and multipathd share a
799 config file. This comes with a nice vector lib.
800 * devnode blacklist moved from hardcoded to config file
801 * Guy Coates noted -O2 CFLAGS lead to multipathd crashes
802 on IA64. Remove the needless optimisation for now.
804 2004-06-05 multipath-tools-0.2.1
806 * [multipath] add a flag to inihibit the final SIGHUP to
807 multipathd. Needed to avoid recursion with the correction
809 * [multipathd] devmap event now triggers a multipath exec
810 in addition to the usual updatepaths()
811 * [multipathd] move checkers from sg_io on BLK onto CHR
812 readsector0 goes from read to sg_read
813 * [multipathd] rely on sysfs for failedpaths enum and no
814 longer on the device mapper
815 * [multipathd] convert get_lun_strings from ioctl to sysfs
816 so we can benefit from strings persistency for failed
818 * [multipath] readconfig() to take only 8 char from vendor
820 * [multipath] remove unecessery and wrong getuid == NULL
821 check from devinfo() (ake)
822 * [multipathd] make readsector0 open path O_DIRECT
823 * [multipathd] sizeof(path) -> sizeof(struct path) (MikeC)
824 * [Makefile] don't try to install and uninstall libs
825 * [devmap_name] kill the wrong trailing '\n'
827 * [kpartx] works with device nodes outside /dev
828 * [kpartx] correctly display the delimiter in partition
831 2004-05-17 multipath-tools-0.2.0
833 * change the default klibc by greg's :
834 corrects the segfaults reported by Ling Hwa Hing
836 2004-05-16 multipath-tools-0.1.9
838 * break free from udev : package klibc and libsysfs
839 * add a spec file and a "make rpm" rule
840 * pensum on klibc changes needed :
841 * mmap.c & fork.c : invert includes
842 * make clean wipes .*.d
843 * auto create the linux symlink
844 * remove tools and specfiles (files and Makefile
847 2004-05-15 multipath-tools-0.1.8
849 * Makefiles cleanup and factorisation
850 * Compilation fixes for non-ix86 archs, tested on x86_64
851 * strip execs harder for a 10% size reduction
852 * blacklist /dev/fd* and /dev/loop*
853 * dmadm works with sysfs nodes with '!' (cciss for ex)
855 2004-05-10 multipath-tools-0.1.7
857 * bugfixes from Andy <genanr@emsphone.com> :
858 * read the last line of the config file
859 * add an entry for the 3PARData storage ctlrs
860 * read the last char of vendor and model strings
862 2004-04-25 multipath-tools-0.1.6
864 * add the dmadm WIP tool (read MD superblocks and create
865 corresponding devmaps when possible)
866 * plug fd leak in TUR path checker
868 2004-03-25 multipath-tools-0.1.5
870 * kpartx to manage the nested bdevs as /dev/cciss/c0d0.
871 parts are named sysfs style : cciss!c0d0p*
872 * kpartx loop support
873 * kpartx do DM updates if part maps already present
874 * merge kpartx for partitioned multipath support
875 * add get_null_uid to getuid methods. assign it the "0" index
876 devices with this getuid are thus ignored by multipath.
877 warning : change /etc/multipath.conf (get_evpd_wwid == 1)
878 * mv all_scsi_ids out of the 2.6 code path, into the 2.4 one
879 * unlink runfile on malloc exit path
880 * update multipath manpage (MikeC)
882 2004-03-17 multipath-tools-0.1.4
885 * split default hw table in hwtable.h
886 * split grouping policies in pgpolocies.c
887 * pass *mp to setup_map instead of mp[]+index
888 * ensure defhwtable is used if /etc/multipath.conf is buggy
889 * hwtable is not global anymore
890 * unlink the runfile in various error paths
892 2004-03-13 multipath-tools-0.1.3
894 * multipath config tool now has a config file parser
895 (did I say I make the ugliest parsers ?)
896 * example multipath.conf to put in /etc (manualy)
898 2004-03-12 multipath-tools-0.1.2
900 * detach the per devmap waiter threads
901 * set the thread stack size to lower limits
902 (VSZ down to 4MB from 85 MB here)
904 2004-03-06 multipath-tools-0.1.1
906 * include dlist.h in multipath main.c (PM Hahn)
907 * typo in hotplug script (PM Hahn)
908 * pass -9 opt to gzip for manpages (PM Hahn)
910 2004-03-05 multipath-tools-0.1.0
912 * add the group_by_tur policy
913 * add the multipathd daemon for pathchecking & DM hot-reconfig
914 * multipath doesn't run twice
915 * massive cleanups, and code restructuring
916 * Avoid Kernel Bug when passing too small a buffer in do_inq()
917 * Sync with 2.6.3-udm4 target synthax (no more PG prio)
919 2004-02-21 multipath-018
921 * From the Debian SID inclusion review (Philipp Matthias Hahn)
922 * use DESTDIR install prefix in the Makefile
923 * add man pages for devmap_name & multipath
924 * correct libsysfs.h includes
925 * fork the hotplug script in its own shell
926 * Sync with the kernel device mapper code as of 2.6.3-udm3
927 ie. Remove the test interval parameter and its uses
928 * Remove superfluous scsi parameter passed from hotplug
929 * Add the man pages to the [un]install targets
931 2004-02-17 multipath-017
933 * remove the restrictive -f flag.
934 Introduce a more generic "-m iopolicy" one.
935 * remove useless "int with_sysfs" in env struct
937 2004-02-04 multipath-016
939 * add a GROUP_BY_SERIAL flag. This should be useful for
940 controlers that activate they spare paths on simple IO
941 submition with a penalty. The StorageWorks HW defaults to
942 this mode, even if the MULTIBUS mode is OK.
943 * remove unused sg_err.c
944 * big restructuring : split devinfo.c from main.c. Export :
945 * void basename (char *, char *);
946 * int get_serial (int, char *);
947 * int get_lun_strings (char *, char *, char *, char *);
948 * int get_evpd_wwid(char *, char *);
949 * long get_disk_size (char *);
950 * stop passing struct env as param
951 * add devmap_name proggy for udev to name devmaps as per their
952 internal DM name and not only by their sysfs enum name (dm-*)
953 The corresponding udev.rules line is :
954 KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", \
955 NAME="%k", SYMLINK="%c"
956 * remove make_dm_node fn & call. Rely on udev for this.
957 * don't rely on the linux symlink in the udev/klibc dir since
958 udev build doesn't use it anymore. This corrects build breakage
960 2004-01-19 multipath-013
962 * update the DM target synthax to the 2.6.0-udm5 style
964 2003-12-29 multipath-012
966 * check hotplug event refers to a block device; if not exit early
968 * add the uninstall target in Makefile
970 2003-12-22 multipath-010
972 * tweak the install target in Makefile
973 * stop passing fds as argument : this change enable a strict
974 segregation of ugly 2.4 code
975 * sysfs version of get_lun_strings()
976 * be careful about the return of get_unique_id() since errors
977 formerly caught up by if(open()) in the caller fn are now returned
979 * send get_serial() in unused.c
980 * introduce dm-simplecmd for RESUME & SUSPEND requests
981 * split add_map() in setup_map() & dm-addmap()
982 * setup_map() correctly submits "SUSPEND-RELOAD-RESUME or CREATE"
983 sequences instead of the bogus "RELOAD or CREATE"
984 * don't print .sg_dev if equal to .dev (2.6) in print_path()
985 * since the kernel code handles defective paths, remove all
986 code to cope with them :
987 * move do_tur() to unused.c
988 * remove .state from path struct
989 * remove .state settings & conditionals
990 * add a cmdline switch to force maps to failover mode,
991 ie 1 path per priority group
992 * add default policies to the whitelist array (spread io ==
993 MULTIBUS / io forced to 1 path == FAILOVER)
994 * move get_disk_size() call out of add_map() to coalesce()
995 * comment tricky coalesce() fn
996 * bogus unsused.c file renamed to unused.c
998 2003-12-20 multipath-010
1000 * big ChangeLog update
1001 * start to give a little control over target params :
1002 introduce cmdline arg -i to control polling interval
1003 * cope with hotplug-style calling convention :
1004 ie "multipath scsi $DEVPATH" ... to avoid messing with
1005 online maps not concerned by an event
1006 * example hotplug agent to drop in /etc/hotplug.d/scsi
1007 * revert the run & resched patch : unless someone proves me
1008 wrong, this was overdesigned
1009 * move commented out functions in unused.c
1010 * update multipath target params to "udm[23] style"
1011 * mp target now supports nr_path == 1, so do we
1012 * add gratuitous free()
1013 * push version forward
1015 2003-12-15 multipath-009
1017 * Make the HW-specific get_unique_id switch pretty
1018 * Prepare to field-test by whitelisting all known fibre array,
1019 try to fetch WWID from the standard EVPD 0x83 off 8 for everyone
1020 * configure the multipath target with round-robin path selector and
1021 conservative default for a start (udm1 style) :
1022 yes it makes this release the firstreally useful one.
1023 * temporarily disable map creation for single path device
1024 due to current restrictive defaults in the kernel target.
1025 Sistina should work it out.
1026 * correct the strncmp logic in blacklist function.
1027 * update the Makefiles to autodetect libgcc.a & gcc includes
1028 "ulibc-style". Factorisation of udevdirs & others niceties
1029 * drop a hint about absent /dev/sd? on failed open()
1030 * implement a reschedule flag in /var/run.
1031 Last thing the prog do before exit is check if a call to multipath
1032 was done (but canceled by /var/run/multipath.run check) during its
1033 execution. If so restart themain loop.
1034 * implement a blacklist of sysfs bdev to not bother with for now
1035 (hd,md, dm, sr, scd, ram, raw).
1036 This avoid sending SG_IO to unappropiate devices.
1037 * Adds a /var/run/multipath.run handling to avoid simultaneous runs.
1038 * Remove a commented-out "printf"
1039 * drop a libdevmapper copy in extras/multipath;
1040 maybe discussions w/Sistina folks will bring a better solution
1042 * drop a putchar usage in libdevmapper to compile cleanly with klibc
1043 * drop another such usage of my own in main.c
1044 * massage the Makefile to compile libdevmapper against klibc
1045 * use "ld" to produce the binary rather than "gcc -static"
1046 * stop being stupid w/ uneeded major, minor & dev in main.c:dm_mk_node()
1047 * reverse to creating striped target for now because the multipath
1048 target is more hairy than expected initialy
1049 * push the version code to 009 to be in synch w/ udev
1051 2003-11-27 multipath-007
1053 * removes sg_err.[ch] deps
1054 * makes sure the core code play nice with klibc
1055 * port the sysfs calls to dlist helpers
1056 * links against udev's sysfs (need libsysfs.a & dlist.a)
1057 * finally define DM_TARGET as "multipath" as Joe posted the code today
1059 * push version forward (do you want it in sync with udev version?)
1061 2003-11-19 multipath-006
1063 * merged in udev-006 tree
1065 2003-09-18 multipath-0.0.1
1067 * multipath 0.0.1 released.