| root.dir?, dom of < ino, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), of-cons(of, dirs, files), psynced → asynced, path = ε ∨ path' = ε ⊦ pre-link(path, path', EISDIR, user, root, abs-files(files), abs-of(of)) ∧ ⟨err0 := EISDIR; if err0 = ESUCCESS then let fid = root[path].fid in root[path'] := fnode(fid); psynced := ?⟩ (abs(root, ROOT_INO)(dirs) ∧ (psynced → asynced) ∧ EISDIR = err0) |
root.dir?, dom of < ino, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), of-cons(of, dirs, files), psynced → asynced, path = ε ∨ path' = ε ⊦ (root[path].dir? ∨ root[path'].dir?) ∧ ⟨err0 := EISDIR; if err0 = ESUCCESS then let fid = root[path].fid in root[path'] := fnode(fid); psynced := ?⟩ (abs(root, ROOT_INO)(dirs) ∧ (psynced → asynced) ∧ EISDIR = err0)
Used simplifier rules: ⊦ pre-link(p, p', EISDIR, user, root, fs, ofh) ↔ root[p].dir? ∨ root[p'].dir?; (s)