summaryrefslogtreecommitdiff
path: root/ChangeLog
blob: 2f19064ee91ae3c93b3b389321fa7fc1a22da9a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
2005-05-23 multipath-tools-0.4.5

	* [libmultipath] default_prio and prio_callout keyword can be
	  explicitly set to "none". Suggested by Kiyoshi Ueda, NEC
	* [path_prio] don't exit pp_balance_units with error when
	  find_controler() is not successful. It just means no other
	  path is currently active on this controler.
	* [path_prio] move balance_units in its own dir
	* [multipathd] proactively fail_path upon checker up->down
	  transitions. Suggested by Edward Goggin, EMC
	* [libmultipath] .priority is clearly an int, not an unsigned
	  int. /bin/false is now personna non grata as a prio callout.
	  Kiyoshi Ueda, NEC
	* [libmultipath] callout.c argv parsing fix. Kiyoshi Ueda,
	  NEC
	* [multipathd] check return codes in init_paths(), split out
	  init_event().
	* [libmultipath] add find_slot(vec, addr) to vector lib.
	* [multipath] remove signal sending
	* [multipathd] use uevent to do paths list housekeeping for
	  checkers. Remove signal handling.
	* [libmultipath] add uevent.[ch]

2005-04-23 multipath-tools-0.4.4

	* [path_prio] clarify pp_alua licensing. Stefan Bader, IBM.
	* [devmap_name] add a target_type filter (suggested by Hannes)
	  and set DM task device by major:minor rather than parsing
	  the full map list.
	* [libmultipath] propagate an error on getprio callout
	  failures, so that multipath can mark the map as immutable.
	  Reported by Lars Marowsky-Brée, Suse.
	* [libmultipath] move push_callout() from dict.c to config.c
	  Use it in store_hwe() to get in multipathd's ramfs the
	  callout defined in hwtable.c when no config file is used.
	  Reported by Lars Marowsky-Brée, Suse.
	* [checkers] zero sense buffers before use in EMC checker.
	  Lars Marowsky-Brée, Suse.
	* [all] pre-release bugfixing effort from Alasdair, Hannes, 
	  Lars, Benjamin Marzinski
	* [multipathd] set oom_adj to -17 when kernel permits.
	  Immune to OOM killer ? agk says : watch out for mem
	  leaks :/
	* [multipathd] safety nets from udevd : exit early if
	  not root, chdir to / to avoid pining a mount.
	* [multipathd] multipathd could loose events coming from
	  sighup or DM waitev. Add a pending_event counter to
	  track that.
	* [path_prio] add pp_emc from Lars M Bree, Suse.
	* [path_prio] add pp_alua from Stefan Bader, IBM.
	* [libmultipath] add config.c:load_config(), which sucks
	  a big chunk of code out of multipath/main.c.
	* [libmultipath] don't allocate memory in :
		* devmapper.c:dm_get_map()
		* devmapper.c:dm_get_status()
	* [libmultipath] devinfo() a la carte fetching
	* [libmultipath] merge keepalived memory audit framework
	  (Thanks again, M. Cassen). Already found and fixed a
	  couple of leaks.
	* [libmultipath] flatten/optimize dm_map_present() and
	  dm_mapname(). Inspired by Alasdair Kergon, RedHat.
	* [kpartx] dm_map_name() free before use bugfix. Kiyoshi
	  Ueda, NEC
	* [kpartx] add hotplug mode. To enable name the binary
	  "kpartx.dev". Kiyoshi Ueda, NEC
	* [multipathd] don't loose events in event waiter thread.
	  Suggested and prototyped by Edward Goggin, EMC
	* [libmultipath] add return values to vector manipulation
	  fonctions. Mem alloc return code audit.
	* [libmultipath] Use "config->udev_dir + path->dev" as
	  a path devnode to open instead of mknod'ing for each
	  one. Fix some DoS issues regarding usage of /tmp in
	  libmultipath/discovery.c:opennode(). Kill unlinknode()
	* [multipathd] merged the redhat init script and stop
	  installing one on "make install"
	* [libmultipath] fold safe_sprintf.h into util.h
	* [libmultipath] move blacklist to a real regex matcher
	  Example config files updated : check yours !!
	* [multipath] fix path group compare logic to not stop
	  comparing at first path in each PG.
	* [multipathd] check if pidfile is a dead remnent of a
	  crashed daemon. If so, overwrite it. Suggested by
	  Alasdair Kergon, RedHat. Code heavily based on work
	  by Andrew Tridgell, Samba Fame.
	* [build] dropped libdevmapper/ and libsysfs/ from the
	  package. klibc build is now broken until distributors
	  provide klibc compiled static libraries in their
	  respective packages.
	* [libmultipath] dm_task_no_open_count() before each DM
	  ioctl. Not doing that is reported to cause deadlocks
	  in kernel-space. Reported by Edward Goggin, EMC, fix
	  suggested by Alasdair Kergon, RedHat
	  Note minimal libdevmapper version bumped up to 1.01.
	* [multipath] switched to condlog(). "make DEBUG=N" is
	  deprecated. Debug is spat with "-v3" or more.
	* [multipathd] "multipathd -vN" cmdline arg to control
	  daemon verbosity. 0 < N < 4. "make LOGLEVEL=N" is
	  deprecated.
	* [libmultipath] provide a common condlog() primitive to
	  switch lib messages to syslog or stdout depending on
	  who uses the lib (daemon or tool).
	* [kpartx] give kpartx a private, slim copy of devmap.[ch]
	* [multipath] allow wwid in blacklist{} config section.
	  Kiyoshi Ueda, NEC.
	* [multipathd] set mode value before use (S_IRWXU). Fixes
	  RedHat Bugzilla Bug 150665.
	* [all] add ->fd to "struct path *". remove fd from all
	  checker context declaration. remove lots of duplicate
	  logic. Now a fd is opened only once for path. It should
	  also bring a bit safety in contended memory scenarii
	* [libcheckers] remove redundant sg_include.h
	* [libmultipath] merge multipath:dict.[ch] with
	  multipathd:dict.[ch] into libmultipath/. move config.h
	  there too, add some helper functions to alloc/free
	  "struct config *" in a new config.c. Start using a
	  config in the daemon.
	* [libmultipath] move dm_geteventnr(), dm_get_maps() and
	  dm_switchgroup() in devmapper.[ch]
	* [libmultipath] move path discovery logic in
	  libmultipath. merge devinfo.[ch] and sysfs_devinfo.[ch]
	  into discovery.[ch]
	* [libmultipath] move config.h in libmultipath. Move
	  find_[mp|hw]e in a new config.c. Move "struct hwtable"
	  declaration in config.h. Move propsel.[ch] in the
	  lib too.
	* [multipathd] use libmultipath:dm_type() instead of
	  duplacate and bogus devmap discovery code.
	* [multipathd] asynchronous & non-blocking logger
	  thread. Implementation split into a generic log
	  lib and a pthread wrapper for locking and events.
	  An ipc wrapper could be easily created by
	  interested parties.
	* [multipath] add "multipath -l -v2 [devname|devt]"
	  support in complement to [mapname|wwid]
	* [kpartx] suppress loop.h private copy. Should fix
	  the reported build problems
	* [multipath] do sysfs_get_mnt_path() only one time
	  and store in a global var.
	* [multipath] further path discovery optimzation
	* [multipath] purge superfluous includes in main.c
	* [libmultipath] introduce a cache file. expiry set
	  to 5 secondes to covert the hotplug event storms.
	* [multipath] split get_pathvec_sysfs(). Introduce
	  get_refwwid() and filter_pathvec()

