Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

multipath-tools 0.11.1 #110

Open
wants to merge 9 commits into
base: stable-0.11.y
Choose a base branch
from

Conversation

mwilck
Copy link
Collaborator

@mwilck mwilck commented Jan 25, 2025

multipath-tools 0.11.1, 2025/02

This release contains backported bug fixes from the master branch up to 0.12.

Bug fixes

  • Fix multipathd crash because of invalid path group index value, for example
    if an invalid path device was removed from a map.
    Fixes #105.
  • Make sure maps are reloaded in the path checker loop after detecting an
    inconsistent or wrong kernel state (e.g. missing or falsely mapped path
    device). Wrongly mapped paths will be unmapped and released to the system.
    Fixes another issue reported in
    #105.
  • Fix the problem that group_by_tpg might be disabled if one or more
    paths were offline during initial configuration.
  • Fix possible misdetection of changed pathgroups in a map.
  • Fix the problem that if a map was scheduled to be reloaded already,
    max_sectors_kb might not be set on a path device that
    was being added to a multipath map. This problem was introduced in 0.9.9.

mwilck and others added 9 commits January 24, 2025 16:57
pp->pgindex is set in disassemble_map() when a map is parsed.
There are various possiblities for this index to become invalid.
pp->pgindex is only used in enable_group() and followover_should_fallback(),
and both callers take no action if it is 0, which is the right
thing to do if we don't know the path's pathgroup.

Make sure pp->pgindex is reset to 0 in various places:
- when it's orphaned,
- before (re)grouping paths,
- when we detect a bad mpp assignment in update_pathvec_from_dm().
- when a pathgroup is deleted in update_pathvec_from_dm(). In this
  case, pgindex needs to be invalidated for all paths in all pathgroups
  after the one that was deleted.

The hunk in group_paths is mostly redundant with the hunk in free_pgvec(), but
because we're looping over pg->paths in the former and over pg->pgp in
the latter, I think it's better too play safe.

Fixes: 99db1bd ("[multipathd] re-enable disabled PG when at least one path is up")
Fixes: opensvc#105
Signed-off-by: Martin Wilck <[email protected]>
Reviewed-by: Benjamin Marzinski <[email protected]>
(cherry picked from commit cd912cf)
The previous algorithm didn't detect the case case where cpgp
contained a path that was not contained in pgp. Fix this.

Cherry-picked from d4b35f6
Fixes: 90773ba ("libmultipath: resolve hash collisions in pgcmp()")
Signed-off-by: Martin Wilck <[email protected]>
If map creation succeeds, previously not multipathed devices are
now multipathed. udev may not have noticed this yet, thus trigger
path uevents to make it aware of the situation. Likewise, if
creating a map fails, the paths in question were likely considered
multipath members by udev, too. They will now be marked as failed,
so trigger an event in this situation as well.

Fixes: opensvc#103
Suggested-by: Benjamin Marzinski <[email protected]>
Signed-off-by: Martin Wilck <[email protected]>
Reviewed-by: Benjamin Marzinski <[email protected]>
(cherry picked from commit 98b3a7b)
... if a map has been flushed. In this case, we know that the
the paths haven't been multipathed by coalesce_paths() because of the current
configuration (failure to create the map can't be the reason if the map
exists in coalesce_maps()). Make sure udev sees the paths which have
been released from the map as non-multipath.

Note that this is the only case where maps are flushed where it is correct
to trigger paths uevents. In other cases, e.g. after a "remove map" CLI
command, the configuration is unchanged and if we triggered an uevent,
the map would be re-created by multipathd when the uevent arrived.

Signed-off-by: Martin Wilck <[email protected]>
Reviewed-by: Benjamin Marzinski <[email protected]>
(cherry picked from commit ad3ea47)
If a multipath device already has need_reload set when a path is
adopted, it won't call set_path_max_sectors_kb() because of
short-circuit evaluation. This isn't what's intended.

Fixes: e5e20c7 ("libmultipath: set max_sectors_kb in adopt_paths()")
Signed-off-by: Benjamin Marzinski <[email protected]>
Reviewed-by: Martin Wilck <[email protected]>
(cherry picked from commit f5c0c4b)
This change doesn't actually fix anything. The code was already safe.

Signed-off-by: Benjamin Marzinski <[email protected]>
Reviewed-by: Martin Wilck <[email protected]>
(cherry picked from commit 85ec51e)
multipath wouldn't autodetect the GROUP_BY_PRIO path grouping policy or
allow the GROUP_BY_TPG policy if there was a path that didn't have its
prioritizer selected (for instance because multipathd was reconfigured
while it was offline). To avoid this, make verify_alua_prio() assume an
alua multipath device if all the paths with a prioritizer selected
(there must be at least one) use an alua-based prioritizer.

Signed-off-by: Benjamin Marzinski <[email protected]>
Reviewed-by: Martin Wilck <[email protected]>
(cherry picked from commit b47a577)
@mwilck mwilck requested a review from bmarzins January 25, 2025 00:08
@mwilck
Copy link
Collaborator Author

mwilck commented Jan 25, 2025

I know this PR comes a little early. We don't need to merge it just yet.

My personal timing was a bit tight because the 0.11.0 release was delayed over the holidays and I wanted to have a consolidated 0.10.2 code base in in SLE15-SP7.

Now that @bmarzins and I can push this repository (thanks Christophe!), this and #109 are also meant as demos for how the "stable releases" may play out in the future.

Copy link
Collaborator

@bmarzins bmarzins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants