| # links(m, dirs) = files[m].nlink, VFS_PAGE_SIZE = n1 + m2 % VFS_PAGE_SIZE, of[fd] = mkfile(m, mode, m0), files1[m] = mkfile(m2, md1, files[m].nlink, content0), files[m] = mkfile(m1, md, files[m].nlink, content), m2 % VFS_PAGE_SIZE ≠ 0, ino ≠ 0, n ≠ 0, m2 < m0 + ino, afs-cons (dirs, files1[m, mkfile(m2, md1, files[m].nlink, content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n1)] upto m2)]), afs-cons(dirs, files1), of-cons(of, dirs, files1), m ∈ files1, m2 / VFS_PAGE_SIZE ∈ content0, fd ∈ of, m ∈ files, n ≤ # buf0 ⊦ ⟪fail#(; ; err); asynced := ?; if err ≠ ESUCCESS then ino := (m0 ≤ m2 ⊃ m2 - m0;0), err := ESUCCESS; of[fd].pos := m0 + ino⟫ true, mode ≠ MODE_W ∧ mode ≠ MODE_RW |
# links(m, dirs) = m4, VFS_PAGE_SIZE = n1 + m2 % VFS_PAGE_SIZE, files[m] = mkfile(m1, md, m4, content), files1[m] = mkfile(m2, md1, m4, content0), of[fd] = mkfile(m, mode, m0), files[m] = mkfile(m3, md0, m4, content1), m2 < m0 + ino, afs-cons(dirs, files1), afs-cons(dirs, files1[m, mkfile(m2, md1, m4, content0[m2 / VFS_PAGE_SIZE, fill(content0[m2 / VFS_PAGE_SIZE], zero, m2 % VFS_PAGE_SIZE, n1)] upto m2)]), of-cons(of, dirs, files1), m ∈ files, fd ∈ of, m2 / VFS_PAGE_SIZE ∈ content0, m ∈ files1, n ≤ # buf0 ⊦ ⟪fail#(; ; err); asynced := ?; if err ≠ ESUCCESS then ino := (m0 ≤ m2 ⊃ m2 - m0;0), err := ESUCCESS; of[fd].pos := m0 + ino⟫ true, m2 % VFS_PAGE_SIZE = 0, ino = 0, n = 0, mode ≠ MODE_W ∧ mode ≠ MODE_RW
Used simplifier rules: ⊦ ((m = af.size ∧ md = af.meta) ∧ m0 = af.nlink) ∧ content = af.content ↔ af = mkfile(m, md, m0, content); (elim) Used terms: files[m], m3, md0, m4, content1