| # 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) |
# lpt = # avol, m = m2, m1 = m3, rofs, 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 ⊦ ⟪err := EROFS⟫ wbuf-cons(bleb, wbuf, avol, rofs)
# lpt = # avol, m = m2, m1 = m3, ¬ rofs, 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 ⊦ ⟪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)