| dirs[ino0] = mkdir(m, md1, # links(ino0, dirs), m1, entries0), dent = negdentry(str), err0 = ESUCCESS, inode = mkinode(ino0, md1, true, # links(ino0, dirs), m1, m), afs-cons(dirs, files), ispath(q, ROOT_INO, ino0, dirs, files), of-cons(of, dirs, files), pw(user, md1), px(user, md1), px-parent(user, q, ROOT_INO, dirs, files), ino0 ∈ dirs, ¬ str ∈ entries0, links(ino0, dirs) ≠ ∅ ∨ ino0 = ROOT_INO ⊦ [afs_mkdir#(md; inode, c_inode, dent, err0, dirs, files; asynced)] (afs-cons(dirs, files) → of-cons(of, dirs, files)) |
dirs[ino0] = mkdir(m, md1, # links(ino0, dirs), m1, entries0), dent = negdentry(str), err = err0, err0 = ESUCCESS, inode = mkinode(ino0, md1, true, # links(ino0, dirs), m1, m), p_inode = inode, afs-cons(dirs, files), ispath(q, ROOT_INO, ino0, dirs, files), of-cons(of, dirs, files), pw(user, md1), px(user, md1), px-parent(user, q, ROOT_INO, dirs, files), ino0 ∈ dirs, links(ino0, dirs) ≠ ∅ ∨ ino0 = ROOT_INO ⊦ [if pre-mkdir(p_inode, dent, md, dirs, files) then { {choose ino with ¬ ino ∈ dirs ∧ ¬ ino ∈ files ∧ ino ≠ 0 in afs_mkdir_ino#(p_inode.ino, md, ino; dent, err, dirs); afs_inode_sync#(p_inode; dirs, files); p_inode := getinode(p_inode.ino, dirs, files); c_inode := getinode(dent.ino, dirs, files)} or fail#(; ; err); asynced := ?} else abort] (afs-cons(dirs, files) → of-cons(of, dirs, files)), str ∈ entries0
Used simplifier rules: afs_mkdir#(MD; P_INODE, C_INODE, DENT, ERR, DIRS, FILES; ASYNCED) {if pre-mkdir(P_INODE, DENT, MD, DIRS, FILES) then { {choose INO with ¬ INO ∈ DIRS ∧ ¬ INO ∈ FILES ∧ INO ≠ 0 in afs_mkdir_ino#(P_INODE.ino, MD, INO; DENT, ERR, DIRS); afs_inode_sync#(P_INODE; DIRS, FILES); P_INODE := getinode(P_INODE.ino, DIRS, FILES); C_INODE := getinode(DENT.ino, DIRS, FILES)} or fail#(; ; ERR); ASYNCED := ?} else abort };