[dm-devel] [PATCH 2/2] multipathd: skip spurious event message for blacklisted paths
Benjamin Marzinski
bmarzins at redhat.com
Mon Dec 12 14:23:40 UTC 2016
Why don't we just call pathinfo here? I see that you set the pathvec to
NULL so that you don't actually store the path, but this sure does a lot
of unnecessary work before failing. AFAICT, just calling pathinfo with
DI_BLACKLIST already gets you what you need (it checks both the device
and wwid blacklists). Am I missing something here?
-Ben
On Sat, Dec 10, 2016 at 02:05:23PM -0200, Mauricio Faria de Oliveira wrote:
> Currently, multipath still prints the 'spurious uevent, path not found'
> message if a path is blacklisted by something different than a devnode
> in the 'change' uevent handling. (uev_trigger() calls filter_devnode()).
>
> Thus blacklisting by device vendor/product and wwid still renders that
> message in the system log -- since it's verbosity level 0 -- for paths
> that are explicitly marked to be ignored.
>
> This problem happens on common scenarios such as creating filesystems
> on a blacklisted device (e.g., mkfs.* /dev/sdX), which is usually run
> several times on test environments, and the error message may mislead
> the error checker/monitor tools with false negatives.
>
> This patch resolves this problem by calling/checking path_discover()
> for PATHINFO_SKIPPED with just enough device information flags for
> blacklist verification -- and it prints a debug message (verbosity
> level 3) instead of an error message since this case is not an error.
>
> Even though it introduces a bit of overhead to get the path info,
> it is only exercised in the error/non-default path -- so not a problem.
>
> Test-case (on QEMU):
>
> /etc/multipath.conf:
>
> blacklist {
> device {
> vendor "QEMU"
> }
> }
>
> # multipathd -d &
> ...
> Dec 10 08:06:27 | sda: (QEMU:QEMU HARDDISK) vendor/product blacklisted
> ...
>
> # mkfs.ext3 -F /dev/sda
> ...
>
> Dec 10 08:07:05 | sda: spurious uevent, path not found
>
> With the patch applied, no message is printed by default.
> It's still possible to get the event logged for debug with '-v3':
>
> Dec 10 09:08:51 | sda: spurious uevent, path blacklisted
>
> Reported-by: Yueh Chyong (Ida) Jackson <idaj at us.ibm.com>
> Signed-off-by: Mauricio Faria de Oliveira <mauricfo at linux.vnet.ibm.com>
> ---
> multipathd/main.c | 22 +++++++++++++++++++++-
> 1 file changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/multipathd/main.c b/multipathd/main.c
> index d6f081f..364fecb 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -1010,8 +1010,28 @@ uev_update_path (struct uevent *uev, struct vectors * vecs)
> }
> out:
> lock_cleanup_pop(vecs->lock);
> - if (!pp)
> + if (!pp) {
> + /* If the path is blacklisted, print a debug/non-default verbosity message. */
> + if (uev->udev) {
> + int flag = DI_BLACKLIST | DI_SYSFS | DI_WWID;
> + struct udev_device *udevice;
> +
> + udevice = udev_device_ref(uev->udev);
> + conf = get_multipath_config();
> +
> + retval = path_discover(NULL, conf, udevice, flag);
> +
> + put_multipath_config(conf);
> + udev_device_unref(uev->udev);
> +
> + if (retval == PATHINFO_SKIPPED) {
> + condlog(3, "%s: spurious uevent, path blacklisted", uev->kernel);
> + return 0;
> + }
> + }
> +
> condlog(0, "%s: spurious uevent, path not found", uev->kernel);
> + }
>
> return retval;
> }
> --
> 2.7.4
>
> --
> dm-devel mailing list
> dm-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
More information about the dm-devel
mailing list