| pcache[datakey(m, n)] = mkpentry(true, buf0), buf = pcache[datakey(m, n)].page, err = ESUCCESS, err0 = ESUCCESS, files = files1[inode.ino, files1[inode.ino].content:= files1[inode.ino].content[pageno, buf]], inode = mkinode(m, md, boolvar, m0, m1, m2), pageno = n, n * VFS_PAGE_SIZE < m2, pre-writepage(inode, pageno, buf, dirs, files1), datakey(m, n) ∈ pcache, ∀ ino. ino ≠ m ∧ ino ∈ files0 → mkfile(files1[ino].size, files1[ino].meta, files1[ino].nlink, files1[ino].content ⊕ mkcontent(ino, pcache)) = mkfile(files0[ino].size, files0[ino].meta, files0[ino].nlink, files0[ino].content ⊕ mkcontent(ino, pcache0)) ∧ ino ∈ files1 ⊦ [afs_check_commit#(dirs, files; err; asynced1); if err = ESUCCESS then {asynced := false; pcache_set_status#(m, n, asynced; err, pcache)}; n := n + 1] ∀ ino. ino ≠ m ∧ ino ∈ files0 → mkfile(files[ino].size, files[ino].meta, files[ino].nlink, files[ino].content ⊕ mkcontent(ino, pcache)) = mkfile(files0[ino].size, files0[ino].meta, files0[ino].nlink, files0[ino].content ⊕ mkcontent(ino, pcache0)) ∧ ino ∈ files |
# buf0 = VFS_PAGE_SIZE, pcache[datakey(m, n)] = mkpentry(true, buf0), err = ESUCCESS, n * VFS_PAGE_SIZE < m2, m ∈ files1, datakey(m, n) ∈ pcache, ∀ ino. ino ≠ m ∧ ino ∈ files0 → mkfile(files1[ino].size, files1[ino].meta, files1[ino].nlink, files1[ino].content ⊕ mkcontent(ino, pcache)) = mkfile(files0[ino].size, files0[ino].meta, files0[ino].nlink, files0[ino].content ⊕ mkcontent(ino, pcache0)) ∧ ino ∈ files1 ⊦ [afs_check_commit#(dirs, files1[m, files1[m].content:= files1[m].content[n, pcache[datakey(m, n)].page]]; err; asynced1); buf := pcache[datakey(m, n)].page; if err = ESUCCESS then {asynced := false; pcache_set_status#(m, n, asynced; err, pcache)}; n0 := n + 1] ∀ ino. ino ≠ m ∧ ino ∈ files0 → mkfile(files1[ino].size, files1[ino].meta, files1[ino].nlink, files1[ino].content ⊕ mkcontent(ino, pcache)) = mkfile(files0[ino].size, files0[ino].meta, files0[ino].nlink, files0[ino].content ⊕ mkcontent(ino, pcache0)) ∧ ino ∈ files1
Used simplifier rules: ⊦ mkpentry(boolvar, buf).page = buf; (s)% ⊦ ino ∈ files[ino0, af] ↔ ino ∈ files; (s)% ⊦ files[ino, af][ino0] = (ino0 = ino ∧ ino ∈ files ⊃ af;files[ino0]); (s)% ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)%⊦ pre-writepage(inode, n, buf, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ # buf = VFS_PAGE_SIZE; (s)