platform/upstream/multipath-tools.git
15 years agoavoid NULL pointers in discovery code
Mike Snitzer [Wed, 29 Apr 2009 19:24:24 +0000 (15:24 -0400)]
avoid NULL pointers in discovery code

Both sysfs_pathinfo() and path_offline() could hit NULL pointers when
trying to dereference the newly acquired parent sysfs_device.  By being
more defensive a crash I experienced in path_offline() is avoided.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
15 years agomultipathd: add error checking to client's process_req
Mike Snitzer [Wed, 29 Apr 2009 19:23:28 +0000 (15:23 -0400)]
multipathd: add error checking to client's process_req

If multipathd (server) crashes fail any multipathd (client)
communication gracefully.  This patch adds error checking that prevents
calls to recv_packet() if the send_packet() call failed.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
15 years ago[lib] fix double frees
Mike Snitzer [Tue, 28 Apr 2009 21:50:21 +0000 (23:50 +0200)]
[lib] fix double frees

A careless merge from Hannes' repo introduced double frees.

15 years ago[lib] prio_arg leaked here through cherry-picks
Christophe Varoqui [Wed, 22 Apr 2009 00:09:39 +0000 (02:09 +0200)]
[lib] prio_arg leaked here through cherry-picks

main patch is not yet merged. Remove for now.

15 years agoStrip trailing blanks from wwid
Hannes Reinecke [Wed, 4 Mar 2009 12:37:43 +0000 (13:37 +0100)]
Strip trailing blanks from wwid

We should be stripping any trailing blanks from the wwid to catch
invalid wwid with just blanks.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoOnly pass block events to multipath
Hannes Reinecke [Wed, 25 Feb 2009 15:09:15 +0000 (16:09 +0100)]
Only pass block events to multipath

We can easily preselect the events from a udev rule; this takes some
load off the multipath daemon itself.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFixup multibus zero-path handling
Hannes Reinecke [Tue, 24 Feb 2009 13:13:56 +0000 (14:13 +0100)]
Fixup multibus zero-path handling

The 'multibus' pgpolicy function currently always adds a pathgroup,
even when no paths are present. This confuses setup_map() which
doesn't expect this behaviour.

References: 476330

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoReturn 'ghost' state when port is in standby
Hannes Reinecke [Thu, 19 Feb 2009 15:19:45 +0000 (16:19 +0100)]
Return 'ghost' state when port is in standby

Currently, issuing a TUR command on a path in standby
mode, it returns a Unit Attention status. This is
reported as a Failed path by the SLES11 tur checker.
Instead, this has to be reported as Ghost path based
on the additional sense code and sense code qualifier values.

References: 475816

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoUse noflush for kpartx
Hannes Reinecke [Mon, 9 Feb 2009 12:59:57 +0000 (13:59 +0100)]
Use noflush for kpartx

kpartx has to use 'noflush' to be able to complete for an all-paths
down scenario. Otherwise no uevent might be sent and multipath
will stall.

References: 473352

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoleastpending IO loadbalancing is not displayed properly
Hannes Reinecke [Fri, 6 Feb 2009 13:57:12 +0000 (14:57 +0100)]
leastpending IO loadbalancing is not displayed properly

While using least pending IO lb policy for the LUN, the
dm_least_pending module is getting loaded and devices
are getting created properly. But multipath
display command does not display the paths for this LUN.

This is due to some explicit parsing for 'round-robin' in
dmparser.c, which has to be updated to accomodate other
load-balancing policies.

References: 444199

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoRetry tur on driver errors
Hannes Reinecke [Wed, 4 Feb 2009 10:34:15 +0000 (11:34 +0100)]
Retry tur on driver errors

Sending SG_IO commands might return driver errors, too. And
some of these errors should cause the tur to be retried.

References: bnc#456961

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoPlug memory leaks
Hannes Reinecke [Wed, 28 Jan 2009 08:24:10 +0000 (09:24 +0100)]
Plug memory leaks

Running the internal memory checker revealed quite some memory
leaks.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoCorrect definition of dbg_malloc()
Hannes Reinecke [Wed, 28 Jan 2009 08:19:36 +0000 (09:19 +0100)]
Correct definition of dbg_malloc()

Any malloc function should return 'void *' to avoid type
mismatch errors.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoError checking for VECTOR_XXX defines
Hannes Reinecke [Mon, 26 Jan 2009 12:01:33 +0000 (13:01 +0100)]
Error checking for VECTOR_XXX defines

Christophe doesn't believe in error checking. I, however, have
been tripping over them all the time.

