| # buf = VFS_PAGE_SIZE, ro.inodes?, fo.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, ro, fi, fo, log), inodekey(m) ∈ ri, ¬ fs[ri[inodekey(m)]].directory ⊦ ⟪aubifs_core_journal_add1#(datanode(datakey(m, pageno), buf), ri, fi, ro, fo; adr, fs, log; boolvar0, err); if err = ESUCCESS then aubifs_core_index_store#(datakey(m, pageno), adr, fi, ro, fo, fs, log, boolvar0; ri)⟫ (ubifs-cons(fs, ri, ro, fi, fo, log) ∧ replay-cons-strong(fs, ri, ro, fi, fo, log) ∧ file-node-cons(fs, ri) ∧ orphans-cons(fs, ri, ro)) |
# buf = VFS_PAGE_SIZE, nd = datanode(datakey(m, pageno), buf), fo.inodes?, ro.inodes?, file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, ro), replay-cons-strong(fs, ri, ro, fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, ro, fi, fo, log), inodekey(m) ∈ ri ⊦ ⟪if ri-cons(ri, fs) ∧ node-cons(nd.key, nd) then { choose adr1 with new(adr1 ', fs) ∧ ¬ dups(adr1 ') in {adr := adr1; fs[adr] := nd, log := log + adr, err := ESUCCESS} ifnone err := ENOSPC or {fail#(; ; err); adr := ?}; boolvar := ?} else abort; if err = ESUCCESS then aubifs_core_index_store#(datakey(m, pageno), adr, fi, ro, fo, fs, log, boolvar; ri)⟫ (ubifs-cons(fs, ri, ro, fi, fo, log) ∧ replay-cons-strong(fs, ri, ro, fi, fo, log) ∧ file-node-cons(fs, ri) ∧ orphans-cons(fs, ri, ro)), fs[ri[inodekey(m)]].directory
Used simplifier rules: aubifs_core_journal_add1# (ND1, RI, FI, RO, FO; ADR1, FS, LOG; CSYNCED, ERR) {if ri-cons(RI, FS) ∧ node-cons(ND1.key, ND1) then { choose adr1 with new(adr1 ', FS) ∧ ¬ dups(adr1 ') in {ADR1 := adr1; FS[ADR1] := ND1, LOG := LOG + ADR1, ERR := ESUCCESS} ifnone ERR := ENOSPC or {fail#(; ; ERR); ADR1 := ?}; CSYNCED := ?} else abort };