| wlar[n1] = wl-entry(m1, stat0), wlar[n2] = wl-entry(m0, stat), n1 < # wlar, n2 < # wlar, v ∈ vols ∧ m2 < # vols[v] ∧ vols[v][m2] = ⌜n1⌝ ∨ v = VTBL_VOLID ∧ m2 = VTBL_LNUM ∧ vtblpnum = n1 ⊦ [n := sqnum; sqnum := sqnum + 1; let avhdr = avidhdr(v, m2, n, datasize(buf, n0), 0) in {n0 := datasize(buf, n0); if n0 ≠ 0 then avhdr.checksum := checksum(buf, n0); aubi_io_write_vidhdr#(n2, avhdr; apebs; err); vtblpnum2 := n2; if err = ESUCCESS then if n0 ≠ 0 then aubi_io_write_data_wl#(vtblpnum2, align↑(n0, EB_PAGE_SIZE), buf; apebs; err); wlar0 := wlar; if err = ESUCCESS then {if v = VTBL_VOLID ∧ m2 = VTBL_LNUM then {ubi_wl_put_peb#(VTBL_VOLID × VTBL_LNUM, vtblpnum; wlar, q); bflipset := bflipset -- vtblpnum; vtblpnum := vtblpnum2} else {if vols[v][m2] ≠ unmapped then let vtblpnum0 = vols[v][m2].pnum in {ubi_wl_put_peb#(v × m2, vtblpnum0; wlar, q); bflipset := bflipset -- vtblpnum0}; vols[v][m2] := ⌜vtblpnum2⌝ }; wlar[vtblpnum2] := wl-entry(wlar[vtblpnum2].ec, used)} else ubi_wl_put_peb#(none, vtblpnum2; wlar, q)}] ( sum-of-differences(ecs(wlar).max, ecs(wlar)) = sum-of-differences(ecs(wlar0).max, ecs(wlar0)) ∧ ecs(wlar) = ecs(wlar0) ∧ (err = ESUCCESS → wlar[n2].ec = m0 ∧ wlar[n1].ec = m1)), n2 = n1 |
wlar[n2] = wl-entry(m0, stat), wlar[n1] = wl-entry(m1, stat0), n2 < # wlar, n1 < # wlar, v ∈ vols ∧ m2 < # vols[v] ∧ vols[v][m2] = ⌜n1⌝ ∨ v = VTBL_VOLID ∧ m2 = VTBL_LNUM ∧ vtblpnum = n1 ⊦ [sqnum0 := sqnum + 1; let avhdr = avidhdr(v, m2, sqnum, datasize(buf, n0), 0) in {n0 := datasize(buf, n0); if n0 ≠ 0 then avhdr.checksum := checksum(buf, n0); aubi_io_write_vidhdr#(n2, avhdr; apebs; err); vtblpnum2 := n2; if err = ESUCCESS then if n0 ≠ 0 then aubi_io_write_data_wl#(vtblpnum2, align↑(n0, EB_PAGE_SIZE), buf; apebs; err); wlar0 := wlar; if err = ESUCCESS then {if v = VTBL_VOLID ∧ m2 = VTBL_LNUM then {ubi_wl_put_peb#(VTBL_VOLID × VTBL_LNUM, vtblpnum; wlar, q); bflipset := bflipset -- vtblpnum; vtblpnum := vtblpnum2} else {if vols[v][m2] ≠ unmapped then let vtblpnum0 = vols[v][m2].pnum in {ubi_wl_put_peb#(v × m2, vtblpnum0; wlar, q); bflipset := bflipset -- vtblpnum0}; vols[v][m2] := ⌜vtblpnum2⌝ }; wlar[vtblpnum2] := wl-entry(wlar[vtblpnum2].ec, used)} else ubi_wl_put_peb#(none, vtblpnum2; wlar, q)}] ( sum-of-differences(ecs(wlar).max, ecs(wlar)) = sum-of-differences(ecs(wlar0).max, ecs(wlar0)) ∧ ecs(wlar) = ecs(wlar0) ∧ (err = ESUCCESS → wlar[n2].ec = m0 ∧ wlar[n1].ec = m1)), n2 = n1