| ubi_create_volume#(VOLID, N, LEBSIZE, PAGESIZE; VOLS, WLARRAY, ERASEQ, BFLIPSET, VTBLPNUM, SQNUM, APEBS; ERR) {if VOLID ∈ VOLS ∨ VOLID = VTBL_VOLID then ERR := EINVAL else if ENCODED_NAT_SIZE + (# VOLS + 1) * (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) > LEBSIZE then ERR := ENOSPC else let PNUM = ? in {ubi_erase_all#(VOLS, BFLIPSET, VTBLPNUM, SQNUM; WLARRAY, ERASEQ, APEBS; ERR); if ERR = ESUCCESS then {ubi_wl_get_peb#(; PNUM, WLARRAY, ERASEQ, APEBS; ERR); if ERR = ESUCCESS then let VTBL = to-vtbl(VOLS) in {VTBL[VOLID] := N; let BUF = mkbuf(LEBSIZE), VTBL = to-vtbl(VOLS) in {VTBL[VOLID] := N; encode_vtbl#(; VTBL, BUF; ERR); if ERR = ESUCCESS then {ubi_atomic_leb_change# (VTBL_VOLID, VTBL_LNUM, PNUM, LEBSIZE, BUF, PAGESIZE ; VOLS, WLARRAY, ERASEQ, BFLIPSET, VTBLPNUM, SQNUM, APEBS ; ERR); if ERR = ESUCCESS then {VOLS[VOLID] := mkebatbl(N); VOLS[VOLID] := fill(VOLS[VOLID], unmapped)}}}}}} } |