| # lpt = # avol, m = m2, m1 = m3, ebm-vol-inv(avol), wbuf-cons(bleb, wbuf, avol, rofs), ¬ rofs → bleb = buffered(m3) ∨ (bleb = nobuffer ∨ wbuf.nbytes = 0) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪if ¬ rofs → bleb = buffered(m1) ∨ (bleb = nobuffer ∨ wbuf.nbytes = 0) ∧ m1 < # avol ∧ avol[m1].mapped? ∧ m0 = # avol[m1].data then if rofs then err := EROFS else {apersistence_io_add_log_leb#(m1, adr, m, avol, lpt, ns; plog; err); if err = ESUCCESS then wbuf_move_buf#(m1, m0, rofs, avol; bleb, wbuf; err)} else abort⟫ wbuf-cons(bleb, wbuf, avol, rofs) |
# lpt = # avol, m = m2, m1 = m3, ebm-vol-inv(avol), wbuf-cons(bleb, wbuf, avol, rofs), ¬ rofs → bleb = buffered(m3) ∨ (bleb = nobuffer ∨ wbuf.nbytes = 0) ∧ m3 < # avol ∧ avol[m3].mapped? ∧ m0 = # avol[m3].data ⊦ ⟪if rofs then err := EROFS else {apersistence_io_add_log_leb#(m1, adr, m, avol, lpt, ns; plog; err); if err = ESUCCESS then wbuf_move_buf#(m1, m0, rofs, avol; bleb, wbuf; err)}⟫ wbuf-cons(bleb, wbuf, avol, rofs)