References: bnc#469269

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFixup whitespace issues
Hannes Reinecke [Fri, 23 Jan 2009 12:04:15 +0000 (13:04 +0100)]
Fixup whitespace issues

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFix 'remove' uevent handling
Hannes Reinecke [Wed, 21 Jan 2009 13:11:38 +0000 (14:11 +0100)]
Fix 'remove' uevent handling

A remove event might be handled after the failed devices have already
been purged from the multipath structure, so a failure here is not
an error.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoUpdate misleading debug messages for directio checker
Hannes Reinecke [Wed, 21 Jan 2009 12:26:51 +0000 (13:26 +0100)]
Update misleading debug messages for directio checker

io_getevents returns the number of events received, so '1'
is actual a success. And calling 'strerror(errno)' unconditionally
here will lead to false errors as the errno value won't be
updated then.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoAdd new HP arrays to internal hardware table
Hannes Reinecke [Thu, 15 Jan 2009 11:03:34 +0000 (12:03 +0100)]
Add new HP arrays to internal hardware table

This patch is to include entries for 2 new HP arrays in the hwtable.

References: bnc#442133

Signed-off-by: Vijayakumar Balasubramanian <vijayakumar@hp.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoAdd more debugging output
Hannes Reinecke [Wed, 7 Jan 2009 10:05:45 +0000 (11:05 +0100)]
Add more debugging output

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoShuffle to the call to memset in logarea_init()
Hannes Reinecke [Wed, 7 Jan 2009 09:59:46 +0000 (10:59 +0100)]
Shuffle to the call to memset in logarea_init()

We should call memset only after we know the area has been
allocated.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFix sysfs_attr_get_value()
Hannes Reinecke [Wed, 7 Jan 2009 09:52:25 +0000 (10:52 +0100)]
Fix sysfs_attr_get_value()

sysfs_attr_get_value() should return NULL if the attribute was not
found or found to be empty. And we should increase the attribute
value size to avoid overflows.
And overflows should be truncated, not ignored.

References: bnc#456747

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoUsing condlog() for sysfs debugging output
Hannes Reinecke [Fri, 19 Dec 2008 08:43:23 +0000 (09:43 +0100)]
Using condlog() for sysfs debugging output

The sysfs code still used 'printf' for debugging. Changed that
to using condlog().

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoAdd missing unlock() on exit path
Hannes Reinecke [Thu, 18 Dec 2008 15:20:09 +0000 (16:20 +0100)]
Add missing unlock() on exit path

We forgot to unlock the paths on exit.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoRemove kdev_t.h include
Hannes Reinecke [Thu, 18 Dec 2008 09:03:15 +0000 (10:03 +0100)]
Remove kdev_t.h include

Pointless and giving the users the wrong impression.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoSet 'max_fds' parameter for multipath
Hannes Reinecke [Tue, 9 Dec 2008 11:26:49 +0000 (12:26 +0100)]
Set 'max_fds' parameter for multipath

max_fds should be enabled for multipath, too.

References: 457443

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoSplit off IBM ESS entries
Hannes Reinecke [Wed, 3 Dec 2008 09:38:04 +0000 (10:38 +0100)]
Split off IBM ESS entries

For some reason the regular expression doesn't work properly.
So split off the two entries.

References: bnc#439763

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoCheck vector_foreach_slot for NULL argument
Hannes Reinecke [Mon, 24 Nov 2008 07:31:28 +0000 (08:31 +0100)]
Check vector_foreach_slot for NULL argument

Most crashes are due to vector_foreach_slot not checking for NULL
argument. Do that now, and add some more checks for not accessing
a NULL pointer indirection.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agomultipathd crashes in update_multipath()
Hannes Reinecke [Fri, 21 Nov 2008 13:20:34 +0000 (14:20 +0100)]
multipathd crashes in update_multipath()

For an all-paths-down scenario we can have an mpp with no
paths attached. So check for it.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoAllow zero paths for device-mapper strings
Hannes Reinecke [Thu, 20 Nov 2008 12:33:10 +0000 (13:33 +0100)]
Allow zero paths for device-mapper strings

There is no reason why we shouldn't allow zero paths in the device
mapper output.

References: 435688

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoSearch for correct hwe in update_multipath()
Hannes Reinecke [Thu, 20 Nov 2008 11:33:39 +0000 (12:33 +0100)]
Search for correct hwe in update_multipath()

When updating the multipath structure we only should update the
hardware entry if it doesn't exist anymore. And we should take
care of not selecting invalid entries in the paths vector as
the hardware entry for this is invalid, too.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoValgrind fixes for checkers
Hannes Reinecke [Wed, 19 Nov 2008 10:04:40 +0000 (11:04 +0100)]
Valgrind fixes for checkers

Declare an array does not zero it out. Hence we might read some
random garbage here.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoMore valgrind fixes
Hannes Reinecke [Tue, 18 Nov 2008 10:33:09 +0000 (11:33 +0100)]
More valgrind fixes

valgrind found some memory which wasn't freed on exit.
Do it now.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agolibmultipath: zero out lines in print.c
Hannes Reinecke [Fri, 14 Nov 2008 09:02:56 +0000 (10:02 +0100)]
libmultipath: zero out lines in print.c

static declaration of line within a function doesn't place them in
the bss segment, hence they are not zeroed automatically.
Gives funny effects occasionally.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoUpdate hardware table for new HP arrays
Hannes Reinecke [Tue, 11 Nov 2008 12:44:09 +0000 (13:44 +0100)]
Update hardware table for new HP arrays

References: 442133

Signed-off-by: Vijayakumar Balasubramanian <vijaykumar@hp.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoCheck for empty mpvecs in mpvec_garbage_collector()
Hannes Reinecke [Tue, 4 Nov 2008 08:40:26 +0000 (09:40 +0100)]
Check for empty mpvecs in mpvec_garbage_collector()

During shutdown the mpvec pointer can indeed be empty, so we should
check it first before trying to access it.

References: 437245

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoDo not check for valid mp context in get_state()
Hannes Reinecke [Thu, 30 Oct 2008 12:46:15 +0000 (13:46 +0100)]
Do not check for valid mp context in get_state()

When called from 'multipath -ll' get_state() does not
have a valid context. But the checkers should run nevertheless
as we need the state here but are not interested in any long-term
issues.

References: 433659

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFixup %n to handle '!' special case
Hannes Reinecke [Wed, 29 Oct 2008 15:58:52 +0000 (16:58 +0100)]
Fixup %n to handle '!' special case

The kernel name may contain an '!', which should be translated
into a '/'. So do it here.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoIncrease buffer size in find_loop_by_file()
Hannes Reinecke [Tue, 21 Oct 2008 08:22:16 +0000 (10:22 +0200)]
Increase buffer size in find_loop_by_file()

find_loop_by_file() uses an internal buffer of 20 chars, which is compared
to a buffer of the size of 64 chars. Not good.

References: 436428

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agokpartx -l does not remove it's loop device
Hannes Reinecke [Tue, 14 Oct 2008 06:38:29 +0000 (08:38 +0200)]
kpartx -l does not remove it's loop device

When doing a kpartx -l it does not remove it's loop device when done.

The appended patch to multipath-tools could fix this.

References: 417266

Signed-off-by: Philipp Zimmer <pzimmer@novell.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoRead the verbosity level from multipath.conf configuration file
Hannes Reinecke [Tue, 14 Oct 2008 06:21:02 +0000 (08:21 +0200)]
Read the verbosity level from multipath.conf configuration file

With this patch, multipathd can read the verbosity level from
the multipath.conf configuration file.
For example:
verbosity       5

References: 388284

Signed-off-by: Ritesh Raj Sarraf <rsarraf@netapp.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agofopen returns NULL on failure, not -1
Hannes Reinecke [Thu, 9 Oct 2008 10:53:38 +0000 (12:53 +0200)]
fopen returns NULL on failure, not -1

References: 432598

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agomultipath: Check return value for get_inq()
Hannes Reinecke [Fri, 26 Sep 2008 13:31:07 +0000 (15:31 +0200)]
multipath: Check return value for get_inq()

Check the return value of get_inq() to correctly handle devices
with unconnected LUNs.

References: 419123
Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoFurther whitespace cleanup
Hannes Reinecke [Wed, 23 Jul 2008 10:11:08 +0000 (12:11 +0200)]
Further whitespace cleanup

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoIncrease RDAC priority values
Hannes Reinecke [Wed, 23 Jul 2008 10:04:40 +0000 (12:04 +0200)]
Increase RDAC priority values

A priority value of '0' will cause a path to never be selected,
so we should make sure to return always a non-zero value for
available paths.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years agoValgrind fixes
Hannes Reinecke [Wed, 23 Jul 2008 09:20:53 +0000 (11:20 +0200)]
Valgrind fixes

Valgrind found some issues. And clear up whitespaces while we're at it.