2005-03-19 multipath-tools-0.4.3

	* [libmultipath] rename find_[mp|hw] to find_[mp|hw]e and
	  introduce a real find_mp().
	* [priority] provison for recursive compilation of prio
	  subdirs, in preparation of merging more signicant
	  prioritizers. Stephan Bader, IBM
	* [libmultipath] add a netapp controler to the hwtable
	* [libmultipath] blacklist() not to discard sda[0-9]*
	  when sda is blacklisted
	* [multipath] add a rr_min_io keyword in config file.
	  Suggested by Igor Feoktistov, NetApp
	* [multipath] stop trying to avoid running in parallel
	* [multipath] bump up params size to 1024
	* [multipathd] put prio callouts in to ramfs. Stephan
	  Bader, IBM
	* [multipath] simplify multibus pgpolicy : no need to
	  copy mp->paths into mp->pg->paths then free source :
	  just copy the ptr and set source to NULL.
	* [multipath] sort PG by descending prio value in
	  group_by_prio. Stephan Bader, IBM
	* [multipath] fix a bug in group_by_prio that lead to
	  creation of multiple PG for a single prio value
	* [multipath] don't store multipaths in a vector anymore :
	  free the "struct multipath" after usage.
	* [multipath] multiple optimizations in the exec plan
	* [multipath] allow "multipath -l -v2 [mapname|wwid]"
	* [build] rip off klibc and move to klcc, at last.
	  Good job hpa. multipath-tools now depend on klibc
	  > 1.0 to build with BUILD=klibc flag.
	* [multipath] never reload a map if no path is up in the
	  computed new map
	* [multipath] don't flush maps with open count != 0
	* [libmultipath] add "int *dm_get_opencount(char *map)"
	  to devmapper.c
	* [multipath] plug leaks and optimize devinfo.c. From
	  Edward Goggin, EMC
	* [multipath] fix the multipath.dev hotplug script to not
	  do kpartx stuff in the same run as multipath stuff.
	  Igor Feoktistov, NetApp, noted the devmap symlink was
	  not yet present for kpartx to use.
	* [devmap_name] accept major:minor synthax
	* [libmultipath] add "char *dm_mapname(int maj, int min)",
	  needed to fail paths from checker thread
	* [libmultipath] move dm_reinstate() in the lib, and add
	  dm_fail_path()
	* [multipathd] mark failed path as failed upon DM
	  event. This should fix the design bug noticed by
	  Ramesh Caushik, Intel, where the daemon didn't run
	  multipath when a path went down and up in between 2
	  checks.
	* [libmultipath] allow NULL as a pathvec in disassemble_map
	  as is passed only for memory optimization
	* [libmultipath] add structs.c to store alloc_*() and
	  free_*()
	* [libmultipath] move dmparser.[ch] to the lib.
	  remove devinfo.[ch] dependency.
	* [build] fix compilation glitch with BUILD=klibc,
	  flags to force use of local libs, remove the link
	  dependency in klibc, try to guess kernel sources
	  and build dirs. Stefan Bader, IBM
	* [libmultipath] find_hw matching logic to take str
	  lengths in account. Noticed by Ramesh Caushik, Intel
	* [multipath] select_action matching logic to take str 
	  length in account.
	* [multipath] lookup mp alias name earlier (in coalesce)
	  Edward Goggin, EMC, noticed we tried to use it before
	  it was set up.

