Skip to content

vms-eeb: DLM rung H9 — cross-node LVB READ crossing (a client reads the master's LVB via cross-node $ENQ) (0.6) - #925

Merged
baron-3dl merged 1 commit into
mainfrom
work/vms-eeb
Aug 29, 2026
Merged

vms-eeb: DLM rung H9 — cross-node LVB READ crossing (a client reads the master's LVB via cross-node $ENQ) (0.6)#925
baron-3dl merged 1 commit into
mainfrom
work/vms-eeb

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Symmetric READ-crossing mirror of vms-d81's write-crossing (#923, merged). A client reads the master's LVB back over the existing GRANT wire — no ABI change, no new send site.

Mechanism (executive, src/kernel-core/vms_lock.c): cross-node $ENQ dispatch reads master res->valblk into the reply; grant_recv stores the GRANT reply's valblk into the origin record (valblk_valid) when granted non-NL; vms_lock_dlm_origin_getlki returns org->valblk if valid else zeros; the $GETLKI origin path passes it through (was zeroed). SCSD master side adds held.valblk + copies args.valblk into the GRANT reply builder. Requester side reuses the existing marshalled inbound GRANT valblk → grant_recv. H9 only OR-s the VALBLK flag onto the existing send_enq — no new SCS send site (census non-issue, verified).

Proof: rebased onto post-#923 main (993d2e8); vms_lock.c auto-merged clean (read-crossing edits orthogonal to #923's DEQ handler, both present); scsd.c conflicts resolved (reuse #923's scsd_hex16 + LCK_M_VALBLK; union'd flags/hooks/arming); ci.yml union'd (h7+h8+h9). Local rail-prove (docker+KVM, 2 QEMU nodes, full join): DLM HARNESS H9 PASSED — B seeds LVB via local $ENQ(VALBLK), A cross-node $ENQ + GETLKI reads it back; 3-way equality A_read == B_seed == 4F564D584C56422D5245414439000000 ("OVMXLVB-READ9").

Closes the LVB pair: write (vms-d81/#923) + read (this).

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

…s value block on $ENQ (rung H9)

The symmetric mirror of the write crossing (vms-d81): a client on node A reads
the lock value block that the master (node B) holds for a resource, over the
GRANT wire, on a cross-node $ENQ. Rides the EXISTING GRANT frame + ioctl ABI --
no ABI change; the field was already there.

Executive (vms_lock.c):
- struct vms_dlm_origin gains valblk[16] + valblk_valid.
- The cross-node $ENQ dispatch now honors LCK_M_VALBLK and reads the master's
  res->valblk back into the reply (a zero inbound block triggers the read in
  vms_enq_core_ex's grant path), so the GRANT carries the master's LVB.
- grant_recv stores the GRANT reply's value block into the requester's origin
  record when a real grant lands (non-NL); a queued-reply leaves it unset.
- vms_lock_dlm_origin_getlki gains a valblk out-param; vms_ioctl_getlki's
  origin-record path returns it (was zeroed), so GETLKI(req_lkid) surfaces the
  master's LVB to the requester's $ENQ. Unset -> honest zeros, never stale.

scsd (scsd.c, master side): scsd_dlm_held carries the master's valblk, copied
from the ENQ ioctl and set into the GRANT reply frame (g.valblk). The requester
side needs no new marshalling -- the inbound GRANT valblk already reaches
grant_recv.

Harness (h9, SCS-wire, mirrors h6): node B seeds a known 16-byte LVB into RRD via
a local $ENQ(VALBLK)+$DEQ; node A does a cross-node $ENQ RRD and GETLKIs its own
handle to read the value back. Runner asserts both joined, B seeded, A read, and
A_read == B_seed == the expected pattern ("OVMXLVB-READ9"). scsd OVMX_DLM_H9
drive is additive/env-gated. ci.yml adds the dlm-harness-h9 job.

PROVEN GREEN locally (docker + KVM, 2 QEMU nodes, full VAXcluster join): "DLM
HARNESS H9 PASSED" -- B seeded 4f564d584c56422d5245414439000000, A read the
identical 16 bytes back over the GRANT wire (GETLKI rc=1). vms.ko + scsd_exe +
the wire unit test build clean; no ABI/census impact.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit 1677f3c into main Aug 29, 2026
116 checks passed
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>
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.

1 participant