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 <[email protected]>
> Signed-off-by: Mauricio Faria de Oliveira <[email protected]>
> ---
>  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
> [email protected]
> https://www.redhat.com/mailman/listinfo/dm-devel

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to