2005-01-23 multipath-tools-0.4.2

	* [libmultipath] add symmetrix controler family to the
	  hwtable. Edward Goggin, EMC
	* [libmultipath] factorize core structs (path, ...)
	  and defaults (pidfile, configfile, ...). Convert
	  callers.
	* [multipath] fix dmparser to properly fetch non-default
	  hwhandler. Edward Goggin, EMC
	* [multipath] fix devt2devname matching 8:1 with 8:10
	  for example. Edward Goggin, EMC
	* [multipath] switch_pg upon devmap create or reload
	  Noticed by Ake.
	* [libmultipath] move find_hw() the library. Convert
	  users. Now multipathd understand '*' as a product
	  string
	* [multipath] dissaemble_map() fix to avoid to
	  interpret 'D' as a disable PG (not 'F'). Edward
	  Goggin, EMC
	* [multipath] find_path() fix to avoid matching 8:1
	  with 8:10 for example. Edward Goggin, EMC
	* [libmultipath] move some sysfs fetching routines
	  to library, under sysfs_devinfo.[ch]. Convert
	  callers.
	* [multipath] fix -v0 : avoids the daemon waiting
	  for the initial multipath run to complete, which
	  will never happen because of a flooded pipe
	* [multipathd] add scsi_id to default binvec
	* [libmultipath] move hwtable related logic to the
	  library. Convert multipath and multipathd
	* [multipath] move first blacklist call down after
	  setup_default_blist()
	* [libmultipath] move basename() to the lib. Convert
	  multipath and multipathd.
	* [libmultipath] move blacklist related logic to the
	  library. Convert multipath and multipathd
	* [multipath] fix bug in the default hardware table
	  matching logic (Lars M-B, Suse)
	* [multipath] allow "*" as scsi model string wildcard
	  (Lars M-B, Suse)
	* [multipath] provide a macro to fill all hwe fields,
	  use it to declare Clariion models (Lars M-B, Suse)
	* [multipath] use DEFAULT_GETUID instead of hardcoded
	  *and* incorrect "/bin/scsi_id -g -s" (Lars M-B, Suse)
	* [multipath] kill superfluous suspend before table
	  reload. The code was unsafe, as spotted by Edward
	  Goggin (EMC)
	* [multipath] exit early if device parameter is
	  blacklisted
	* [multipath] don't check for prefix in initrd's
	  multipath.dev : this is the tool responsability to
	  exit early based on its blacklist.
	* [multipath] don't signal the daemon in initrd
	  (Guido Guenther, Debian tracker)
	* [multipath] better fail to run kpartx in initrd
	  than crashing the whole system. So don't sleep
	  waiting for udev to create the DM node. Maybe udev
	  has made progress I this regard ... (noticed by
	  Paul Wagland, Debian tracker)
	* [multipath] don't reinstate when listing, ie list
	  implies dry_run
	* [checkers] fix the emc checker (Hergen Lange)
	* [multipath] node_name fetching shouldn't exit on
	  error. FC SAN are not the only multipathed context
	  (noticed by Ramesh Caushik)

2004-12-20 multipath-tools-0.4.1

	* [multipath] bump SERIAL_SIZE to 19
	* [multipath] add a new group_by_node_name pgpolicy
	* [multipath] move getopt policy parser to
	  get_policy_id()
	* [multipath] remove get_evpd_wwid()
	* [checkers] fix the wwn_set test in emc checker
	  (Hergen Lange)
	* [checkers] treat the emc checker in the name to 
	  index translator function (Hergen Lange)
	* [multipath] print to stderr DM unmet requirement
	  (Guido Guenther)
	* [multipath] fix realloc return value store not
	  propagated to caller by merge_word() (Nicola Ranaldo)

2004-12-10 multipath-tools-0.4.0

	* [checkers] forgot to return back to caller the newly
	  allocated context. Lead to fd leak notably.
	* [checkers] heavy check logic fix
	* [checkers] really malloc the checker context size,
	  not the pointer size (stupidy may kill)
	* [multipathd] check more sysfs calls return values
	* [multipathd] search for sysfs mount point only once,
	  not on each updatepaths() iteration
	* [multipathd] plug (char *) leak in the daemon
	* [multipath] change pgcmp logic : we want to reload a
	  map only if a path is in computed map but not in cur
	  map (ie accept to load a map if it brings more paths)
	* [multipath] undust coalesce_paths()
	* [multipath] don't print unchanged multipath
	* [multipath] store the action to take in the multipath
	  struct
	* [multipath] print mp size with kB, MB, GB or TB units
	* [multipath] compilation fix for merge_words() (Andy)
	* [multipath] don't feed the kernel DM maps with paths of
	  different sizes : DM fails and we end up with an empty
	  map ... not fun
	* [multipath] cover a new corner case : path listed in
	  status string but disappeared from sysfs
	* [multipath] remove the "-D" command line flag : now
	  we can pass major:minor directly as last argument, like
	  device names or device map names. Update multipathd
	  accordingly.
	* [multipath] try reinstate again paths after a switchpg
	* [multipath] reinstate condition change : 

2004-12-05 multipath-tools-0.3.9

	* [multipath] add a "-l" flag to list the current
	  multipath maps and their status info
	* [priority] zalloc controler to avoid random path_count
	  at allocation time
	* [multipath] add configlet pointers in struct multipath
	  to avoid searching for an entry over and over again
	* [multipath] new reinstate policy : on multipath exec,
	  reinstate all failed paths the checkers report as ready
	  if they belong to enabled path groups (not disabled, not
	  active path group)
	* [multipath] fork a print_mp() out of print_all_mp()
	* [multipath] introduce PG priority, which is the sum of
	  its path priorities. Set first_pg in the map string to
	  the highest prio PG index.
	* [multipath] assemble maps scaning PG top down now that
	  PG vector is unsorted
	* [multipath] move select_*() to propsel.c
	* [multipath] move devinfo() to devinfo.c
	* [multipath] move h/b/t/l fetching to sysfs_devinfo()
	* [multipath] move devt2devname() to devinfo.c so we can
	  use it from dmparser.c too
	* [multipath] introduce select_alias() and clarify a bit
	  of code
	* [multipath] don't sort PG anymore. We want the map as
	  static as possible.
	* [multipath] fix a segfault in apply_format() triggered
	  when no config file found.
	* [multipath] kill unused vars all over the place
	* [multipath] add a struct pathgroup in struct multipath
	  Store the pathvec in it. We now have a place to store
	  PG status, etc ...
	* [multipath] new dmparser.c, with disassemble_map(),
	  disassemble_status()
	* [multipath] suppress *selector_args keywords. Merge
	  in the selector string. Update config file templates.

