Systemd/extras/multipath
christophe.varoqui@free.fr 4081da7fe5 [PATCH] extras multipath update
incremental to 20031220,

 2003-12-22 multipath-010
        * 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
2005-04-26 21:13:10 -07:00
..
libdevmapper [PATCH] more extras/multipath updates 2005-04-26 21:13:07 -07:00
AUTHOR [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00
ChangeLog [PATCH] extras multipath update 2005-04-26 21:13:10 -07:00
COPYING [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00
main.c [PATCH] extras multipath update 2005-04-26 21:13:10 -07:00
main.h [PATCH] extras multipath update 2005-04-26 21:13:10 -07:00
Makefile [PATCH] more extras/multipath updates 2005-04-26 21:13:07 -07:00
multipath.hotplug [PATCH] extras multipath update 2005-04-26 21:13:10 -07:00
README [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00
sg_err.c [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00
sg_err.h [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00
sg_include.h [PATCH] udev-007/extras/multipath update 2005-04-26 21:13:04 -07:00
unused.c [PATCH] extras multipath update 2005-04-26 21:13:10 -07:00
VERSION [PATCH] Add multipath "extra" program from Christophe Varoqui, <christophe.varoqui@free.fr> 2005-04-26 21:06:24 -07:00

Dependancies :
==============

o libdevmapper : comes with device-mapper-XXXX.tar.gz
  See www.sistina.com
o libsysfs : comes with sysutils
  See ftp.kernel.org/pub/linux/utils/kernel/hotplug/

How it works :
==============

Fill the all_paths array. Each path store this info :

struct path {
        char dev[FILE_NAME_SIZE];
        char sg_dev[FILE_NAME_SIZE];
        struct scsi_idlun scsi_id;
        struct sg_id sg_id;
        int state;
        char wwid[WWID_SIZE];
};

scsi_id, sg_dev and sg_id are only really useful for 2.4 
kernels, for which SG cmnds must go through sg devs.
In 2.5+ we have the nice opportunity to send SG cmnds
through SCSI bdevs.

For 2.4 compat, we pivot on idlun tupple to map sg devs
to SCSI bdevs.

2.4 does not do device enumeration, so we must scan a
defined number of sg devs and scsi bdevs. Good enough.
In 2.5+, we rely on libsysfs (sysutils) to access to
sysfs device enums.

the wwid is retrieved by a switch fonction. Only White
Listed HW can filled this field. For now only 
StorageWorks HW is White Listed. (See notes)

When all_paths is filled, we coalesce the paths and store
the result in mp array. Each mp is a struct like this :

struct multipath {
        char wwid[WWID_SIZE];
        int npaths;
        int pindex[MAX_MP_PATHS];
};

When mp is filled, the device maps are fed to the kernel
through libdevmapper. Stale paths (failed TUR) are 
discarded.

Notes :
=======

o make sure you have enough /dev/sg* nodes
  (/dev/MAKEDEV if necesary)

o path coalescing relies on a path unique id being found.
  This unique id, lacking a standard method, is vendor
  specific. A switch function (get_unique_id) is present
  and an example function is provided for storageworks
  arrays (get_storageworks_wwid). Feel free to enrich
  with hardware you have at hand :)

o Something goes wrong with sd.o, qla2200 & dm-mod
  refcounting : I can't unload these modules after exec.

o The kernel does NOT manage properly ghosts paths
  with StorageWorks HW. Seems nobody cares after a load
  of posts to linux-scsi.

o 2.4.21 version of DM does not like even segment size.
  if you enconter pbs with this, upgrade DM.

Credits :
=========

o Heavy cut'n paste from sg_utils. Thanks goes to D. 
  Gilbert.
o Light cut'n paste from dmsetup. Thanks Joe Thornber.
o Greg KH for the nice sysfs API.