| dirs0 = dirs \ orphans(dirs, files), files0 = files \ orphans(dirs, files), inode.ino ≠ ROOT_INO, afs-cons(dirs, files), inode.ino ∈ dirs ∧ inode.nlink = dirs[inode.ino].nlink ∧ inode.size = dirs[inode.ino].size ∧ inode.nsubdirs = dirs[inode.ino].nsubdirs ∧ inode.directory ∨ inode.ino ∈ files ∧ inode.nlink = files[inode.ino].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory ⊦ ⟨afs_evict#(inode, true; err, dirs, files)⟩ (dirs0 = dirs \ orphans(dirs, files) ∧ files0 = files \ orphans(dirs, files)) |
asynced ↔ true, dirs0 = dirs \ orphans(dirs, files), files0 = files \ orphans(dirs, files), afs-cons(dirs, files), inode.ino ∈ dirs ∧ inode.nlink = dirs[inode.ino].nlink ∧ inode.size = dirs[inode.ino].size ∧ inode.nsubdirs = dirs[inode.ino].nsubdirs ∧ inode.directory ∨ inode.ino ∈ files ∧ inode.nlink = files[inode.ino].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory ⊦ ⟨if pre-evict(inode, dirs, files) then {err := ESUCCESS; let ino = inode.ino in if ino ∈ dirs then if dirs[ino].nlink = 0 then dirs := dirs -- ino else if files[ino].nlink = 0 then files := files -- ino} else abort⟩ (dirs0 = dirs \ orphans(dirs, files) ∧ files0 = files \ orphans(dirs, files)), inode.ino = ROOT_INO
Used simplifier rules: evict: ⊦ ;