| persistence_add_gnds#(NODELIST, LOG, LEBSIZE, WROOTADR, WMAXINO, WLOG, WLPT, WORPHANS, WBUFLEB; ADRLIST, LPT, WVOL, AROFS; ERR) {if ¬ AROFS → WBUFLEB.isbuf? ∧ WBUFLEB.leb < # LPT ∧ LPT[WBUFLEB.leb].flags = LP_GROUP_NODES ∧ WBUFLEB.leb ∈ LOG ∧ WVOL[WBUFLEB.leb].mapped? ∧ (NODELIST ≠ [] ∧ LPT[WBUFLEB.leb].size + NODELIST.flashsize ≤ LEB_SIZE → LPT[WBUFLEB.leb].size = # WVOL[WBUFLEB.leb].data) then let AROFS0 = ? in {awbuf_is_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB, AROFS; ; AROFS0); if AROFS0 then ERR := EROFS else if NODELIST = [] then {ADRLIST := []; ERR := ESUCCESS} else let BUF = ?, WBUFLEB0 = ? in {awbuf_get_buf#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB, AROFS; ; WBUFLEB0); persistence_encode_group_nodes#(NODELIST, WBUFLEB0.leb, LPT[WBUFLEB0.leb].size; ; BUF, ADRLIST, ERR); if ERR = ESUCCESS then if ¬ LPT[WBUFLEB0.leb].size + # BUF ≤ LEBSIZE then {debug#("persistence: trying to write beyond LEB size"); awbuf_enter_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB; ; AROFS); ERR := ENOSPC} else {awbuf_write_buf#(# BUF, BUF, WROOTADR, WMAXINO, WLOG, WLPT, WORPHANS, WBUFLEB; WVOL, AROFS; ERR); if ERR = ESUCCESS then LPT[WBUFLEB0.leb].size := LPT[WBUFLEB0.leb].size + # BUF else {debug#("persistence: adding group node to LEB " + WBUFLEB0.leb.toString + " failed"); LPT[WBUFLEB0.leb].size := LEBSIZE}} else {debug#("persistence: could not encode group node"); awbuf_enter_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB; ; AROFS)}}} else abort } |