2004-11-26 multipath-tools-0.3.8

	* [priority] teach multipath to read callout keywords
	  formatted as /sbin/scsi_id -g -u -s /block/%n
	  Apply one substitutions out of :
		* %n : blockdev basename (ie sdb)
		* %d : blockdev major:minor string (ie 8:16)
	  update sample config files
	* [priority] fix find_controler(). Now works, verified
	  on IBM T200 at OSDL (thanks again, Dave). Add to the
	  main build process
	* [multipath] add a controler specific "prio_callout"
	  keyword. Noticed by Ake
	* [multipath] normalize the debug ouput
	* [multipath] add select_getuid(). De-spaghetti
	  devinfo() thanks to that helper.
	* [libmultipath] add VECTOR_LAST_SLOT macro.
	  multipath/dict.h now use it heavily.
	* [multipath] policies selectors speedup and cleanup
	  (pgpolicy, features, hwhandler, selector)
	* [multipath] new "flush" command flag
	* [libmultipath] add dm_type() and dm_flush_maps()
	* [multipath] move dm_get_map() to libmultipath
	* [multipath] rename iopolicy to pgpolicy everywhere.
	  Dual terminology was getting confusing.
	* [multipath] assemble_map() to always set next_pg to 1
	  for now.
	* [multipath] update config file to show new keywords.
	  Add an IBM array tested at OSDL.
	* [multipath] fork select_iopolicy() from setup_map()
	* [multipath] introduce select_features() and 
	  select_hwhandler(). Should merge select_* one day ...
	* [multipath] add features and hardware_handler keywords
	  and use them in the map setup
	* [build] make clean really clean. Noticed by Dave Olien,
	  OSDL
	* [multipath] group_by_serial bugfix
	* [multipath] dm_addmap() return value fix. Now multipath
	  really creates the maps
	* [multipath] try dm_log_init_verbose() instead of dup()
	  + close() to silence libdevmapper (Ake at umu)
	* [libcheckers] remove checkpath() wrapper, obsoleted by
	  the "fd in context" changes
	* [multipathd] let pathcheckers allocate their context.
	  No more over or unneeded allocation.  Suggested by Lars,
	  Suse
	* [multipathd] store the pathcheckers fd in their context.
	  No more open / close on each check. Suggested by Lars,
	  Suse

2004-11-05 multipath-tools-0.3.7

	* [multipathd] fix off by one memory allocation (Hannes,
	  Suse)
	* [multipathd] introduce a default callout handler that
	  just remembers to put the callout in ramfs, even if the
	  daemon has no direct use of them. multipath need some
	  that where forgotten, so parse them and use that default
	  handler.
	* [libcheckers] emc_clariion checker update (Lars, Suse)
	* [build] exit build process on failure (Lars, Suse)
	* [kpartx] exit early if DM prereq not met
	* [multipath] exit early if DM prereq not met
	* [libmultipath] new dm_prereq() fn to check out if all DM
	  prerequisites are met
	* [libmultipath] move callout.[ch] function in there.
	  multipath and multipathd impacted
	* [libmultipath] move dm_* function in there. kpartx,
	  multipath are impacted
	* [priority] pp_balance_lun should use DM_DEVICE_TABLE ioctl
	  instead of DM_DEVICE_STATUS to find out paths from the
	  primary path groups.
	* [klibc] drop in "Stable" version 0.190
	* [build] add manpages for kpartx and multipathd (Patrick
	  Caulfield)
	* [build] use system's sysfs for multipathd linking
	* [build] make glibc the default build
	* [build] "make BUILD=klibc" is enough, deprecate the 
	  "make BUILD=klibc klibc" synthax

2004-10-30 multipath-tools-0.3.6

	* Patrick Caulfield took over debian packaging. Showing
	  evident expertise, his first wish is to see debian/
	  disappear. :) So be it.
	* [libmultipath] add a vector_foreach_slot macro. Still
	  needs an iterator but saves 1 line per loop occurence and
	  tame this UPPERCASE MACROS bad taste.
	* [multipathd] don't load sg anymore on multipathd startup
	* [multipathd] change killall for kill `cat $PIDFILE` in
	  init script (Jaime Peñalba & Cesar Solera)
	* [multipathd] the fork fallback was borked (just exiting)
	  noticed by Jaime Peñalba & Cesar Solera
	* [multipathd] try without the FLOATING_STACKS flag. Does
	  it matter anyway ?
	* [multipathd] merge clone_platform.h from LTP and cover
	  the hppa special case.
	* [multipath] since we will be able to create a devmap with
	  paths too small, don't rely anymore on the first path's
	  size blindly : verify the path is up, before assigning its
	  size to the multipath
	* [priority] add a path priority fetcher to balance LU accross
	  controlers based on the controler serial detection. Untested
	  but provides a good example of what can be done with the
	  priority framework.
	* [priority] create subdir and drop a test pp_random
	* [multipath] add dev_t reporting to print_path() to ease
	  devmap decoding by humans
	* [multipath] change default path priority to 1
	* [multipath] add wits to the sort_by_prio policy, so that
	  sort_pathvec_by_prio() is now useless. Remove it.
	* [multipath] invert sort_pg_by_summed_prio sort order :
	  highest prio leftmost
	* [libmultipath] add vector_del_slot
	* revert multipath.rules change : devmap_name still takes
	  "major minor" and not "major:minor" as argument
	* Makefile refinement : you can now enter any tool directory
	  and build from here, deps are solved

2004-10-26 multipath-tools-0.3.5

	* [multipathd] fix broken test for path going up or shaky
	  that kept executing multipath when it shouldn't
	* change multipath.dev to exit early when udev' DEVNAME is
	  a devmap (/dev/dm-*). This avoids a recursion case when
	  the kernel devmapper keeps removing a map after multipath
	  configures it.
	* change multipath.rules to follow the new -D synthax
	* [multipath] "-D major minor" synthax changed to 
	  "-D major:minor" to match the sysfs attribute value.
	  This change removes a few translations in multipath and
	  multipathd.
	* [multipath] fix segfault in test if conf->dev is a devmap
	  (the one forwarded by MikeAnd)
	* SG_IO ioctl seem to work in lk 2.6.10+, so remove all sg
	  device knowledge and advertise (here) the new dependency.
	* [multipath] remove unused do_tur()
	* [multipath] fix sort_pg_by_summed_prio(), and don't add up
	  failed path priority

