| cache_write_inode#(INODE, SYNC; ERR, DIRS, FILES, ICACHE, ASYNCED) {if pre-write-inode(INODE, DIRS, FILES) then let DIRTY = true, INODE0 = ?, HIT = false in {if SYNC ∨ INODE.directory then {afs_write_inode#(INODE; ERR, DIRS, FILES; ASYNCED); DIRTY := false} else ERR := ESUCCESS; if ERR = ESUCCESS then icache_get#(INODE.ino, ICACHE; HIT, INODE0, ERR); if ERR = ESUCCESS ∧ HIT then {INODE0.meta := INODE.meta; if ¬ INODE.directory then INODE0.size := INODE.size; icache_set#(INODE0, DIRTY; ERR, ICACHE)} else if DIRTY then ERR := EFAIL} else abort } |