mbox series

[v3,0/4] fix issue of multipathd not tracking device

Message ID 20250402231322.3044064-1-bmarzins@redhat.com (mailing list archive)
Headers show
Series fix issue of multipathd not tracking device | expand

Message

Benjamin Marzinski April 2, 2025, 11:13 p.m. UTC
I ran into an issue where multipathd wasn't tracking a multipath
device that was created by the multipath command. It turns out that if
multipathd fully initialized a path device, and that device later
goes offline and then a multipath device that could use that path is
created by multipath, multipathd will attempt to reload the device
to use the offline path, which will fail. This will cause it to not
track the multipath device at all.

The first patch fixes this. The second patch is prep work. The third
patch allows mutipathd to track these offline paths that should belong
to a device, and add them to device once they come back online. The
third fourth is just a cleanup.

changes from v2
- 0002: New patch to avoid duplicating the code to determine if we
        can recheck the paths wwid.
- 0003: Always recheck WWID when path comes back online if capable
        (suggested by Martin Wilck). Fixed holdover code from v1 to
        set pp->initialized = INIT_OK when the path came back online.
        Fixed typo in documentation.

changes from v1
- 0002: Switch from tracking this state with pp->initialized to a new
        variable, as suggested by Martin Wilck. To make is so that
        multipathd can still show paths in this state without adding
        a new wildcard for it, add [offline] as a possible output for
        the %m (multipath device) path wildcard, for paths that
        couldn't be added to a multipath device because they are
        offline. Also constify a function parameter and add an
        explanitory comment as suggested by Martin.

Benjamin Marzinski (4):
  multipathd: monitor new multipath dev even if we can't update it
  libmultipath: add helper function check_path_wwid_change
  multipathd: re-add paths skipped because they were offline
  multipathd: don't update paths in INIT_MISSING_UDEV

 libmultipath/discovery.c          | 12 ++++++-
 libmultipath/discovery.h          |  2 +-
 libmultipath/libmultipath.version |  5 +++
 libmultipath/print.c              |  5 ++-
 libmultipath/propsel.c            |  4 +--
 libmultipath/structs.h            |  1 +
 libmultipath/structs_vec.c        |  5 +++
 multipathd/main.c                 | 59 +++++++++++++++++++++++++++++--
 multipathd/multipathd.8.in        |  5 +--
 9 files changed, 87 insertions(+), 11 deletions(-)

Comments

Martin Wilck April 4, 2025, 10:54 a.m. UTC | #1
On Wed, 2025-04-02 at 19:13 -0400, Benjamin Marzinski wrote:
> I ran into an issue where multipathd wasn't tracking a multipath
> device that was created by the multipath command. It turns out that
> if
> multipathd fully initialized a path device, and that device later
> goes offline and then a multipath device that could use that path is
> created by multipath, multipathd will attempt to reload the device
> to use the offline path, which will fail. This will cause it to not
> track the multipath device at all.
> 
> The first patch fixes this. The second patch is prep work. The third
> patch allows mutipathd to track these offline paths that should
> belong
> to a device, and add them to device once they come back online. The
> third fourth is just a cleanup.
> 
> changes from v2
> - 0002: New patch to avoid duplicating the code to determine if we
>         can recheck the paths wwid.
> - 0003: Always recheck WWID when path comes back online if capable
>         (suggested by Martin Wilck). Fixed holdover code from v1 to
>         set pp->initialized = INIT_OK when the path came back online.
>         Fixed typo in documentation.
> 
> changes from v1
> - 0002: Switch from tracking this state with pp->initialized to a new
>         variable, as suggested by Martin Wilck. To make is so that
>         multipathd can still show paths in this state without adding
>         a new wildcard for it, add [offline] as a possible output for
>         the %m (multipath device) path wildcard, for paths that
>         couldn't be added to a multipath device because they are
>         offline. Also constify a function parameter and add an
>         explanitory comment as suggested by Martin.
> 
> Benjamin Marzinski (4):
>   multipathd: monitor new multipath dev even if we can't update it
>   libmultipath: add helper function check_path_wwid_change
>   multipathd: re-add paths skipped because they were offline
>   multipathd: don't update paths in INIT_MISSING_UDEV
> 
>  libmultipath/discovery.c          | 12 ++++++-
>  libmultipath/discovery.h          |  2 +-
>  libmultipath/libmultipath.version |  5 +++
>  libmultipath/print.c              |  5 ++-
>  libmultipath/propsel.c            |  4 +--
>  libmultipath/structs.h            |  1 +
>  libmultipath/structs_vec.c        |  5 +++
>  multipathd/main.c                 | 59
> +++++++++++++++++++++++++++++--
>  multipathd/multipathd.8.in        |  5 +--
>  9 files changed, 87 insertions(+), 11 deletions(-)

For the series:
Reviewed-by: Martin Wilck <mwilck@suse.com>