| files[m] = mkfile(m0, md0, # links(m, dirs), content), files[m1] = mkfile(m5, md1, # links(m1, dirs), content0), dirs[m1] = mkdir(m7, md2, m8, m9, entries), icache[m] = mkientry(true, mkinode(m1, md, false, # links(m1, dirs), 0, m4)), err = ESUCCESS, afs-cons(dirs, files), afs-cons(dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]), dcache-cons(dcache, dirs, files), icache-cons(icache, dirs, files), pcache-cons(pcache, dirs, files), synced(dirs, icache, pcache), m1 ∈ files, m ∈ icache, m ∈ files ⊦ ⟪icache_set_status#(m, false; err, icache)⟫ ( icache-cons(icache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ dcache-cons(dcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ pcache-cons(pcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ synced(dirs, icache, pcache)) |
asynced ↔ false, icache[m] = mkientry(true, mkinode(m1, md, false, # links(m1, dirs), 0, m4)), dirs[m1] = mkdir(m7, md2, m8, m9, entries), files[m1] = mkfile(m5, md1, # links(m1, dirs), content0), files[m] = mkfile(m0, md0, # links(m, dirs), content), err = ESUCCESS, ino = m, afs-cons(dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]), afs-cons(dirs, files), dcache-cons(dcache, dirs, files), icache-cons(icache, dirs, files), pcache-cons(pcache, dirs, files), synced(dirs, icache, pcache), m ∈ files, m ∈ icache, m1 ∈ files ⊦ ⟪if ino ∈ icache then icache[ino].dirty := asynced else err := EFAIL⟫ ( icache-cons(icache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ dcache-cons(dcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ pcache-cons(pcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ synced(dirs, icache, pcache))
Used simplifier rules: icache_set_status#(INO, DIRTY; ERR, ICACHE) {if INO ∈ ICACHE then ICACHE[INO].dirty := DIRTY else ERR := EFAIL};