Skip to content

Partitioned communication fixes on main that were never back-ported to v5.0.x #14157

Description

@jsquyres

v5.0.x has fallen well behind main (and v6.0.x) on partitioned communication. Its most recent functional partitioned fix is from February 2022; everything landed since has gone to main and, mostly, to v6.0.x, but not to v5.0.x.

This issue enumerates the gap. Below, "on v6.0.x" means the commit (or an equivalent) is already on the v6.0.x branch.

Correctness / conformance fixes (the ones that actually matter to users)

Commit PR Date On v6.0.x? Description
bcf1d5b #12730 2024-08-01 yes Added a partcomm fix for mismatched types
2cb4296 #14103 2026-06-26 yes (#14114) Fix issue #14003: MPI_Parrived with null or inactive requests
6a509ec #13840 2026-04-23 yes ompi: Fix remnants of req_complete being a bool

Plus the three fixes in flight for main in #14155, which are not yet merged:

  • part/persist: cancel the setup handshake when freeing a request — a deadlock and use-after-free. Freeing a partitioned request that was never started leaves its lazy-setup receive posted on the user's communicator/peer/tag, against recycled memory; it then consumes the setup message of the next partitioned operation on that same communicator/peer/tag, which never initializes and hangs in MPI_Wait.
  • Fix MPI_Parrived for null and inactive requests (supersedes / builds on Fix issue #14003: MPI_Parrived with null or inactive requests #14103; MPI-5.0 §4.2.2).
  • Support MPI_PROC_NULL in partitioned communication — MPI_Psend_init/MPI_Precv_init pass MPI_PROC_NULL to the PML as if it were a real peer rank, which reads outside the communicator's process array (undefined behavior; crashes depending on what sits before the array). MPI-5.0 §3.10.

Instrumentation

Commit PR Date On v6.0.x? Description
6117a39 #13837 2026-04-21 yes spc: add missing per-function counters for partitioned communication

Build / infrastructure (likely v6-era, probably not wanted on v5.0.x)

Commit PR Date On v6.0.x? Description
86be709 #12226 2024-08-12 yes Generate interfaces for C with bigcount
6e9cf74 #13033 2024-12-16 yes rename component struct in declaration to match definition
93a4464 #13193 2025-03-08 yes build: Add static component pointers for LTO

86be709c68 in particular is the C binding generator work — v5.0.x predates it and still has hand-written ompi/mpi/c/parrived.c rather than parrived.c.in, so this one is structural, not a candidate.

Cosmetic

Commit PR Date On v6.0.x? Description
700a4a0 #14104 2026-06-27 no (#14156 proposed) PART_PT2PT: squash compiler warning

Can these just be cherry-picked?

Partly. I trialled the picks against v5.0.x in a scratch worktree:

  • The C code ports better than expected. Even though v5.0.x predates the binding generator (parrived.c, not parrived.c.in), git's rename detection bridges the split during the 3-way merge, so the binding changes land on the right pre-6.0 files. v5.0.x also already has ompi_request_persistent_noop_create() and already uses it in recv_init.c, so the MPI_PROC_NULL fix's convention is available there.
  • Order matters. Fix issue #14003: MPI_Parrived with null or inactive requests #14103 must be picked before the MPI_Parrived fix from Fix MPI_Parrived for null/inactive requests, and partitioned communication with MPI_PROC_NULL #14155, since the latter modifies the code the former adds. (Or the two can be squashed for v5.0.x.)
  • Every conflict is in non-code files, and each needs a decision:
    • the changelog entries target docs/release-notes/changelog/v6.1.x.rst, which does not exist on v5.0.x — they must be retargeted to v5.0.x.rst;
    • the make check test wiring (configure.ac, test/mpi/Makefile.am, .gitignore) conflicts, because v5.0.x's test/mpi has no t/ or file/ subdirectories;
    • test/mpi/part/Makefile.am must drop its include $(top_srcdir)/test/Makefile.mca-dso-check, since that fix is specific to main/v6.0.x.

So a v5.0.x back-port is a hand-adapted PR, not a plain cherry-pick — but the code itself is not the hard part.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions