[Imprint][Data Privacy Statement][E-Mail]

View long theorem info. View the proof. Back to main index. View the specification. View theorem base summary, View theorem base listing, the used properties by spec, the dependency list, the symbol table,

Theorem sync

persistence_sync#(LEBSIZE, WROOTADR, WMAXINO, WLOG, WLPT, WORPHANS, WBUFLEB; LPT, WVOL, AROFS; ERR) {if WBUFLEB.isbuf? ∧ ¬ AROFS → WBUFLEB.leb < # LPT ∧ LPT[WBUFLEB.leb].size ≤ LEB_SIZE ∧ WVOL[WBUFLEB.leb].mapped? ∧ LPT[WBUFLEB.leb].size = # WVOL[WBUFLEB.leb].data ∧ LPT[WBUFLEB.leb].flags ≠ LP_FREE ∧ is-aligned(LPT[WBUFLEB.leb].size, 2 * NODE_HEADER_SIZE) then {ERR := ESUCCESS; let WBUFLEB0 = ?, AROFS0 = ?, PAGESIZE = ? in {awbuf_get_buf#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB, AROFS; ; WBUFLEB0); awbuf_is_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB, AROFS; ; AROFS0); awbuf_get_page_size#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB, AROFS; ; PAGESIZE); if ¬ AROFS0 then if WBUFLEB0.isbuf? then let OFFSET = LPT[WBUFLEB0.leb].size in if ¬ is-aligned(OFFSET, PAGESIZE) then let SIZE = PAGESIZE - OFFSET % PAGESIZE in let BUF = mkbuf(SIZE) in {persistence_encode_padding_node#(; BUF; ERR); if ERR = ESUCCESS then {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 + SIZE else {debug#("persistence: flushing of LEB " + WBUFLEB0.leb.toString + " failed"); LPT[WBUFLEB0.leb].size := LEBSIZE; awbuf_enter_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB; ; AROFS)}} else {debug#("persistence: could not encode padding node"); awbuf_enter_readonly#(WROOTADR, WMAXINO, WLOG, WVOL, WLPT, WORPHANS, WBUFLEB; ; AROFS)}} else ERR := EROFS}} else abort }