| 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), pre-mkdir(p_inode, dent, md, dirs, files), pw(user, md1), px(user, md1), px-parent(user, q, ROOT_INO, dirs, files), ino0 ∈ dirs, links(ino0, dirs) ≠ ∅ ∨ ino0 = ROOT_INO ⊦ [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); asynced := ?] (afs-cons(dirs, files) → of-cons(of, dirs, files)), str ∈ entries0 |
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), pre-mkdir(p_inode, dent, md, dirs, files), pw(user, md1), px(user, md1), px-parent(user, q, ROOT_INO, dirs, files), ino0 ∈ dirs, links(ino0, dirs) ≠ ∅ ∨ ino0 = ROOT_INO ⊦ [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); asynced := ?] (afs-cons(dirs, files) → of-cons(of, dirs, files)), ino = 0, str ∈ entries0, ino ∈ files, ino ∈ dirs