| isbuf ↔ isbuf0, log = log1, lpt = lpt1, lpt0 = lpt2, m = m5, m0 = m4, m1 = m6, m2 = LEB_SIZE, ns = ns1 ⊦ ⟪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 → ⟨apersistence_format#(m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( abs-istore(avol, lpt0, istore1) ∧ abs-gstore(avol, lpt0, gstore1, ginval) ∧ adr1 = adr0 ∧ maxino = m0 ∧ log2 = log ∧ ginval < # lpt0 ∧ ns2 = ns ∧ flash-lpt-cons(lpt, istore2, gstore2) ∧ (isbuf1 → synced(avol)) ∧ (pstate0 = unbuffered → bleb = nobuffer) ∧ (pstate0 = readonly ↔ isbuf) ∧ (pstate0 ≠ unbuffered ∧ pstate0 ≠ readonly → bleb = buffered(pstate0.lnum)) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ adr, istore, istore0, ns, gstore, gstore0, log, m, ns0, pstate, isbuf. ⟨apersistence_format# (m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( adr = adr1 ∧ istore = istore1 ∧ istore0 = istore2 ∧ ns = ginval ∧ gstore = gstore1 ∧ gstore0 = gstore2 ∧ log = log2 ∧ m = maxino ∧ ns0 = ns2 ∧ pstate = pstate0 ∧ (isbuf ↔ isbuf1) ∧ err = err0)))) |
isbuf ↔ isbuf0, log = log1, lpt = lpt1, lpt0 = lpt2, m = m5, m0 = m4, m1 = m6, m2 = LEB_SIZE, ns = ns1 ⊦ ⟪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 → ⟨apersistence_format#(m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( abs-istore(avol, lpt0, istore1) ∧ abs-gstore(avol, lpt0, gstore1, ginval) ∧ adr1 = adr0 ∧ maxino = m0 ∧ log2 = log ∧ ginval < # lpt0 ∧ ns2 = ns ∧ flash-lpt-cons(lpt, istore2, gstore2) ∧ (isbuf1 → synced(avol)) ∧ (pstate0 = unbuffered → bleb = nobuffer) ∧ (pstate0 = readonly ↔ isbuf) ∧ (pstate0 ≠ unbuffered ∧ pstate0 ≠ readonly → bleb = buffered(pstate0.lnum)) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ adr, istore, istore0, ns, gstore, gstore0, log, m, ns0, pstate, isbuf. ⟨apersistence_format# (m3, LEB_SIZE, m6; ; adr1, istore1, istore2, ginval, gstore1, gstore2, log2, maxino, ns2, pstate0, isbuf1, err0)⟩ ( adr = adr1 ∧ istore = istore1 ∧ istore0 = istore2 ∧ ns = ginval ∧ gstore = gstore1 ∧ gstore0 = gstore2 ∧ log = log2 ∧ m = maxino ∧ ns0 = ns2 ∧ pstate = pstate0 ∧ (isbuf ↔ isbuf1) ∧ err = err0))))