| # avol0 = # avol1, # lpt0 = # avol1, # buf0 = EB_PAGE_SIZE, avol1[m5] = mapped(buf), m5 < # avol1, abs(avol1, bleb1, mkwbuf(buf0, m4, m3), avol0, false), awbuf-inv(avol1, bleb1), ebm-vol-inv(avol0), synced(avol1), ⌊err0⌋ , bleb1 ≠ nobuffer → bleb1.leb < # avol1 ∧ wbuf-cons(mkwbuf(buf0, m4, m3), avol0[bleb1.leb], false), bleb1 ≠ buffered(m5) → bleb1 = nobuffer ∨ m3 = 0 → avol0[m5].mapped?, bleb1 = buffered(m5) ∨ (bleb1 = nobuffer ∨ m3 = 0) ∧ avol0[m5].mapped? ∧ # buf = # avol0[m5].data ⊦ ⟨choose err0 with ⌊err0⌋ ∨ err0 = ESUCCESS in err := err0; plog := plog0; bleb := bleb1; if err = ESUCCESS then plog := plog + m5 ', bleb := buffered(m5)⟩ (bleb = bleb1 ∧ plog = plog0 ∧ err0 = err) |
# buf0 = EB_PAGE_SIZE, # lpt0 = # avol1, # avol0 = # avol1, avol1[m5] = mapped(buf), m5 < # avol1, abs(avol1, bleb1, mkwbuf(buf0, m4, m3), avol0, false), awbuf-inv(avol1, bleb1), ebm-vol-inv(avol0), synced(avol1), ⌊err1⌋ , bleb1 ≠ buffered(m5) → bleb1 = nobuffer ∨ m3 = 0 → avol0[m5].mapped?, bleb1 ≠ nobuffer → bleb1.leb < # avol1 ∧ wbuf-cons(mkwbuf(buf0, m4, m3), avol0[bleb1.leb], false), bleb1 = buffered(m5) ∨ (bleb1 = nobuffer ∨ m3 = 0) ∧ avol0[m5].mapped? ∧ # buf = # avol0[m5].data ⊦ ∃ err0. (⌊err0⌋ ∨ err0 = ESUCCESS) ∧ ⟨err := err0; plog := plog0; bleb := bleb1; if err = ESUCCESS then plog := plog + m5 ', bleb := buffered(m5)⟩ (bleb = bleb1 ∧ plog = plog0 ∧ err1 = err)