Signed-off-by: Hannes Reinecke <hare@suse.de>
15 years ago[lib] set PASSCRED netlink socket option
Christophe Varoqui [Sun, 19 Apr 2009 22:44:38 +0000 (00:44 +0200)]
[lib] set PASSCRED netlink socket option

15 years ago[lib] check udev and netlink messages sender uid
Christophe Varoqui [Sun, 19 Apr 2009 22:16:58 +0000 (00:16 +0200)]
[lib] check udev and netlink messages sender uid

Ignore if not 0.
This change was suggested by Kay Sievers. It required switching from
recv() to recvmsg().

15 years agomultipath-tools: install libmultipath.so in $syslibdir
Mike Snitzer [Fri, 17 Apr 2009 22:07:58 +0000 (18:07 -0400)]
multipath-tools: install libmultipath.so in $syslibdir

Allows libmultipath.so to be installed in the proper lib dir
(e.g. /lib64).  $libdir is already used for /lib/multipath

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
15 years agomultipath-tools: update multipathd.init.redhat
Mike Snitzer [Fri, 17 Apr 2009 22:07:59 +0000 (18:07 -0400)]
multipath-tools: update multipathd.init.redhat

Various small improvements to Red Hat's multipathd initscript.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
15 years agomultipath-tools: update scsi_id arguments
Mike Snitzer [Fri, 17 Apr 2009 22:07:57 +0000 (18:07 -0400)]
multipath-tools: update scsi_id arguments

Switch over to using --whitelisted and --device

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
15 years ago[lib] define _GNU_SOURCE in preparation for using recvmsg()
Christophe Varoqui [Sun, 19 Apr 2009 21:44:28 +0000 (23:44 +0200)]
[lib] define _GNU_SOURCE in preparation for using recvmsg()

And deal with consequences :
1/ rename util::basename() to util::basenamecpy() to resolve
   namespace conflict GNU version
2/ don't redefine _GNU_SOURCE if already set in regex.c to avoid
   a build warning

15 years ago[lib] more selective mask to catch uevent from netlink
Christophe Varoqui [Wed, 15 Apr 2009 19:47:01 +0000 (21:47 +0200)]
[lib] more selective mask to catch uevent from netlink

Kay Sievers reports 0x01 is the only group used by the kernel.
As udev will start using other groups, pollution will result from
our lack of filtering.

15 years ago[lib] bump version to 0.4.9 in preparation for release
Christophe Varoqui [Fri, 3 Apr 2009 22:33:25 +0000 (00:33 +0200)]
[lib] bump version to 0.4.9 in preparation for release

15 years ago[multipathd] actually propose restorequeuing et disablequeuing in CLI
Christophe Varoqui [Fri, 3 Apr 2009 22:29:49 +0000 (00:29 +0200)]
[multipathd] actually propose restorequeuing et disablequeuing in CLI

this bit was missing from the forward-port

15 years ago[multipathd] Add options to multipathd to turn off queueing
Benjamin Marzinski [Fri, 3 Apr 2009 22:09:55 +0000 (00:09 +0200)]
[multipathd] Add options to multipathd to turn off queueing

Even when the last path of a multipath device is deleted, it can't be
removed until all the queued IO is flushed. For devices that have
no_path_retry set to queue, this doesn't automatically happen.

This patch adds a "flush_on_last_del" config file option, that causes the
multipath device to automatically turn off queueing when the last path is
deleted.  It also adds the "disablequeueing" and "restorequeueing"
multipathd cli commands.

15 years agoset pthread stack size to at least PTHREAD_STACK_MIN
Benjamin Marzinski [Fri, 13 Mar 2009 20:55:14 +0000 (15:55 -0500)]
set pthread stack size to at least PTHREAD_STACK_MIN

Setting the stacksize too small just causes
pthread_attr_setstacksize() to fail, leaving you with the default stack
size. On some architectures, the default stacksize is large, like 10Mb.
Since you start one waiter thread per multipath device, every 100
devices eats up 1Gb of memory.

The other problem is that when I actually read the pthread_attr_init man
page (it can fail. who knew?), I saw that it can fail with ENOMEM. Also,
that it had a function to free it, and that the result of reinitializing
an attr that hadn't been freed was undefined.  Clearly, this function
wasn't intended to be called over and over without ever freeing the
attr, which is how we've been using it in multipathd. So, in the spirit
of writing code to the interface, instead of to how it appears to be
currently implemented, how about this.

15 years agoremove deleted path from pathvec
Benjamin Marzinski [Thu, 12 Mar 2009 18:38:11 +0000 (13:38 -0500)]
remove deleted path from pathvec