2004-10-26 multipath-tools-0.3.4

	* [multipathd] exec multipath precisely : pass in the path
	  or the devmap to update. No more full reconfiguration, and
	  really use the reinstate feature of multipath.
	* [multipathd] check all paths, not only failed ones. Path
	  checker now trigger on state change (formerly triggred on
	  state == UP condition)
	* [multipathd] incremental updatepaths() instead of scrap /
	  refresh all logic.
	* [multipathd] path checkers now take *msg and *context
	  params. consensus w/ lmb at suse. tur.c modified as example
	* [multipath] assemble maps in PG vector descending order to
	  fit the layered policies design
	* [multipath] stop playing with strings in pgpolicies, as it
	  uses more memory and looses info for no gain
	* [multipath] remove lk2.4 scsi ioctl scsi_type remnant
	* [multipath] layered pgpolicies : (see pgpolicies.c)
		* group_by_status
		* group_by_serial | multibus | failover | group_by_prio
		* sort_pg_by_summed_prio
	  thus remove duplicated failedpath logic in pgpolicies
	* [libmultipath] add vector_insert_slot
	* [checkers] framework for arbitrate checkers return values
	* [multipathd] scrap yet another reinvented wheel in the 
	  name of the LOG macro :  learn the existance of setloglevel
	  and LOG_UPTO macro
	* glibc make with "make BUILD=glibc", asked by lmb at suse

2004-10-20 multipath-tools-0.3.3

	* [checkers] add the emc_clariion path checker (lmb at Suse)
	* [multipath] introduce safe_snprintf macro to complement the
	  safe_sprintf. Needed to cover the sizeof(pointer) cases
	  pointed by Dave Olien at OSDL
	* [multipath] move to the common libchecker framework and
	  activate the selector
	* [multipath] fix an iopolicy selector bug (initialized lun
	  iopolicy overrode controler-wide iopolicy)
	* [multipathd] cleanly separate out the checker selector, as
	  done with iopolicy selector
	* [multipathd] move out the checkers into a common libcheckers
	* [multipath] fix the anti-parallel-exec logic : use a write 
	  lease for the task. From Dave Olien at osdl.
	* [multipath] fix reinstate : pass a devt, not a devname

2004-10-16 multipath-tools-0.3.2

	* [multipath] add path reinstate logic :
		* if a path is given as multipath arg
		* if the map containing that path already exists
		* if this map is the same as the that would be
		  created by this multipath run
		* THEN reinstate the path
	  multipathd is is thus unchanged, while now supporting
	  reinstate
	* audit and ensafe all sprintf usage
	* [multipath] fix the annoying \n after each dev_t in
	  params string reporting
	* [multipath] print out devmaps in "-v2 -d" mode
	* [kpartx] bump up the params string size (lmb at suse)
	* [kpartx] replace sprintf by snprintf (lmb at suse)
	* [kpartx] initialize some more vars (lmb at suse)
	* [multipath] mp->pg == NULL safety net before calling
	  assemble_map() (for Andy who happen to hit the bug)
	* [multipath] last rampant bug in map CREATE or UPDATE switch
	  logic due to the device alias feature
	* [kpartx] zeroe "struct slice all" (lmb at suse)

2004-10-11 multipath-tools-0.3.1

	* [kpartx] move back to getopt, originaly removed from the 
	  original partx because of lack of implementation in klibc
	* [kpartx] don't map extended partitions
	* [kpartx] add a -p command flag to allow admin to force a
	  delimiting string between disk name and part number. When
	  specified always use it, when unspecified use 'p' as a delim
	  when last char of disk name is a digit, NUL otherwise.
	* [kpartx] clean up
	* bump klibc to 0.182
	* one step further : use klibc MCONFIG for all klibc specific
	  FLAGS definitions, ie massive Makefile.inc cleanup
	* follow the klibc compilation rules by appending its OPTFLAGS
	  to multipath-tools' CFLAGS. This corrects the segfaults seen
	  on i386 where klibc is built with regparm=3 and tools are not
	* [multipathd] fall back to fork when clone not available
	  like in Debian Woody
	* [kpartx] move .start and .size from uint to ulong (Ake)
	* briefly document system-disk-on-multipath in the FAQ file

2004-10-06 multipath-tools-0.3.0

	* first cut at making scripts to create multipath-aware initrds
	  those scripts are tested on Debian SID, and must be copied into
	  /etc/mkinitrd/scripts. it works here.
	* [multipath] verify presence of the /sys/block/... node before
	  reading sysfs attributes. Avoids libsysfs and scsi_id stderr
	  garbage
	* [multipath] move down the stderr close (Ake Sandgren at umu.se)
	* [multipath] don't care about 0-sized mp (Ake Sandgren at umu.se)
	* [multipath] bump mp size field to ulong (Ake Sandgren at umu.se)
	* [multipath] replace quiet/verbose flags by a verbosity one.
	  introduce a new verbosity level : 1 == print only devmap names
	  thus we can feed kpartx with that output
	* [multipath] update man page to reflect the hotplug.d -> dev.d
	  transition and replace the obsolete group_by_tur policy by the
	  forgotten group_by_prio
	* [multipath] provide a /etc/udev/rules.d/multipath.rules for
	  multipath devices naming. Cleaner than the previously suggested
	  rule addition in the main udev.rules
	* [multipath] move out of hotplug.d to dev.d : kill synchronisation
	  problems between device node creation and multipath execution.
	  Incidentally the unfriendly $DEVPATH param become a friendly
	  $DEVNAME (simply /dev/sdb)
	* [multipath] rework the iopolicies name-to-id & id-to-name
	  translations. kills the last compilation warning here too
	* [kpartx] kill last compilation warnings
	* bump klibc to 0.181
	* add the debian/ packaging dir (make deb)
	* prototype __clone & __clone2

