| cache_files[m].nlink = ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m].nlink, ¬ cache_sync, err = ESUCCESS, 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), synced(cache_dirs, cache_icache, cache_pcache), m ∈ cache_files ⊦ ⟪icache_get#(m, cache_icache; cache_sync, inode, err); afs_files := (cache_files ⊕ cache_pcache) ⊕ cache_icache; boolvar := false; if err = ESUCCESS ∧ cache_sync then {inode.meta := md; if ¬ boolvar then inode.size := m2; icache_set#(inode, true; err, cache_icache)} else if true then err := EFAIL⟫ ⟨cache_dirs0 := cache_dirs; afs_write_inode#(mkinode(m, md, boolvar, cache_files[m].nlink, 0, m2); err0, cache_dirs, afs_files; afs_asynced)⟩ (cache_dirs = cache_dirs0 ∧ afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (afs_asynced ↔ asynced1) ∧ err = err0) |
cache_files[m].nlink = ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m].nlink, asynced ↔ cache_sync, ¬ cache_sync, err = ESUCCESS, icache = cache_icache, ino = m, 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), synced(cache_dirs, cache_icache, cache_pcache), m ∈ cache_files ⊦ ⟪if ino ∈ icache then {inode := icache[ino].inode; asynced := true} else asynced := false; err := ESUCCESS; afs_files := (cache_files ⊕ cache_pcache) ⊕ cache_icache; boolvar := false; if err = ESUCCESS ∧ asynced then {inode.meta := md; if ¬ boolvar then inode.size := m2; icache_set#(inode, true; err, cache_icache)} else if true then err := EFAIL⟫ ⟨cache_dirs0 := cache_dirs; afs_write_inode#(mkinode(m, md, boolvar, cache_files[m].nlink, 0, m2); err0, cache_dirs, afs_files; afs_asynced)⟩ (cache_dirs = cache_dirs0 ∧ afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (afs_asynced ↔ asynced1) ∧ err = err0)
Used simplifier rules: icache_get#(INO, ICACHE; HIT, INODE, ERR) {if INO ∈ ICACHE then {INODE := ICACHE[INO].inode; HIT := true} else HIT := false; ERR := ESUCCESS };