vms-76d: DLM BLKAST two-node WIRE — a remote holder receives a real blocking-AST over SCS (0.6) - #918
Merged
Conversation
… blocking-AST over SCS (H6)
The symmetric mirror of the H5 requester-side GRANT receive (vms-6ca). Closes
the honest SS$_UNSUPPORTED at vms_lock_dlm_xnode_dispatch's VMS_DLM_OP_BLKAST
case: a real master->holder BLKAST now fires the holder's blocking AST for real.
Executive (src/kernel-core/vms_lock.c):
- vms_lock_dlm_xnode_blkast_recv(): finds the holder-side ORIGIN record by
req_lkid and queues a GENUINE user-mode blocking AST to the delivering proc's
USER AST queue (same path as notify_blocking_asts), drainable via DELIVERAST.
No holder record / no registered blkastadr => SS$_UNSUPPORTED (INV-6, no fake).
- grant_recv now records the holder's blkastadr/blkastprm when a GRANT establishes
a holder origin at a granted mode.
- the ENQ path reports blocking_req_lkid (the blocking holder's requester-side
handle) so the daemon can address the BLKAST to the holder's origin record.
ABI: struct vms_dlm_xnode_args grows blocking_req_lkid + blkastadr/blkastprm +
blkast_delivered (92->120), updated in BOTH src/kernel/vms_ioctl.h and
src/kernel-netbsd/vms_lock_nb.h with matching _Static_asserts. New focused kif
wrapper vms_kif_dlm_xnode_blkast (src/libvmssys).
Transport (src/vmsscs/scsd.c): node B WIREs a real SCS_DLM_OP_BLKAST to the
holder when an ENQ queues behind a cross-node holder (SCSD-I-DLMBLKSENT); node A
establishes its holder origin WITH a blkast routine (SCSD-I-DLMHOLDARM), RECEIVEs
the BLKAST (SCSD-I-DLMBLKAST), dispatches it into its executive, and drains the
fired AST via DELIVERAST (SCSD-I-DLMBLKFIRE), THEN releases the holder in RESPONSE
to the BLKAST (not the H5 holder-releases-on-its-own shortcut).
Proof (Rule 9): test_syssvc_dlm_xnode.c gains the holder-side BLKAST receive +
DELIVERAST drain (runs on x86_64 + Alpha LP64). New 2-node harness
tests/qemu/{init,run}_dlm_h6.sh + Dockerfile.dlm-harness-h6 + CI job dlm-harness-h6:
two real-/dev/vms OVMX nodes, B WIREs a BLKAST, A receives+fires it for real.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SwfchU4UcPzfdkLL2JSV4T
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SwfchU4UcPzfdkLL2JSV4T
…nsus) The BLKAST-wire kif wrapper is test-only, like vms_kif_dlm_xnode: its product carrier is scsd, a glibc process that reaches /dev/vms with direct POSIX ioctls (scsd_dlm_holder_establish / scsd_dlm_blkast_fire), not this freestanding client. Declare it OVMX-UNWIRED (vms-76d) in src/libvmssys/vms_kif.h so the INV-6 executive-boundary caller census (kif_caller_census) accounts for it honestly -- NOT an allowlist entry: the census still fails if it ever gains a product caller while keeping the declaration. Local: 'kif_caller_census: PASS'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SwfchU4UcPzfdkLL2JSV4T
baron-3dl
added a commit
that referenced
this pull request
Aug 30, 2026
…der is COMPLETE (H0→H11) (#931) The cluster-dlm.yaml was last_reviewed 2026-08-28, before H10b/e84/H11 landed — it still read remaster/LVB/deadlock 'absent' and BLKAST 'deferred', which the merges (#918 BLKAST H6, #923/#925 LVB H8/H9, #927/#928 remaster H10a/H10b, #929 e84 directory-guard, #930 H11 deadlock — all on main) made false. Update all four items partial→verified with verified_against pointing at the multi-node /dev/vms harnesses that prove them, rewrite the summary to the complete ladder + the honest remaining DEPTH (vms-04f concurrent-initiate proof, vms-b96 directory REDIRECT, vms-d1f post-1.0 app-acquisition), add REBUILD=5/DLKSRCH=6 to the opcode set, and render_compat.py (docs/compatibility-surface.md regenerated, drift gate clean). Closes the vms-7fa epic on the compat surface. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
0.6 cluster-correctness: closes the honest SS$_UNSUPPORTED at vms_lock.c's VMS_DLM_OP_BLKAST — the symmetric mirror of the H5 GRANT-receive (#875). A real master→holder BLKAST over SCS now fires a GENUINE user-mode blocking AST on the holder (drained via DELIVERAST), and the holder releases BECAUSE of it — not the H5 holder-releases-on-its-own shortcut.
Merges to main (0.6 milestone accumulation).
🤖 Generated with Claude Code