| persistence_io_recover#(; INDEXADR0, MAXINO0, ORPHANS, LOG, LPT, SB, LOGOFF, PAGESIZE, LEBSIZE, AVOL; ERR) {ebm_avol_recover#(; AVOL; ERR); if ERR ≠ ESUCCESS then debug#("persistence-io: ubi recover failed") else let VOLSIZE = ? in {ebm_avol_get_leb_size#(AVOL; ; LEBSIZE); ebm_avol_get_page_size#(AVOL; ; PAGESIZE); ebm_avol_get_volume_size#(AVOL; ; VOLSIZE); persistence_io_read_superblock#(PAGESIZE, LEBSIZE, AVOL; SB; ERR); if ERR ≠ ESUCCESS then debug#("persistence-io: reading superblock failed"); if ERR = ESUCCESS then {persistence_io_read_log#(SB, PAGESIZE, LEBSIZE, AVOL; LOGOFF; LOG, ERR); if ERR ≠ ESUCCESS then debug#("persistence-io: reading log failed")}; if ERR = ESUCCESS then {persistence_io_read_orphans#(SB, AVOL; ORPHANS; ERR); if ERR ≠ ESUCCESS then debug#("persistence-io: reading orphans failed")}; if ERR = ESUCCESS then {VOLSIZE := VOLSIZE - SB.main; let BUF = ? in {persistence_io_read_lebs#(SB.lpt, lptlebs(VOLSIZE, LEBSIZE), LEBSIZE, AVOL; ; BUF, ERR); if ERR = ESUCCESS then {LPT := mklparray(VOLSIZE); LPT := fill(LPT, mklp(0, 0, LP_FREE, 0)); persistence_io_decode_lpt#(BUF; LPT, ERR)}; if ERR ≠ ESUCCESS then debug#("persistence-io: reading LPT failed")}}; if ERR = ESUCCESS then {LOGOFF := LEBSIZE; INDEXADR0 := SB.indexaddr; MAXINO0 := SB.maxino}} } |