| # buf = VFS_PAGE_SIZE, files[m] = mkfile(m0, md, # links(m, dirs), content), pcache[datakey(m, m4)] = mkpentry(false, content[m4]), afs-cons(dirs, files[m, mkfile(m0, md, # links(m, dirs), content[pageno, buf])]), afs-cons(dirs, files), synced(files, icache, pcache), synced(dirs, icache, pcache), datakey(m, m4) ∈ pcache, m ∈ files, m4 ∈ content, m4 ∈ content[pageno, buf], ∀ key0. key0 ∈ pcache → key0.data? ∧ # pcache[key0].page = VFS_PAGE_SIZE ∧ key0.ino ∈ files ∧ (¬ pcache[key0].dirty → key0.part ∈ files[key0.ino].content ∧ pcache[key0].page = files[key0.ino].content[key0.part]) ⊦ content[m4] = content[pageno, buf][m4], datakey(m, m4) = datakey(m, pageno) |
# buf = VFS_PAGE_SIZE, pcache[datakey(m, m4)] = mkpentry(false, content[m4]), files[m] = mkfile(m0, md, # links(m, dirs), content), afs-cons(dirs, files), afs-cons(dirs, files[m, mkfile(m0, md, # links(m, dirs), content[pageno, buf])]), synced(dirs, icache, pcache), synced(files, icache, pcache), m4 ∈ content[pageno, buf], m4 ∈ content, m ∈ files, datakey(m, m4) ∈ pcache, ∀ key0. key0 ∈ pcache → key0.data? ∧ # pcache[key0].page = VFS_PAGE_SIZE ∧ key0.ino ∈ files ∧ (¬ pcache[key0].dirty → key0.part ∈ files[key0.ino].content ∧ pcache[key0].page = files[key0.ino].content[key0.part]) ⊦ content[m4] = content[pageno, buf][m4], datakey(m, m4) = datakey(m, pageno), m4 = pageno
Used formulas: m4 = pageno