| replay-log(log0, fs0, fi0 ⊖ fo0) = (ri \ ro) \ datakeys(ro, ri), fo0.inodes?, ro.inodes?, file-node-cons(fs0, ri), log-cons(log0, fs0), node-closed(fs0[ri[datakey(ino, n)]], ri, fs0, ro), orphans-cons(fs0, ri, ro), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-closed(ri, fs0, ro), ri-cons(ri, fs0), ri-inj(ri), ri-inj(fi0), datakey(ino, n) ∈ ri, ri[datakey(ino, n)] ∈ fs0, ro ⊆ dom ri, fo0 ⊆ dom fi0 ⊦ dups(log0), inodekey(0) ∈ ri, inodekey(ino) ∈ ro, ( fs0[ri[datakey(ino, n)]].dentry? → inodekey(ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0) ∧ fs0[replay-log(log0, fs0, fi0 ⊖ fo0)[inodekey(ino)]].directory ∧ inodekey(fs0[ri[datakey(ino, n)]].ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0)) ∧ ( fs0[ri[datakey(ino, n)]].data? → inodekey(ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0) ∧ ¬ fs0[replay-log(log0, fs0, fi0 ⊖ fo0)[inodekey(ino)]].directory ∧ # fs0[ri[datakey(ino, n)]].data = VFS_PAGE_SIZE) |
⊦ node-closed(nd, ri, fs, ro) ↔ ( nd.dentry? → inodekey(nd.key.ino) ∈ ri ∧ ¬ inodekey(nd.key.ino) ∈ ro ∧ fs[ri[inodekey(nd.key.ino)]].directory ∧ inodekey(nd.ino) ∈ ri ∧ ¬ inodekey(nd.ino) ∈ ro) ∧ (nd.data? → inodekey(nd.key.ino) ∈ ri ∧ ¬ fs[ri[inodekey(nd.key.ino)]].directory ∧ # nd.data = VFS_PAGE_SIZE)
replay-log(log0, fs0, fi0 ⊖ fo0) = (ri \ ro) \ datakeys(ro, ri), ro.inodes?, fo0.inodes?, file-node-cons(fs0, ri), log-cons(log0, fs0), orphans-cons(fs0, ri, ro), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-closed(ri, fs0, ro), ri-cons(ri, fs0), ri-inj(fi0), ri-inj(ri), ri[datakey(ino, n)] ∈ fs0, datakey(ino, n) ∈ ri, fo0 ⊆ dom fi0, ro ⊆ dom ri, fs0[ri[datakey(ino, n)]].dentry? → inodekey(fs0[ri[datakey(ino, n)]].key.ino) ∈ ri ∧ ¬ inodekey(fs0[ri[datakey(ino, n)]].key.ino) ∈ ro ∧ fs0[ri[inodekey(fs0[ri[datakey(ino, n)]].key.ino)]].directory ∧ inodekey(fs0[ri[datakey(ino, n)]].ino) ∈ ri ∧ ¬ inodekey(fs0[ri[datakey(ino, n)]].ino) ∈ ro, fs0[ri[datakey(ino, n)]].data? → inodekey(fs0[ri[datakey(ino, n)]].key.ino) ∈ ri ∧ ¬ fs0[ri[inodekey(fs0[ri[datakey(ino, n)]].key.ino)]].directory ∧ # fs0[ri[datakey(ino, n)]].data = VFS_PAGE_SIZE ⊦ dups(log0), inodekey(ino) ∈ ro, inodekey(0) ∈ ri, ( fs0[ri[datakey(ino, n)]].dentry? → inodekey(ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0) ∧ fs0[replay-log(log0, fs0, fi0 ⊖ fo0)[inodekey(ino)]].directory ∧ inodekey(fs0[ri[datakey(ino, n)]].ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0)) ∧ ( fs0[ri[datakey(ino, n)]].data? → inodekey(ino) ∈ replay-log(log0, fs0, fi0 ⊖ fo0) ∧ ¬ fs0[replay-log(log0, fs0, fi0 ⊖ fo0)[inodekey(ino)]].directory ∧ # fs0[ri[datakey(ino, n)]].data = VFS_PAGE_SIZE)
Used terms: ro, fs0, ri, fs0[ri[datakey(ino, n)]]