| buf = mkbuf(VFS_PAGE_SIZE), err = ESUCCESS, VFS_PAGE_SIZE - (n0 + n3) % VFS_PAGE_SIZE ≠ 0, inode.size ≠ n0 + n3, n1 ≠ n0 + n3, n0 + n3 < inode.size, n0 + n3 < n1, read-inv(n0, n1, inode, buf2, buf1, n3, dirs, files), read-inv(n0, n1, inode, buf2, buf3, n2, dirs, files) ⊦ [afs_readpage#(inode, (n0 + n3) / VFS_PAGE_SIZE, dirs, files, asynced; buf, err); n := min(n1 - n0 + n3, VFS_PAGE_SIZE - (n0 + n3) % VFS_PAGE_SIZE, inode.size - n0 + n3); if err = ESUCCESS then {buf1 := copy(buf, (n0 + n3) % VFS_PAGE_SIZE, buf1, n3, n); n3 := n3 + n}] read-inv(n0, n1, inode, buf2, buf1, n3, dirs, files) |
buf = mkbuf(VFS_PAGE_SIZE), err = ESUCCESS, inode = mkinode(m, md, boolvar, m0, m1, m2), n0 + n3 < n1, n0 + n3 < m2, read-inv(n0, n1, inode, buf2, buf3, n2, dirs, files), read-inv(n0, n1, inode, buf2, buf1, n3, dirs, files) ⊦ [afs_readpage#(inode, (n0 + n3) / VFS_PAGE_SIZE, dirs, files, asynced; buf, err); n := min(n1 - n0 + n3, VFS_PAGE_SIZE - (n0 + n3) % VFS_PAGE_SIZE, m2 - n0 + n3); if err = ESUCCESS then {buf1 := copy(buf, (n0 + n3) % VFS_PAGE_SIZE, buf1, n3, n); n3 := n3 + n}] read-inv(n0, n1, inode, buf2, buf1, n3, dirs, files), VFS_PAGE_SIZE - (n0 + n3) % VFS_PAGE_SIZE = 0, m2 = n0 + n3, n1 = n0 + n3
Used simplifier rules: ⊦ ( ( ( (m = inode.ino ∧ md = inode.meta) ∧ (boolvar ↔ inode.directory)) ∧ m0 = inode.nlink) ∧ m1 = inode.nsubdirs) ∧ m2 = inode.size ↔ inode = mkinode(m, md, boolvar, m0, m1, m2); (elim) Used terms: inode, m, md, boolvar, m0, m1