| asynced0 ↔ asynced, VFS_PAGE_SIZE = n4 + (n0 + n3) % VFS_PAGE_SIZE, buf = mkbuf(VFS_PAGE_SIZE), dirs0 = dirs, err = ESUCCESS, files0 = files, inode0 = mkinode(m, md, boolvar, m0, m1, m2), n5 = (n0 + n3) / VFS_PAGE_SIZE, n0 + n3 < m2, n0 + n3 < n1, read-inv(n0, n1, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf1, n3, dirs, files), read-inv(n0, n1, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf3, n2, dirs, files) ⊦ [afs_readpage#(mkinode(m, md, boolvar, m0, m1, m2), (n0 + n3) / VFS_PAGE_SIZE, dirs, files, asynced; buf, err)] ( err = ESUCCESS ∧ buf = getpage(n5, files0[inode0.ino].content) ∨ ⌊err⌋ → [n := min(n1 - n0 + n3, n4, 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, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf1, n3, dirs, files)), m2 = n0 + n3, n1 = n0 + n3, n4 = 0 |
VFS_PAGE_SIZE = n4 + (n0 + n3) % VFS_PAGE_SIZE, buf = mkbuf(VFS_PAGE_SIZE), err = ESUCCESS, m2 ≠ n0 + n3, n1 ≠ n0 + n3, n4 ≠ 0, n0 + n3 < n1, n0 + n3 < m2, read-inv(n0, n1, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf3, n2, dirs, files), read-inv(n0, n1, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf1, n3, dirs, files) ⊦ [afs_readpage#(mkinode(m, md, boolvar, m0, m1, m2), (n0 + n3) / VFS_PAGE_SIZE, dirs, files, asynced; buf, err)] ( err = ESUCCESS ∧ buf = getpage((n0 + n3) / VFS_PAGE_SIZE, files[m].content) ∨ ⌊err⌋ → [n := min(n1 - n0 + n3, n4, 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, mkinode(m, md, boolvar, m0, m1, m2), buf2, buf1, n3, dirs, files))
Used simplifier rules: ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)