| files1[m0] = mkfile(m4, md, # links(m0, dirs0), content2), files0[m] = mkfile(m3, md2, # links(m, dirs1), content1), files2[m] = mkfile(m1, md1, # links(m, dirs1), content0), afs-cons(dirs0, files1), afs-cons(dirs1, files0), afs-cons(dirs1, files2), dcache-cons(dcache, dirs0, files1), dcache-cons(dcache, dirs1, files0), dcache-cons(dcache, dirs1, files2), icache-cons(icache0, dirs0, files1), icache-cons(icache, dirs1, files0), icache-cons(icache, dirs1, files2), pcache-cons(pcache0, dirs0, files1), pcache-cons(pcache0, dirs1, files0), pcache-cons(pcache, dirs1, files2), synced(dirs0, icache0, pcache0), synced(dirs1, icache, pcache0), synced(dirs1, icache, pcache), m0 ∈ files1, m ∈ files2, m ∈ files0 ⊦ ∃ err0. ⌊err0⌋ ∨ err0 = ESUCCESS |
⊦ icache-cons(icache, dirs, files) ↔ (∀ ino. ino ∈ icache → icache[ino].inode.ino = ino ∧ (icache[ino].dirty ⊃ valid-file-inode(icache[ino].inode, dirs, files) ;valid-ino(ino, dirs, files) ∧ valid-inode(icache[ino].inode, dirs, files) ))
files2[m] = mkfile(m1, md1, # links(m, dirs1), content0), files0[m] = mkfile(m3, md2, # links(m, dirs1), content1), files1[m0] = mkfile(m4, md, # links(m0, dirs0), content2), afs-cons(dirs1, files2), afs-cons(dirs1, files0), afs-cons(dirs0, files1), dcache-cons(dcache, dirs1, files2), dcache-cons(dcache, dirs1, files0), dcache-cons(dcache, dirs0, files1), icache-cons(icache, dirs1, files2), icache-cons(icache, dirs1, files0), pcache-cons(pcache, dirs1, files2), pcache-cons(pcache0, dirs1, files0), pcache-cons(pcache0, dirs0, files1), synced(dirs1, icache, pcache), synced(dirs1, icache, pcache0), synced(dirs0, icache0, pcache0), m ∈ files0, m ∈ files2, m0 ∈ files1, ∀ ino. ino ∈ icache0 → icache0[ino].inode.ino = ino ∧ (icache0[ino].dirty ⊃ valid-file-inode(icache0[ino].inode, dirs0, files1) ;valid-ino(ino, dirs0, files1) ∧ valid-inode(icache0[ino].inode, dirs0, files1) ) ⊦ ∃ err0. ⌊err0⌋ ∨ err0 = ESUCCESS
Used terms: icache0, dirs0, files1