| err = ESUCCESS, ino = ino0, afs-cons(dirs, files), ispath(p, ROOT_INO, ino0, dirs, files), of-cons(of, dirs, files), px-parent(user, p, ROOT_INO, dirs, files) ⊦ ⟪if pre-iget(ino, dirs, files) then {{inode := getinode(ino, dirs, files); err := ESUCCESS} or fail#(; ; err)} else abort; if err = ESUCCESS then if pw(user, inode.meta) then {inode.meta := md; afs_check_commit#(dirs, files; err; asynced); if err = ESUCCESS then afs_write_inode#(inode; err, dirs, files; asynced)} else err := EACCESS⟫ (of-cons(of, dirs, files) ∧ afs-cons(dirs, files)) |
err = ESUCCESS, ino = ino0, afs-cons(dirs, files), ispath(p, ROOT_INO, ino0, dirs, files), of-cons(of, dirs, files), pre-iget(ino, dirs, files), px-parent(user, p, ROOT_INO, dirs, files) ⊦ ⟪{inode := getinode(ino, dirs, files); err := ESUCCESS} or fail#(; ; err); if err = ESUCCESS then if pw(user, inode.meta) then {inode.meta := md; afs_check_commit#(dirs, files; err; asynced); if err = ESUCCESS then afs_write_inode#(inode; err, dirs, files; asynced)} else err := EACCESS⟫ (of-cons(of, dirs, files) ∧ afs-cons(dirs, files))
err = ESUCCESS, ino = ino0, afs-cons(dirs, files), ispath(p, ROOT_INO, ino0, dirs, files), of-cons(of, dirs, files), px-parent(user, p, ROOT_INO, dirs, files) ⊦ ⟪abort; if err = ESUCCESS then if pw(user, inode.meta) then {inode.meta := md; afs_check_commit#(dirs, files; err; asynced); if err = ESUCCESS then afs_write_inode#(inode; err, dirs, files; asynced)} else err := EACCESS⟫ (of-cons(of, dirs, files) ∧ afs-cons(dirs, files)), pre-iget(ino, dirs, files)