| aubifs_rename_new_keep_parent#(IS_DIR, OLD_CHILD_INODE, FI, RO, FO; PARENT_INODE, OLD_DENT, NEW_DENT, ERR, RI, FS, LOG, CSYNCED) {if pre-rename-new-keep-parent(PARENT_INODE, OLD_DENT, OLD_CHILD_INODE, NEW_DENT, FS, RI, RO) ∧ (IS_DIR ↔ OLD_CHILD_INODE.directory) then choose KEY1, KEY2, KEY3, ND1, ND2, ND3, ADR1, ADR2, ADR3 with true in {KEY1 := dentrykey(PARENT_INODE.ino, OLD_DENT.name); ND1 := dentrynode(KEY1, 0); KEY2 := dentrykey(PARENT_INODE.ino, NEW_DENT.name); ND2 := dentrynode(KEY2, OLD_DENT.ino); KEY3 := inodekey(PARENT_INODE.ino); ND3 := inodenode(KEY3, PARENT_INODE.meta, PARENT_INODE.directory, PARENT_INODE.nlink, PARENT_INODE.nsubdirs, PARENT_INODE.size); aubifs_core_journal_add3#(ND1, ND2, ND3, RI, FI, RO, FO; ADR1, ADR2, ADR3, FS, LOG; CSYNCED, ERR); if ERR = ESUCCESS then {aubifs_core_index_remove#(KEY1, FI, RO, FO, FS, LOG, CSYNCED; RI); aubifs_core_index_store#(KEY2, ADR2, FI, RO, FO, FS, LOG, CSYNCED; RI); aubifs_core_index_store#(KEY3, ADR3, FI, RO, FO, FS, LOG, CSYNCED; RI); NEW_DENT := mkdentry(NEW_DENT.name, OLD_DENT.ino); OLD_DENT := negdentry(OLD_DENT.name); PARENT_INODE := mkinode(PARENT_INODE.ino, ND3.meta, ND3.directory, ND3.nlink, ND3.nsubdirs, ND3.size)}} else abort } |