When the last path in a multipath map was removed, the path wasn't getting
deleted from the pathvec before it was getting freed.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoClean up multipath linking
Benjamin Marzinski [Fri, 3 Apr 2009 04:19:36 +0000 (23:19 -0500)]
Clean up multipath linking

This is a patch to fix up the linking. It does two things.  First, it makes
libmultipath.so install to /lib/ just like a normal shared library, so you
don't have to use -rpath to link to it.  Second, and more importantly,
it moves the libaio linking into libcheckdirectio.so, where it belongs.  Since
libcheckdirectio.so is a dynamic shared object, multipath and multipathd don't
know what functions they need to link in from libaio. This fixes the directio
lockup for me.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoMiscellaneous multipath bugfixes
Benjamin Marzinski [Fri, 3 Apr 2009 04:44:19 +0000 (23:44 -0500)]
Miscellaneous multipath bugfixes

This is mostly a cleanup of some bugs that recently got introduced. In
ACT_RESIZE we were trying to create a read-only device before we tried
to create a read/write one (I also added the ability to fail back to
read-only in ACT_RELOAD).  There were some printouts that I assume were
for debugging, and some duplicate code.  And I switched it so that
dm_simplecmd_flush did flushing, and dm_simplecmd_noflush didn't.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years ago[multipathd] minor logging fix for the resize handler
Christophe Varoqui [Thu, 2 Apr 2009 21:23:12 +0000 (23:23 +0200)]
[multipathd] minor logging fix for the resize handler

add missing format param

15 years ago[lib] use explicit names dm_simplecmd_{flush,noflush}
Christophe Varoqui [Thu, 2 Apr 2009 21:17:29 +0000 (23:17 +0200)]
[lib] use explicit names dm_simplecmd_{flush,noflush}

easier than the magic value used in static dm_simple_cmd to drive
the flush/noflush behaviour

15 years agoSupport resizing of multipath maps.
Konrad Rzeszutek [Thu, 2 Apr 2009 21:04:17 +0000 (23:04 +0200)]
Support resizing of multipath maps.

This is patch that initially showed up on dm-devel mailing list:

http://www.linux-archive.org/device-mapper-development/162594-multipath-tools-libmultipath-configure-c-libmu.html
which was posted on dm-devel mailing list, but never ported
over to work with the git version. This forward-port by me
works.

15 years ago[multipathd] signal deadlock
Benjamin Marzinski [Thu, 2 Apr 2009 20:36:41 +0000 (22:36 +0200)]
[multipathd] signal deadlock

If multipathd is run with -v3, both the SIGHUP, and the SIGUSR1 signal handlers
will log a message.  If a multipathd thread receives one of these signals while
it has a log lock held, it deadlocks itself. Also, the SIGHUP handler will grab
the vecs lock, so if any thread receives a SIGHUP while holding the vecs lock,
it deadlocks itself.  This commit blocks the appropriate signals to guard
against this.

15 years ago[multipathd] /var/run/multipathd.sock is world-writable
Hannes Reinecke [Wed, 1 Apr 2009 20:31:01 +0000 (22:31 +0200)]
[multipathd] /var/run/multipathd.sock is world-writable

Due to an stray 'umask()' the socket file is in fact world-writable,
allowing for an easy exploit.

References: 458598

15 years agoStack overflow in uev_trigger()
Hannes Reinecke [Fri, 27 Mar 2009 22:50:18 +0000 (23:50 +0100)]
Stack overflow in uev_trigger()

uev_discard uses sscanf to write a 10 byte string into an array,
but I forgot to take the trailing NULL byte into account.

15 years agoDon't display the state of the newly added map during addition in the daemon
Konrad Rzeszutek [Tue, 24 Mar 2009 18:14:37 +0000 (19:14 +0100)]
Don't display the state of the newly added map during addition in the daemon
and don't switch groups.

A previous commit mass-changed #ifdef DAEMON to check for 'mpp->waiter'.
Unfortunatly when the 'domap' function is called with ACT_CREATE in the daemon,
the mpp->waiter is not set, hence the multipath client mode logic is choosen.
Fixing this triggers another issues which is that newly added path via
ACT_CREATE won't have their waitevent thread created as the caller checks
mpp->action (which changed to ACT_NOTHING) and won't start the thread.

15 years agoFree prio_name and checker_name now that we dynamically allocate them.
Konrad Rzeszutek [Tue, 24 Mar 2009 18:04:31 +0000 (19:04 +0100)]
Free prio_name and checker_name now that we dynamically allocate them.