2004-09-24 multipath-tools-0.2.9

	* [multipathd] finally tame the clone compilation glitch on IA64
	  move from sys_clone to __clone / __clone2
	* [kpartx] rework from Stephan Bader, IBM :
		* handle s390x arch
		* endianness fixes
		* push the partname string size to handle wwwids
		* quieten implicit cast warnings
	* [multipath] add an 'alias' multipath keyword for friendlier device
	  names. This was "asked" by OSDL' CGL board of secret reviewers
	* [multipath] last pass with JBOD and parallel SCSI support :
	  hard-code scsi_id as a fallback when disk strings doesn't match
	  any hwtable entry
	* [multipath & multipathd] change the parser to not coalesce
	  consecutive spaces (Patrick Mansfield)
	* [multipath] remove the [UN]: output prefix, so that stdout can be
	  easily fed to a tool like dmsetup
	* [multipathd] DEBUG=3 logs more readable/usefull
	* [multipathd] add a multipath_tool config keyword
	* [multipathd] move to execute_program() like multipath already did
	* [multipath] don't print the "no path" msg in quiet mode
	* [multipathd] include linux/unistd.h for _syscall2
	  definition on RedHat systems. Remove superfluous
	  asm/unistd.h include
	* [libsysfs] forked : last version uses mntent, which
	  klibc doesn't provide. That, plus the fact we use
	  only 1/3 of the lib, pushed me to freeze the version
	  and strip all unused stuff.
	* [multipathd] prepare_namespace() cleanup : no more "multipath"
	  special casing since we push it to binvec vector, like the other
	  callouts detected in the config file.

2004-08-13 multipath-tools-0.2.8

	* [multipathd] setsched prio to RT
	* [multipath] massive include cleanup
	* [multipath] add a "default_prio_callout" keyword
	  first user will be SPC-3 ALUA priority field fetcher
	  from IBM
	* [multipath] reenable stdout on some error paths
	* [build] spilt KERNEL_DIR into KERNEL_SOURCE &
	  KERNEL_BUILD as per 2.6 and SuSe convention
	* [klibc] kill warnings due to awk parsing wrong locale in
	  arch/i386/MCONFIG
	* [multipath] implement a generic group_by_prio pgpolicy
	* [multipath] fix the broken failover pgpolicy

2004-07-24 multipath-tools-0.2.7

	* [multipath] args parser moved to getopt
	  <genanr@emsphone.com>
	* [multipath] zero conf->hotplugdev at allocation
	  <genanr@emsphone.com>
	* [multipath] clean up failed devmap creation attempt
	* [libs] update to libdevmapper 1.00.19
	* [multipath] framework for claimed device skipping
	  still lacks a reliable way to know if the device is
	  claimed and by who (fs, swap, md, dm, ...). If you
	  think it is valid to let libdevmapper hit the wall,
	  please speak up and tell so.
	* [multipath] shut down stderr when calling into libdm
	* [multipath] reformat the verbose output
	* [multipath] framework for path priority handling (ALUA)
	* [multipath] kill all reference to group_by_tur
	* [multipath] integrate path state logic into multibus &
	  failover pgpolicies. This obsoletes the group_by_tur one
	  which is now the same as multibus.
	* [multipath] zalloc mp structs to avoid garbage in ->size
	* bump version requisite for scsi_id to 0.6 to support the new
	  '-u' flag (s/ /_/ for proper JBOD device map naming)
	* [multipath] correct the for(;;) limits to accept 1-slot
	  pathvecs
	* [multipath] push WWID_SIZE to 64 char (scsi_id w/ JBODs)
	* [multipath] add a exit_tool() wrapper fn for runfile unlink
	* [multipath] add a "default_path_grouping_policy" keyword in the
	  "defaults" block.
	* [multipath] add a "default_getuid_callout" keyword in the
	  "defaults" block. Now multipath is going to work with JBODs
	* [multipath] fix segfault when pathvec is empty after
	  get_pathvec()
	* move to template based specfile to avoid regular version skew

2004-07-16 multipath-tools-0.2.6

	* [multipathd] implement the system-disk-on-SAN safety net
	* [multipathd] add exit_daemon() wrapper function
	* [multipathd] mlockall() all daemon threads
	* [multipath] fix a bug in the mp_iopolicy_handler that kept
	  the iopolicy per LUN override from working
	* [multipath] display the tur bit value in print_path
	  as requested by SUN
	* try to open /$udev/reverse/$major:$minor before falling back
	  to mknod
	* add "udev_dir" to the defaults block in the config file
	* merge "daemon" & "device_maps" config blocks into a new
	  "defaults" block
	* [multipath] properly comment the config file
	* [multipath] generalize the dbg() macro usage
	  Makefile now has a DEBUG flag
	* [multipath] move to callout based WWID fetching. Default to
	  scsi_id callout. I merged execute_program from udev for that
	  (so credit goes to GregKH)
	* [multipath] get rid of "devnodes in /dev" assumption
	  ie move to "maj:min" device mapper target synthax

2004-07-10 multipath-tools-0.2.5

	* [multipathd] fix misbehaviour noted by <genanr@emsphone.com>
	  improper tar directive in Makefile on some systems
	* [multipathd] fix bug noted by <genanr@emsphone.com>
	  get_devmaps fills a private vector and forget to pass its
	  address to caller
	* [multipath] extend EVPD 0x83 id fetching logic.
	  Code borrowed from scsi_id (thanks goes to Patrick
	  Mansfield @IBM) and merged by Hannes Reinecke @SUSE
	* [multipathd] fix regression noted by <genanr@emsphone.com>
	  (segfault when no config file)

2004-06-20 multipath-tools-0.2.4

	* [multipathd] break free from system's libsysfs for now
	  as it is not that common these days
	* [multipath] introduce per LUN policies in the config
	  file : path_grouping_policy, path_selector and
	  path_selector_args are supported.
	  See updated sample config file.
	* [multipath] move ->iopolicy to multipath struct (from
	  path struct)
	* [multipath] fill the voids left in the config file with
	  defaults
	* [multipath] group config & flags in a global struct *
	* [multipath] fix segfault when no config file (was a 
	  regression since hwtable vectorisation in 0.2.2)
	* [multipath] default path selector override in config file
	* [multipath] don't play with strings in pgpolicies, leave
	  that to a new assemble_map fn. policies now use vector
	* [multipathd] compilation fix for gentoo (Franck Denis)
	* [multipath] strcmp fix (Franck Denis)

