| # buf0 = VFS_PAGE_SIZE, fs[ri[datakey(m, pageno)]] = datanode(key, buf1), orphans(fs, ri).inodes?, fo.inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-closed(ri, fs, orphans(fs, ri)), ri-cons(ri, fs), ri-inj(ri), ri-inj(fi), inodekey(m) ∈ ri, datakey(m, pageno) ∈ ri, ri[datakey(m, pageno)] ∈ fs, orphans(fs, ri) ⊆ dom ri, fo ⊆ dom fi, asynced → boolvar2 ⊦ copy(buf1, 0, buf0, 0, VFS_PAGE_SIZE) = buf1, fs[ri[inodekey(m)]].directory, dups(log), inodekey(0) ∈ ri |
⊦ ri-closed(ri, fs, ro) ↔ (∀ key. key ∈ ri → ri[key] ∈ fs ∧ node-closed(fs[ri[key]], ri, fs, ro))
# buf0 = VFS_PAGE_SIZE, fs[ri[datakey(m, pageno)]] = datanode(key, buf1), fo.inodes?, orphans(fs, ri).inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-cons(ri, fs), ri-inj(fi), ri-inj(ri), ri[datakey(m, pageno)] ∈ fs, datakey(m, pageno) ∈ ri, inodekey(m) ∈ ri, fo ⊆ dom fi, orphans(fs, ri) ⊆ dom ri, asynced → boolvar2, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ node-closed(fs[ri[key]], ri, fs, orphans(fs, ri)) ⊦ copy(buf1, 0, buf0, 0, VFS_PAGE_SIZE) = buf1, fs[ri[inodekey(m)]].directory, dups(log), inodekey(0) ∈ ri
Used terms: orphans(fs, ri), fs, ri