| adr0 = adr, log = log1, log0 = log2, lpt = lpt1, lpt0 = lpt2, m = m4, m0 = m5, m2 = LEB_SIZE, m3 = m6 ⊦ ⟪if m2 = LEB_SIZE then {lpt0 := mklparray(m3); lpt0 := fill(lpt0, mklp(0, 0, LP_FREE, 0)); let adr = @(0, 0, 0) in awbuf_format#(m3, m2, lpt0, adr, m1; ; adr0, m0, log0, avol, lpt, ns, bleb, isbuf, err); if err ≠ ESUCCESS then debug#("persistence: wbuf format failed") else {awbuf_get_leb_size#(adr0, m0, log0, avol, lpt, ns, bleb, isbuf; ; m); log := []; persistence_create_freelist#(lpt0; freelist); gc_heap_empty#(; gch)}} else abort⟫ ( err = ESUCCESS → synced(avol) ∧ lpt-free-unref(lpt0) ∧ lpt-free-unref(lpt) ∧ freelist-cons(lpt0, freelist) ∧ log = log0 ∧ bin-heap-inv(gch, lpt0) ∧ keyset(gch) = gc-heap(lpt0, log0) ∧ bufs-log-only(bleb, log0, lpt0) ∧ # lpt0 = # avol ∧ ¬ dups(log0) ∧ log-group-block(log0, lpt0) ∧ buf-ro-rw-mode(isbuf, bleb, lpt0, avol) ∧ lpt-leb-size(lpt0) ∧ lpt-leb-size(lpt) ∧ lpt-ram-flash(lpt0, lpt, log0) ∧ m = LEB_SIZE ∧ awbuf-inv(avol, bleb) ∧ # lpt = # avol) |
adr0 = adr, log = log1, log0 = log2, lpt = lpt1, lpt0 = lpt2, m = m4, m0 = m5, m2 = LEB_SIZE, m3 = m6 ⊦ ⟪lpt0 := mklparray(m3); lpt0 := fill(lpt0, mklp(0, 0, LP_FREE, 0)); let adr = @(0, 0, 0) in awbuf_format#(m3, m2, lpt0, adr, m1; ; adr0, m0, log0, avol, lpt, ns, bleb, isbuf, err); if err ≠ ESUCCESS then debug#("persistence: wbuf format failed") else {awbuf_get_leb_size#(adr0, m0, log0, avol, lpt, ns, bleb, isbuf; ; m); log := []; persistence_create_freelist#(lpt0; freelist); gc_heap_empty#(; gch)}⟫ ( err = ESUCCESS → synced(avol) ∧ lpt-free-unref(lpt0) ∧ lpt-free-unref(lpt) ∧ freelist-cons(lpt0, freelist) ∧ log = log0 ∧ bin-heap-inv(gch, lpt0) ∧ keyset(gch) = gc-heap(lpt0, log0) ∧ bufs-log-only(bleb, log0, lpt0) ∧ # lpt0 = # avol ∧ ¬ dups(log0) ∧ log-group-block(log0, lpt0) ∧ buf-ro-rw-mode(isbuf, bleb, lpt0, avol) ∧ lpt-leb-size(lpt0) ∧ lpt-leb-size(lpt) ∧ lpt-ram-flash(lpt0, lpt, log0) ∧ m = LEB_SIZE ∧ awbuf-inv(avol, bleb) ∧ # lpt = # avol)