In earlier releases the prio_name and checker_name would point
to statically allocated values. Now that we strdup them, we need
to free them during shutdown.

15 years agoUnload prio and checkers libraries during shutdown.
Konrad Rzeszutek [Tue, 24 Mar 2009 18:01:05 +0000 (19:01 +0100)]
Unload prio and checkers libraries during shutdown.

Our statup sequence is 'load_config', 'init_checkers', and 'init_prio'.
Both init_* functions reset the list of prio and checkers, which is
unfortunate as in load_config, depending on the multipat.conf, would
load prio and checker libraries. This results in double-loading of
the libraries and a memory leak.

15 years agoRace-condition fix with free_waiter threads during shutdown.
Konrad Rzeszutek [Tue, 24 Mar 2009 17:49:14 +0000 (18:49 +0100)]
Race-condition fix with free_waiter threads during shutdown.

When we shutdown, the main process locks the mutex, causing
all of the free_waiter functions to pile up on their lock.
Once we unlock in the main process, all of the free_waiters
start working. However the next instruction in the main proces
is to destroy the mutex. The short window is all the free_waiter
threads have to do their cleanup before they attempt to unlock
the mutex - which might have been de-allocated (and set to NULL).
End result can be a seg-fault.

This fix adds a ref-count to the mutex so that during shutdown
we spin and wait until all of the free_waiter functions
have completed and the ref-count is set to zero.

15 years ago[checkers] update doc for path checkers and use MALLOC instead of malloc
Konrad Rzeszutek [Tue, 24 Mar 2009 17:22:06 +0000 (18:22 +0100)]
[checkers] update doc for path checkers and use MALLOC instead of malloc

The internal memory debugger throws a fit if the path checkers are
using the malloc instead of the 'MALLOC' macro.

15 years ago[checkers] Allocate only once the EMC-clariion global checker's stage area
Konrad Rzeszutek [Tue, 24 Mar 2009 17:16:48 +0000 (18:16 +0100)]
[checkers] Allocate only once the EMC-clariion global checker's stage area

The multi-path global context on every path checker init would be
set. In scenarios where you have four paths per multipath, that context
would be set four times instead of once causing a small memory leak
(4 bytes per block disk).

15 years ago[lib] add LSI hardware settings to internal defaults
Babu Moger [Sat, 7 Mar 2009 14:49:10 +0000 (15:49 +0100)]
[lib] add LSI hardware settings to internal defaults

This patch adds the hwtable for LSI rdac generic storage. Also sets the feature pg_init_retries to maximum(50).

15 years ago[lib] plug fd leak in callout error path and and error messages
Benjamin Marzinski [Sun, 18 Jan 2009 22:44:51 +0000 (23:44 +0100)]
[lib] plug fd leak in callout error path and and error messages

multipathd was not releasing fds when a fork failed in execute_program.
Also, the error messages from execute_program were not very
helpful. This patch fixes both

15 years ago[lib] dm_flush_map on a non-multipath devmap do nothing and returns 0
Christophe Varoqui [Wed, 17 Dec 2008 23:13:30 +0000 (00:13 +0100)]
[lib] dm_flush_map on a non-multipath devmap do nothing and returns 0

So that "multipath -F" can succeed when non-multipath maps are active
on the system.

15 years ago[lib] don't add up errors in dm_flush_maps()
Christophe Varoqui [Wed, 17 Dec 2008 23:01:37 +0000 (00:01 +0100)]
[lib] don't add up errors in dm_flush_maps()

to avoid return code overflow, as pointed by "Bryn M. Reeves",
Redhat.

15 years ago[multipathd] log the uevent discarding as debug information
Christophe Varoqui [Wed, 17 Dec 2008 22:39:47 +0000 (23:39 +0100)]
[multipathd] log the uevent discarding as debug information

15 years ago[lib] Memory leak when deleting and re-adding device-mapper entries.
Konrad Rzeszutek [Wed, 17 Dec 2008 22:24:40 +0000 (23:24 +0100)]
[lib] Memory leak when deleting and re-adding device-mapper entries.

If we remove a map (with configuration details specified in the multipath.conf file)
and later re-add it, the pointer to the config is over-written without first
de-allocating the values.

15 years ago[multipathd] Memory leak in ev_add_map.
Konrad Rzeszutek [Wed, 17 Dec 2008 22:23:09 +0000 (23:23 +0100)]
[multipathd] Memory leak in ev_add_map.