2004-06-14 multipath-tools-0.2.3

	* [multipath] group_by_serial try to be smart with LUN
	  balancing across controlers (for STK / LSI) :
	  1st multipath : 1st pg made of path through 1st controler
	  2nd multipath : 1st pg made of path through 2nd controler
	  3rd multipath : 1st pg made of path through 1st controler
	  ...
	* [multipath] drop .pindex[] in struct multipath in favor
	  of a *paths vector : much cleaner
	* [multipath] fix group_by_serial pgpolicy broken by
	  vectorisation in 0.2.2
	* add a StorageTek array in the sample multipath.conf
	* [multipathd] strcmp fix from Franck Denis
	* [multipathd] convert to vector api
	* [multipathd] add a configfile option for path checking
	  interval. See sample configfile for synthax.

2004-06-07 multipath-tools-0.2.2

	* [multipath] leave out 2.4 compat code. Is there
	  interest anyway ?
	* [multipath] convert all_paths table to vector api.
	  Rename to pathvec. Get rid of max_devs
	* [multipath] convert mp table to vector api
	* convert blacklist to vector api
	* 2.6.7-rc? adds _user annotations to scsi/sg.h, causing
	  compilation breakage. Add a "#define _user" in all
	  sg_include.h (and remove cruft)
	* merge a real parser (from keepalived) courtesy of 
	  Alexandre Cassen. Now multipath and multipathd share a
	  config file. This comes with a nice vector lib.
	* devnode blacklist moved from hardcoded to config file
	* Guy Coates noted -O2 CFLAGS lead to multipathd crashes
	  on IA64. Remove the needless optimisation for now.

2004-06-05 multipath-tools-0.2.1

	* [multipath] add a flag to inihibit the final SIGHUP to
	  multipathd. Needed to avoid recursion with the correction
	  below
	* [multipathd] devmap event now triggers a multipath exec
	  in addition to the usual updatepaths()
	* [multipathd] move checkers from sg_io on BLK onto CHR
	  readsector0 goes from read to sg_read
	* [multipathd] rely on sysfs for failedpaths enum and no
	  longer on the device mapper
	* [multipathd] convert get_lun_strings from ioctl to sysfs
	  so we can benefit from strings persistency for failed
	  paths
	* [multipath] readconfig() to take only 8 char from vendor
	  string (ake)
	* [multipath] remove unecessery and wrong getuid == NULL
	  check from devinfo() (ake)
	* [multipathd] make readsector0 open path O_DIRECT
	* [multipathd] sizeof(path) -> sizeof(struct path) (MikeC)
	* [Makefile] don't try to install and uninstall libs
	* [devmap_name] kill the wrong trailing '\n'
	  (Mike Christie)
	* [kpartx] works with device nodes outside /dev
	* [kpartx] correctly display the delimiter in partition
	  name outputs

2004-05-17 multipath-tools-0.2.0

	* change the default klibc by greg's :
	  corrects the segfaults reported by Ling Hwa Hing

2004-05-16 multipath-tools-0.1.9

	* break free from udev : package klibc and libsysfs
	* add a spec file and a "make rpm" rule
	* pensum on klibc changes needed :
		* mmap.c & fork.c : invert includes
		* make clean wipes .*.d
		* auto create the linux symlink
		* remove tools and specfiles (files and Makefile
		  targets)

2004-05-15 multipath-tools-0.1.8

	* Makefiles cleanup and factorisation
	* Compilation fixes for non-ix86 archs, tested on x86_64
	* strip execs harder for a 10% size reduction
	* blacklist /dev/fd* and /dev/loop*
	* dmadm works with sysfs nodes with '!' (cciss for ex)

2004-05-10 multipath-tools-0.1.7

	* bugfixes from	Andy <genanr@emsphone.com> :
		* read the last line of the config file
		* add an entry for the 3PARData storage ctlrs
		* read the last char of vendor and model strings

2004-04-25 multipath-tools-0.1.6

	* add the dmadm WIP tool (read MD superblocks and create
	  corresponding devmaps when possible)
	* plug fd leak in TUR path checker

2004-03-25 multipath-tools-0.1.5

	* kpartx to manage the nested bdevs as /dev/cciss/c0d0.
	  parts are named sysfs style : cciss!c0d0p*
	* kpartx loop support
	* kpartx do DM updates if part maps already present
	* merge kpartx for partitioned multipath support
	* add get_null_uid to getuid methods. assign it the "0" index
	  devices with this getuid are thus ignored by multipath.
	  warning : change /etc/multipath.conf (get_evpd_wwid == 1)
	* mv all_scsi_ids out of the 2.6 code path, into the 2.4 one
	* unlink runfile on malloc exit path
	* update multipath manpage (MikeC)

2004-03-17 multipath-tools-0.1.4

	* multipath clean up
		* split default hw table in hwtable.h
		* split grouping policies in pgpolocies.c
		* pass *mp to setup_map instead of mp[]+index
	* ensure defhwtable is used if /etc/multipath.conf is buggy
	* hwtable is not global anymore
	* unlink the runfile in various error paths

2004-03-13 multipath-tools-0.1.3

	* multipath config tool now has a config file parser
	  (did I say I make the ugliest parsers ?)
	* example multipath.conf to put in /etc (manualy)

2004-03-12 multipath-tools-0.1.2

	* detach the per devmap waiter threads
	* set the thread stack size to lower limits
	  (VSZ down to 4MB from 85 MB here)

2004-03-06 multipath-tools-0.1.1

	* include dlist.h in multipath main.c (PM Hahn)
	* typo in hotplug script (PM Hahn)
	* pass -9 opt to gzip for manpages (PM Hahn)

2004-03-05 multipath-tools-0.1.0

	* add the group_by_tur policy
	* add the multipathd daemon for pathchecking & DM hot-reconfig
	* multipath doesn't run twice
	* massive cleanups, and code restructuring
	* Avoid Kernel Bug when passing too small a buffer in do_inq()
	* Sync with 2.6.3-udm4 target synthax (no more PG prio)

