Initial git import.
[multipath-tools/.git] / ChangeLog
1 2005-05-23 multipath-tools-0.4.5
2
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.
13           Kiyoshi Ueda, NEC
14         * [libmultipath] callout.c argv parsing fix. Kiyoshi Ueda,
15           NEC
16         * [multipathd] check return codes in init_paths(), split out
17           init_event().
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]
23
24 2005-04-23 multipath-tools-0.4.4
25
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
29           the full map list.
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
43           leaks :/
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
48           track that.
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
59           couple of leaks.
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
63           Ueda, NEC
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
88           respective packages.
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
98           deprecated.
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.
104           Kiyoshi Ueda, NEC.
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]
121           into discovery.[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
125           lib too.
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
132           interested parties.
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()
145
146 2005-03-19 multipath-tools-0.4.3
147
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
161           Bader, IBM
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
177           computed new map
178         * [multipath] don't flush maps with open count != 0
179         * [libmultipath] add "int *dm_get_opencount(char *map)"
180           to devmapper.c
181         * [multipath] plug leaks and optimize devinfo.c. From
182           Edward Goggin, EMC
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
191           dm_fail_path()
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
196           checks.
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
200           free_*()
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 
210           length in account.
211         * [multipath] lookup mp alias name earlier (in coalesce)
212           Edward Goggin, EMC, noticed we tried to use it before
213           it was set up.
214
215 2005-01-23 multipath-tools-0.4.2
216
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
221           callers.
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
227           Noticed by Ake.
228         * [libmultipath] move find_hw() the library. Convert
229           users. Now multipathd understand '*' as a product
230           string
231         * [multipath] dissaemble_map() fix to avoid to
232           interpret 'D' as a disable PG (not 'F'). Edward
233           Goggin, EMC
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
238           callers.
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
254           (Lars M-B, Suse)
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
261           Goggin (EMC)
262         * [multipath] exit early if device parameter is
263           blacklisted
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
275           implies dry_run
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)
280
281 2004-12-20 multipath-tools-0.4.1
282
283         * [multipath] bump SERIAL_SIZE to 19
284         * [multipath] add a new group_by_node_name pgpolicy
285         * [multipath] move getopt policy parser to
286           get_policy_id()
287         * [multipath] remove get_evpd_wwid()
288         * [checkers] fix the wwn_set test in emc checker
289           (Hergen Lange)
290         * [checkers] treat the emc checker in the name to 
291           index translator function (Hergen Lange)
292         * [multipath] print to stderr DM unmet requirement
293           (Guido Guenther)
294         * [multipath] fix realloc return value store not
295           propagated to caller by merge_word() (Nicola Ranaldo)
296
297 2004-12-10 multipath-tools-0.4.0
298
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
314           struct
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
319           map ... not fun
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
325           accordingly.
326         * [multipath] try reinstate again paths after a switchpg
327         * [multipath] reinstate condition change : 
328
329 2004-12-05 multipath-tools-0.3.9
330
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
334           at allocation time
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
340           active path group)
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
353           of code
354         * [multipath] don't sort PG anymore. We want the map as
355           static as possible.
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
361           PG status, etc ...
362         * [multipath] new dmparser.c, with disassemble_map(),
363           disassemble_status()
364         * [multipath] suppress *selector_args keywords. Merge
365           in the selector string. Update config file templates.
366
367 2004-11-26 multipath-tools-0.3.8
368
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
377           main build process
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
393           for now.
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,
402           OSDL
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,
412           Suse
413         * [multipathd] store the pathcheckers fd in their context.
414           No more open / close on each check. Suggested by Lars,
415           Suse
416
417 2004-11-05 multipath-tools-0.3.7
418
419         * [multipathd] fix off by one memory allocation (Hannes,
420           Suse)
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
425           handler.
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
438           primary path groups.
439         * [klibc] drop in "Stable" version 0.190
440         * [build] add manpages for kpartx and multipathd (Patrick
441           Caulfield)
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
446
447 2004-10-30 multipath-tools-0.3.6
448
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
461           it matter anyway ?
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
471           priority framework.
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
485
486 2004-10-26 multipath-tools-0.3.5
487
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
493           configures it.
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
498           multipathd.
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
505           failed path priority
506
507 2004-10-26 multipath-tools-0.3.4
508
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 /
516           refresh all logic.
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)
525                 * group_by_status
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
533           and LOG_UPTO macro
534         * glibc make with "make BUILD=glibc", asked by lmb at suse
535
536 2004-10-20 multipath-tools-0.3.3
537
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
552
553 2004-10-16 multipath-tools-0.3.2
554
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
562           reinstate
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)
575
576 2004-10-11 multipath-tools-0.3.1
577
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.
585         * [kpartx] clean up
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
593           like in Debian Woody
594         * [kpartx] move .start and .size from uint to ulong (Ake)
595         * briefly document system-disk-on-multipath in the FAQ file
596
597 2004-10-06 multipath-tools-0.3.0
598
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
604           garbage
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
627
628 2004-09-24 multipath-tools-0.2.9
629
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 :
633                 * handle s390x arch
634                 * endianness fixes
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
641           any hwtable entry
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
652           asm/unistd.h include
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.
660
661 2004-08-13 multipath-tools-0.2.8
662
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
667           from IBM
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
672           arch/i386/MCONFIG
673         * [multipath] implement a generic group_by_prio pgpolicy
674         * [multipath] fix the broken failover pgpolicy
675
676 2004-07-24 multipath-tools-0.2.7
677
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
700           pathvecs
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
704           "defaults" block.
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
708           get_pathvec()
709         * move to template based specfile to avoid regular version skew
710
711 2004-07-16 multipath-tools-0.2.6
712
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
719           as requested by SUN
720         * try to open /$udev/reverse/$major:$minor before falling back
721           to mknod
722         * add "udev_dir" to the defaults block in the config file
723         * merge "daemon" & "device_maps" config blocks into a new
724           "defaults" block
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
733
734 2004-07-10 multipath-tools-0.2.5
735
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
740           address to caller
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)
746
747 2004-06-20 multipath-tools-0.2.4
748
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
756           path struct)
757         * [multipath] fill the voids left in the config file with
758           defaults
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)
767
768 2004-06-14 multipath-tools-0.2.3
769
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
775           ...
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.
785
786 2004-06-07 multipath-tools-0.2.2
787
788         * [multipath] leave out 2.4 compat code. Is there
789           interest anyway ?
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.
803
804 2004-06-05 multipath-tools-0.2.1
805
806         * [multipath] add a flag to inihibit the final SIGHUP to
807           multipathd. Needed to avoid recursion with the correction
808           below
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
817           paths
818         * [multipath] readconfig() to take only 8 char from vendor
819           string (ake)
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'
826           (Mike Christie)
827         * [kpartx] works with device nodes outside /dev
828         * [kpartx] correctly display the delimiter in partition
829           name outputs
830
831 2004-05-17 multipath-tools-0.2.0
832
833         * change the default klibc by greg's :
834           corrects the segfaults reported by Ling Hwa Hing
835
836 2004-05-16 multipath-tools-0.1.9
837
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
845                   targets)
846
847 2004-05-15 multipath-tools-0.1.8
848
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)
854
855 2004-05-10 multipath-tools-0.1.7
856
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
861
862 2004-04-25 multipath-tools-0.1.6
863
864         * add the dmadm WIP tool (read MD superblocks and create
865           corresponding devmaps when possible)
866         * plug fd leak in TUR path checker
867
868 2004-03-25 multipath-tools-0.1.5
869
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)
881
882 2004-03-17 multipath-tools-0.1.4
883
884         * multipath clean up
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
891
892 2004-03-13 multipath-tools-0.1.3
893
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)
897
898 2004-03-12 multipath-tools-0.1.2
899
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)
903
904 2004-03-06 multipath-tools-0.1.1
905
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)
909
910 2004-03-05 multipath-tools-0.1.0
911
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)
918
919 2004-02-21 multipath-018
920
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
930
931 2004-02-17 multipath-017
932
933         * remove the restrictive -f flag.
934           Introduce a more generic "-m iopolicy" one.
935         * remove useless "int with_sysfs" in env struct 
936
937 2004-02-04 multipath-016
938
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
959
960 2004-01-19 multipath-013
961
962         * update the DM target synthax to the 2.6.0-udm5 style
963
964 2003-12-29 multipath-012
965
966         * check hotplug event refers to a block device; if not exit early
967         * refresh doc
968         * add the uninstall target in Makefile
969
970 2003-12-22 multipath-010
971
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
978           by get_unique_id()
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
997
998 2003-12-20 multipath-010
999
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
1014
1015 2003-12-15 multipath-009
1016
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
1041           in the future.
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
1050
1051 2003-11-27 multipath-007
1052
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
1058           (not tested yet)
1059         * push version forward (do you want it in sync with udev version?)
1060
1061 2003-11-19 multipath-006
1062
1063         * merged in udev-006 tree
1064
1065 2003-09-18 multipath-0.0.1
1066
1067         * multipath 0.0.1 released.
1068         * Initial release.