When using dm_mapname it makes a strdup of the returned value. We use
the dm_mapname return value (alias) in our function but neglected
to free it at the exit points.

15 years ago[lib] The internal debug memory leak printout has output jumbled.
Konrad Rzeszutek [Wed, 17 Dec 2008 22:22:01 +0000 (23:22 +0100)]
[lib] The internal debug memory leak printout has output jumbled.

When using the internal memory leak the function that call realloc get a
confused output. The fix puts the list of operation in the right
order.

15 years ago[lib] Need to use FREE macro instead of free.
Konrad Rzeszutek [Wed, 17 Dec 2008 22:20:44 +0000 (23:20 +0100)]
[lib] Need to use FREE macro instead of free.

When using the internal memory leak checker it is imperative that
all free use the FREE macro. Otherwise accounting errors show up.

15 years ago[lib] Substantial memory leak when large amount of LUNs are present
Konrad Rzeszutek [Wed, 17 Dec 2008 22:19:19 +0000 (23:19 +0100)]
[lib] Substantial memory leak when large amount of LUNs are present

dm_get_name() was creating a vector, populating it with multipaths,
then only deleting the vector itself, which leaked all of the multipaths.
If the number of LUNs (ie. multipaths) was large then the leak was equally large.

Signed-off-by: Konrad Rzeszutek <konrad@virtualiron.com>
15 years agoFix user_friendly_names for WWIDs with spaces
Benjamin Marzinski [Thu, 11 Dec 2008 22:12:40 +0000 (16:12 -0600)]
Fix user_friendly_names for WWIDs with spaces

The user_friendly_names code didn't handle WWIDs with spaces correctly.  This
fixes it by taking everything from the start of the WWID to the end of the line
as the WWID.  The only downside is that if someone hand edits their bindings
file, they may leave stray whitespace at the end of the line, and cause it to
not match.  This could ne solved by quoting the WWIDs and escaping any quotes
that they might have, but I don't think that people hand edit their bindings
files enough to make it a problem.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoFix broken major:minor device handling
Benjamin Marzinski [Thu, 11 Dec 2008 22:11:40 +0000 (16:11 -0600)]
Fix broken major:minor device handling

devt2devname was not actually setting devname, so multipath was not able to
do operate on devices using major:minor

This patch sets devname, and also checks for an unlikely buffer overrun.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoFix for parsing multipath.conf files without spaces before brackets
Benjamin Marzinski [Thu, 11 Dec 2008 22:10:27 +0000 (16:10 -0600)]
Fix for parsing multipath.conf files without spaces before brackets

There's a bug in bug in the multipath.conf code that keeps multipath from
correctly parsing config files where there is no space between a section name
and the opening bracket. For instance

devices {
device {
...
}
}

works but

devices {
device{
...
}
}

doesn't. This patch makes sure that brackets are the recognized as seperate from
the token that they follow, unless they are part of a quoted string.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoconfig file cleanup and a defaults file
Benjamin Marzinski [Thu, 11 Dec 2008 22:07:25 +0000 (16:07 -0600)]
config file cleanup and a defaults file

This patch cleans up multipath.conf.annotated and multipath.conf.synthetic adds
a multipath.conf.defaults file that lists the builtin default configs.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoFix for kpartx on sparc64
Benjamin Marzinski [Thu, 11 Dec 2008 22:06:07 +0000 (16:06 -0600)]
Fix for kpartx on sparc64

This typedef change is necessary to make kpartx work on sparc64 machines.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years agoFix for uevent devpath handling
Benjamin Marzinski [Thu, 11 Dec 2008 22:03:28 +0000 (16:03 -0600)]
Fix for uevent devpath handling

This is necessary to make uevents work on fedora, since devpath appears as
something like:
'/devices/pci0000:00/0000:00:0a.0/0000:06:00.0/host11/rport-11:0-1/target11:0:1/11:0:1:0/block/sdi'

It simply strips off the everything up to the /block.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
15 years ago[doc] path_checker can't be set in a multipath {} config block
Christophe Varoqui [Sun, 30 Nov 2008 23:35:42 +0000 (00:35 +0100)]
[doc] path_checker can't be set in a multipath {} config block

All docs wrongly stated that as valid. It is not, mainly
because path checker selection happens before assigning the
path to a multipath.

Thanks to Matthew Kent for pointing this out.

15 years ago[lib] add '%c' wildcard to display path checker type in cli
Christophe Varoqui [Sun, 30 Nov 2008 22:56:46 +0000 (23:56 +0100)]
[lib] add '%c' wildcard to display path checker type in cli