2004-02-21 multipath-018

	* From the Debian SID inclusion review (Philipp Matthias Hahn)
		* use DESTDIR install prefix in the Makefile
		* add man pages for devmap_name & multipath
		* correct libsysfs.h includes
		* fork the hotplug script in its own shell
	* Sync with the kernel device mapper code as of 2.6.3-udm3
	  ie. Remove the test interval parameter and its uses
	* Remove superfluous scsi parameter passed from hotplug
	* Add the man pages to the [un]install targets

2004-02-17 multipath-017

	* remove the restrictive -f flag.
	  Introduce a more generic "-m iopolicy" one.
	* remove useless "int with_sysfs" in env struct 

2004-02-04 multipath-016

	* add a GROUP_BY_SERIAL flag. This should be useful for
	  controlers that activate they spare paths on simple IO
	  submition with a penalty. The StorageWorks HW defaults to
	  this mode, even if the MULTIBUS mode is OK.
	* remove unused sg_err.c
	* big restructuring : split devinfo.c from main.c. Export :
		* void basename (char *, char *);
		* int get_serial (int, char *);
		* int get_lun_strings (char *, char *, char *, char *);
		* int get_evpd_wwid(char *, char *);
		* long get_disk_size (char *);
	* stop passing struct env as param
	* add devmap_name proggy for udev to name devmaps as per their
	  internal DM name and not only by their sysfs enum name (dm-*)
	  The corresponding udev.rules line is :
	  KERNEL="dm-[0-9]*", PROGRAM="/sbin/devmap_name %M %m", \
	  NAME="%k", SYMLINK="%c"
	* remove make_dm_node fn & call. Rely on udev for this.
	* don't rely on the linux symlink in the udev/klibc dir since
	  udev build doesn't use it anymore. This corrects build breakage

2004-01-19 multipath-013

	* update the DM target synthax to the 2.6.0-udm5 style

2003-12-29 multipath-012

	* check hotplug event refers to a block device; if not exit early
	* refresh doc
	* add the uninstall target in Makefile

2003-12-22 multipath-010

	* tweak the install target in Makefile
	* stop passing fds as argument : this change enable a strict
	  segregation of ugly 2.4 code
	* sysfs version of get_lun_strings()
	* be careful about the return of get_unique_id() since errors 
	  formerly caught up by if(open()) in the caller fn are now returned
	  by get_unique_id()
	* send get_serial() in unused.c
	* introduce dm-simplecmd for RESUME & SUSPEND requests
	* split add_map() in setup_map() & dm-addmap()
	* setup_map() correctly submits "SUSPEND-RELOAD-RESUME or CREATE"
	  sequences instead of the bogus "RELOAD or CREATE"
	* don't print .sg_dev if equal to .dev (2.6) in print_path()
	* since the kernel code handles defective paths, remove all
	  code to cope with them :
		* move do_tur() to unused.c
		* remove .state from path struct
		* remove .state settings & conditionals
	* add a cmdline switch to force maps to failover mode,
	  ie 1 path per priority group
	* add default policies to the whitelist array (spread io ==
	  MULTIBUS / io forced to 1 path == FAILOVER)
	* move get_disk_size() call out of add_map() to coalesce()
	* comment tricky coalesce() fn
	* bogus unsused.c file renamed to unused.c

2003-12-20 multipath-010

	* big ChangeLog update
	* start to give a little control over target params :
	  introduce cmdline arg -i to control polling interval
	* cope with hotplug-style calling convention :
	  ie "multipath scsi $DEVPATH" ... to avoid messing with
	  online maps not concerned by an event
	* example hotplug agent to drop in /etc/hotplug.d/scsi
	* revert the run & resched patch : unless someone proves me
	  wrong, this was overdesigned
	* move commented out functions in unused.c
	* update multipath target params to "udm[23] style"
	* mp target now supports nr_path == 1, so do we
	* add gratuitous free()
	* push version forward

2003-12-15 multipath-009

	* Make the HW-specific get_unique_id switch pretty
	* Prepare to field-test by whitelisting all known fibre array,
	  try to fetch WWID from the standard EVPD 0x83 off 8 for everyone
	* configure the multipath target with round-robin path selector and
	  conservative default for a start (udm1 style) :
	  yes it makes this release the firstreally useful one.
	* temporarily disable map creation for single path device
	  due to current restrictive defaults in the kernel target.
	  Sistina should work it out.
	* correct the strncmp logic in blacklist function.
	* update the Makefiles to autodetect libgcc.a & gcc includes
	  "ulibc-style". Factorisation of udevdirs & others niceties
	* drop a hint about absent /dev/sd? on failed open()
	* implement a reschedule flag in /var/run.
	  Last thing the prog do before exit is check if a call to multipath
	  was done (but canceled by /var/run/multipath.run check) during its
	  execution. If so restart themain loop.
	* implement a blacklist of sysfs bdev to not bother with for now
	  (hd,md, dm, sr, scd, ram, raw).
	  This avoid sending SG_IO to unappropiate devices.
	* Adds a /var/run/multipath.run handling to avoid simultaneous runs.
	* Remove a commented-out "printf"
	* drop a libdevmapper copy in extras/multipath;
	  maybe discussions w/Sistina folks will bring a better solution
	  in the future.
	* drop a putchar usage in libdevmapper to compile cleanly with klibc
	* drop another such usage of my own in main.c
	* massage the Makefile to compile libdevmapper against klibc
	* use "ld" to produce the binary rather than "gcc -static"
	* stop being stupid w/ uneeded major, minor & dev in main.c:dm_mk_node()
	* reverse to creating striped target for now because the multipath
	  target is more hairy than expected initialy
	* push the version code to 009 to be in synch w/ udev

2003-11-27 multipath-007

	* removes sg_err.[ch] deps
	* makes sure the core code play nice with klibc
	* port the sysfs calls to dlist helpers
	* links against udev's sysfs (need libsysfs.a & dlist.a)
	* finally define DM_TARGET as "multipath" as Joe posted the code today
	  (not tested yet)
	* push version forward (do you want it in sync with udev version?)

2003-11-19 multipath-006

	* merged in udev-006 tree

2003-09-18 multipath-0.0.1

	* multipath 0.0.1 released.
	* Initial release.