multipathd: add new polling dmevents waiter thread
authorBenjamin Marzinski <bmarzins@redhat.com>
Wed, 14 Mar 2018 17:46:44 +0000 (12:46 -0500)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Tue, 27 Mar 2018 20:30:21 +0000 (22:30 +0200)
commit2858c60a34527401381ea6b13cf316c3e5064383
treecb7873ee6783b903704adc2a08188cea3ec3a850
parent3ddddde67cf26aafbb71a3c032c66616c48555c9
multipathd: add new polling dmevents waiter thread

The current method of waiting for dmevents on multipath devices involves
creating a seperate thread for each device. This can become very
wasteful when there are large numbers of multipath devices. Also, since
multipathd needs to grab the vecs lock to update the devices, the
additional threads don't actually provide much parallelism.

The patch adds a new method of updating multipath devices on dmevents,
which uses the new device-mapper event polling interface. This means
that there is only one dmevent waiting thread which will wait for events
on all of the multipath devices.  Currently the code to get the event
number from the list of device names and to re-arm the polling interface
is not in libdevmapper, so the patch does that work. Obviously, these
bits need to go into libdevmapper, so that multipathd can use a standard
interface.

I haven't touched any of the existing event waiting code, since event
polling was only added to device-mapper in version 4.37.0.  multipathd
checks this version, and defaults to using the polling code if
device-mapper supports it. This can be overridden by running multipathd
with "-w", to force it to use the old event waiting code.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Makefile.inc
libmultipath/structs_vec.c
libmultipath/structs_vec.h
multipathd/Makefile
multipathd/dmevents.c [new file with mode: 0644]
multipathd/dmevents.h [new file with mode: 0644]
multipathd/main.c