$ sudo multipathd show paths format "%d %i %c"
dev hcil    checker
sdb 5:0:0:0 readsector0
sdc 5:0:0:1 readsector0

15 years ago[build] rpm specfile fix
Matthew Kent [Sun, 30 Nov 2008 22:55:10 +0000 (23:55 +0100)]
[build] rpm specfile fix

catch up with recent file movement.

15 years ago[multipath] set "multipath -f|-F" return code correctly
Christophe Varoqui [Mon, 24 Nov 2008 22:14:59 +0000 (23:14 +0100)]
[multipath] set "multipath -f|-F" return code correctly

Thanks to Diedrich Ehlerding <diedrich.ehlerding@fujitsu-siemens.com>
for reporting this.

15 years agostrip ANSI color markers in non-interactive mode
Christophe Varoqui [Thu, 20 Nov 2008 22:16:01 +0000 (23:16 +0100)]
strip ANSI color markers in non-interactive mode

Tested with piped and redirected stdout, using either "multipath -l"
or "multipathd show topo". Seems there are no more blatant regression.
Let me know if there are, because I'm tempted to go a little further
with those ANSI codes by highlighting degrated/failure situation.

15 years ago[multipathd] easier multipathd interaction method
Christophe Varoqui [Wed, 19 Nov 2008 23:41:45 +0000 (00:41 +0100)]
[multipathd] easier multipathd interaction method

Previously using the CLI commands from the shell was done using :
multipathd -k"show paths format \"%w %d %i %s %t %T %D\""

Now you can also use :
multipathd -- show paths format "%w %d %i %s %t %T %D"
or
multipathd show paths format "%w %d %i %s %t %T %D"

15 years ago[lib] fix quote doubling when using "show conf"
Christophe Varoqui [Wed, 19 Nov 2008 22:26:59 +0000 (23:26 +0100)]
[lib] fix quote doubling when using "show conf"

15 years ago[lib] fix compilation warnings
Christophe Varoqui [Wed, 19 Nov 2008 21:52:57 +0000 (22:52 +0100)]
[lib] fix compilation warnings

Newer gcc versions are more strict with was we pass a format arg
to *printf(). Please it.

15 years ago[lib] a little try with bold term chars
Christophe Varoqui [Wed, 19 Nov 2008 21:26:13 +0000 (22:26 +0100)]
[lib] a little try with bold term chars

... to force feedback from the community. If proven to be harmful,
I can still revert the change, but it really enhance readability of
"show topo" and "multipath -l", in my opinion.

15 years ago[lib] reset multipath field widths before printing topology
Christophe Varoqui [Wed, 19 Nov 2008 21:17:50 +0000 (22:17 +0100)]
[lib] reset multipath field widths before printing topology

Doing a "show topo" after "show maps" gave different output than "show topo"
on a freshly started multipathd or than "multipath -ll". This is due to
"show map" doing a get_multipath_layout(), which result is persistent, and
affects all subsequent users of the snprint_*() functions.

This patch ensures a predictable output format by reseting the multipath
field widths in snprint_multipath_topology().

15 years ago[lib] printing readability enhancements
Christophe Varoqui [Tue, 18 Nov 2008 23:05:21 +0000 (00:05 +0100)]
[lib] printing readability enhancements

o use the ascii-mode pstree branching representation
o discard the bracketing around status informations

15 years ago[multipath] ignore header sizes when printing through "multipath -l"
Christophe Varoqui [Tue, 18 Nov 2008 00:44:31 +0000 (01:44 +0100)]
[multipath] ignore header sizes when printing through "multipath -l"

This suppresses spurious whitespaces in the output.

16 years ago[multipathd] add "show maps format ..." cli command
Christophe Varoqui [Thu, 13 Nov 2008 22:52:20 +0000 (23:52 +0100)]
[multipathd] add "show maps format ..." cli command

Just like "show paths format ...", it gives users more control
over the report format of multipaths information.

Example:
$ sudo multipathd -k'show maps format "%n %s %S %d %t %r %Q %N"'
name              vend/prod/rev    size sysfs dm-st  write_prot queueing paths
353333330000007d0 Linux,scsi_debug 8.0M dm-1  active rw         -        2
353333330000007d1 Linux,scsi_debug 8.0M dm-2  active rw         -        2
35333333000000bb8 Linux,scsi_debug 8.0M dm-3  active rw         -        2
35333333000000bb9 Linux,scsi_debug 8.0M dm-4  active rw         -        2