| avol = fill(mkavolume(m), unmapped), err = ESUCCESS, err = err0, m = # lpt + 5 + 2 * lptlebs(# lpt, LEB_SIZE), err = ESUCCESS → ebm-vol-inv(fill(mkavolume(m), unmapped)), ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪if err = ESUCCESS then ebm_avol_get_leb_size#(avol; ; m); sb.indexaddr := adr; sb.maxino := m1; sb.log := 1; sb.orph := 3; sb.orphsize := 0; sb.lpt := 5; sb.main := 5 + 2 * lptlebs(# lpt, LEB_SIZE); if err = ESUCCESS then ebm_avol_get_page_size#(avol; ; m0); if err = ESUCCESS then ebm_avol_remap#(sb.log; avol; err); if err = ESUCCESS then ebm_avol_remap#(sb.orph; avol; err); if err = ESUCCESS then let buf = ? in {persistence_io_encode_lpt#(lpt, m; ; buf, err); if err = ESUCCESS then persistence_io_write_lebs#(sb.lpt, lptlebs(# lpt, m), buf, m; avol; err)}; if err = ESUCCESS then persistence_io_write_superblock#(sb, m0, m; avol; err); logoff := m⟫ ( ( err = ESUCCESS → (∃ lpt0, log, orphans. disk-layout(sb, # lpt0) ∧ sb.main + # lpt0 = # avol ∧ avol[0].mapped? ∧ is-encoded(sb, avol[0].data) ∧ avol[sb.orph].mapped? ∧ is-encoded-pad(orphans, sb.orphsize, avol[sb.orph].data) ∧ avol[sb.log].mapped? ∧ (logoff ≠ LEB_SIZE → # avol[sb.log].data = logoff) ∧ is-encoded(log, avol[sb.log].data) ∧ mapped-full?(avol, sb.lpt, lptlebs(# lpt0, LEB_SIZE)) ∧ is-encoded(lpt0, lebs(avol, sb.lpt, lptlebs(# lpt0, LEB_SIZE)))) ∧ m0 = EB_PAGE_SIZE ∧ m = LEB_SIZE ∧ ebm-vol-inv(avol)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → sb.indexaddr = adr ∧ sb.maxino = m1 ∧ subarray(avol, sb.main, # avol - sb.main) = fill(mkavolume(# lpt), unmapped) ∧ is-encoded(lpt, lebs(avol, sb.lpt, lptlebs(# avol - sb.main, LEB_SIZE))) ∧ avol[sb.log].data = mkbuf(0) ∧ avol[sb.orph].data = mkbuf(0))) |
avol = fill(mkavolume(m), unmapped), err = err0, err = ESUCCESS, m = # lpt + 5 + 2 * lptlebs(# lpt, LEB_SIZE), err = ESUCCESS → ebm-vol-inv(fill(mkavolume(m), unmapped)), ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪ebm_avol_get_leb_size#(avol; ; m); sb.indexaddr := adr; sb.maxino := m1; sb.log := 1; sb.orph := 3; sb.orphsize := 0; sb.lpt := 5; sb.main := 5 + 2 * lptlebs(# lpt, LEB_SIZE); if err = ESUCCESS then ebm_avol_get_page_size#(avol; ; m0); if err = ESUCCESS then ebm_avol_remap#(sb.log; avol; err); if err = ESUCCESS then ebm_avol_remap#(sb.orph; avol; err); if err = ESUCCESS then let buf = ? in {persistence_io_encode_lpt#(lpt, m; ; buf, err); if err = ESUCCESS then persistence_io_write_lebs#(sb.lpt, lptlebs(# lpt, m), buf, m; avol; err)}; if err = ESUCCESS then persistence_io_write_superblock#(sb, m0, m; avol; err); logoff := m⟫ ( ( err = ESUCCESS → (∃ lpt0, log, orphans. disk-layout(sb, # lpt0) ∧ sb.main + # lpt0 = # avol ∧ avol[0].mapped? ∧ is-encoded(sb, avol[0].data) ∧ avol[sb.orph].mapped? ∧ is-encoded-pad(orphans, sb.orphsize, avol[sb.orph].data) ∧ avol[sb.log].mapped? ∧ (logoff ≠ LEB_SIZE → # avol[sb.log].data = logoff) ∧ is-encoded(log, avol[sb.log].data) ∧ mapped-full?(avol, sb.lpt, lptlebs(# lpt0, LEB_SIZE)) ∧ is-encoded(lpt0, lebs(avol, sb.lpt, lptlebs(# lpt0, LEB_SIZE)))) ∧ m0 = EB_PAGE_SIZE ∧ m = LEB_SIZE ∧ ebm-vol-inv(avol)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → sb.indexaddr = adr ∧ sb.maxino = m1 ∧ subarray(avol, sb.main, # avol - sb.main) = fill(mkavolume(# lpt), unmapped) ∧ is-encoded(lpt, lebs(avol, sb.lpt, lptlebs(# avol - sb.main, LEB_SIZE))) ∧ avol[sb.log].data = mkbuf(0) ∧ avol[sb.orph].data = mkbuf(0)))