| asynced ↔ false, asynced0 ↔ true, asynced2 ↔ cache_sync, asynced1 ↔ cache_asynced, afs_dirs = cache_dirs, afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache, ¬ asynced2, dirs = cache_dirs, err = ESUCCESS, err1 = err0, files = cache_files, icache = cache_icache, inode0 = mkinode(m, md, boolvar, m0, m1, m2), afs-cons(cache_dirs, cache_files), afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache), dcache-cons(cache_dcache, cache_dirs, cache_files), icache-cons(cache_icache, cache_dirs, cache_files), pcache-cons(cache_pcache, cache_dirs, cache_files), pre-write-inode(inode0, dirs, files), synced(cache_dirs, cache_icache, cache_pcache), cache_sync → synced(cache_files, cache_icache, cache_pcache), m ∈ cache_dirs ∧ m0 = cache_dirs[m].nlink ∧ m2 = cache_dirs[m].size ∧ m1 = cache_dirs[m].nsubdirs ∧ boolvar ∨ m ∈ cache_files ∧ m0 = ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m].nlink ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟪if err = ESUCCESS then icache_get#(inode0.ino, icache; asynced, inode, err); if err = ESUCCESS ∧ asynced then {inode.meta := inode0.meta; if ¬ inode0.directory then inode.size := inode0.size; icache_set#(inode, asynced0; err, icache)} else if asynced0 then err := EFAIL⟫ ⟨afs_write_inode#(mkinode(m, md, boolvar, m0, m1, m2); err0, afs_dirs, afs_files; afs_asynced)⟩ (afs_dirs = dirs ∧ afs_files = (files ⊕ cache_pcache) ⊕ icache ∧ (afs_asynced ↔ asynced1) ∧ err = err0), inode0.directory |
asynced1 ↔ cache_asynced, asynced2 ↔ cache_sync, asynced0 ↔ true, asynced ↔ false, afs_dirs = cache_dirs, afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache, ¬ asynced2, dirs = cache_dirs, err = ESUCCESS, err1 = err0, files = cache_files, icache = cache_icache, inode0 = mkinode(m, md, boolvar, m0, m1, m2), afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache), afs-cons(cache_dirs, cache_files), dcache-cons(cache_dcache, cache_dirs, cache_files), icache-cons(cache_icache, cache_dirs, cache_files), pcache-cons(cache_pcache, cache_dirs, cache_files), pre-write-inode(inode0, dirs, files), synced(cache_dirs, cache_icache, cache_pcache), cache_sync → synced(cache_files, cache_icache, cache_pcache), m ∈ cache_dirs ∧ m0 = cache_dirs[m].nlink ∧ m2 = cache_dirs[m].size ∧ m1 = cache_dirs[m].nsubdirs ∧ boolvar ∨ m ∈ cache_files ∧ m0 = ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m].nlink ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟪icache_get#(inode0.ino, icache; asynced, inode, err); if err = ESUCCESS ∧ asynced then {inode.meta := inode0.meta; if ¬ inode0.directory then inode.size := inode0.size; icache_set#(inode, asynced0; err, icache)} else if asynced0 then err := EFAIL⟫ ⟨afs_write_inode#(mkinode(m, md, boolvar, m0, m1, m2); err0, afs_dirs, afs_files; afs_asynced)⟩ (afs_dirs = dirs ∧ afs_files = (files ⊕ cache_pcache) ⊕ icache ∧ (afs_asynced ↔ asynced1) ∧ err = err0), inode0.directory