| ubi_read#(VOLID, LNUM, OFFSET, N0, N, VOLS, LEBSIZE, APEBS; BUF, BFLIPSET; ERR) {if VOLID ∈ VOLS ∧ LNUM < # VOLS[VOLID] ∧ OFFSET + N ≤ LEBSIZE ∧ N0 + N ≤ # BUF then let EBAENT = VOLS[VOLID][LNUM] in if EBAENT = unmapped then {BUF := fill(BUF, empty, N0, N); ERR := ESUCCESS} else let PNUM = EBAENT.pnum, BITFLIPS = ? in {aubi_io_read_data#(PNUM, OFFSET, N0, N, APEBS; BUF; BITFLIPS, ERR); if ERR = ESUCCESS ∧ BITFLIPS then BFLIPSET := BFLIPSET ++ PNUM} else abort } |