| 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), afs-cons(dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]), afs-cons(dirs, files), pcache-cons(pcache, dirs, files), synced(dirs, icache, pcache), m ∈ files, m ∈ icache, m1 ∈ files ⊦ pcache-cons(pcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) |
⊦ pcache-cons(pcache, dirs, files) ↔ (∀ key. key ∈ pcache → key.data? ∧ # pcache[key].page = VFS_PAGE_SIZE ∧ valid-file-ino(key.ino, dirs, files) ∧ (¬ pcache[key].dirty → key.part ∈ files[key.ino].content ∧ pcache[key].page = files[key.ino].content[key.part]))
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)), afs-cons(dirs, files), afs-cons(dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]), pcache-cons(pcache, dirs, files), synced(dirs, icache, pcache), m1 ∈ files, m ∈ icache, m ∈ files ⊦ ∀ key. key ∈ pcache → key.data? ∧ # pcache[key].page = VFS_PAGE_SIZE ∧ valid-file-ino(key.ino, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]) ∧ ( ¬ pcache[key].dirty → key.part ∈ files[m1, mkfile(m4, md, # links(m1, dirs), content0)][key.ino].content ∧ pcache[key].page = files[m1, mkfile(m4, md, # links(m1, dirs), content0)][key.ino].content[key.part])
Used terms: pcache, dirs, files[m1, mkfile(m4, md, # links(m1, dirs), content0)]