| aubifs_rename_new_reparent# (IS_DIR, OLD_CHILD_INODE, FI, RO, FO; OLD_PARENT_INODE, NEW_PARENT_INODE, OLD_DENT, NEW_DENT, ERR, RI, FS, LOG, CSYNCED) {if pre-rename-new-reparent(OLD_PARENT_INODE, OLD_DENT, OLD_CHILD_INODE, NEW_PARENT_INODE, NEW_DENT, FS, RI, RO) ∧ (IS_DIR ↔ OLD_CHILD_INODE.directory) then choose KEY1, KEY2, KEY3, KEY4, ND1, ND2, ND3, ND4, ADR1, ADR2, ADR3, ADR4 with true in {KEY1 := dentrykey(OLD_PARENT_INODE.ino, OLD_DENT.name); ND1 := dentrynode(KEY1, 0); KEY2 := dentrykey(NEW_PARENT_INODE.ino, NEW_DENT.name); ND2 := dentrynode(KEY2, OLD_DENT.ino); KEY3 := inodekey(OLD_PARENT_INODE.ino); ND3 := inodenode (KEY3, OLD_PARENT_INODE.meta, OLD_PARENT_INODE.directory, OLD_PARENT_INODE.nlink, OLD_PARENT_INODE.nsubdirs - (IS_DIR ⊃ 1;0), OLD_PARENT_INODE.size - 1); KEY4 := inodekey(NEW_PARENT_INODE.ino); ND4 := inodenode (KEY4, NEW_PARENT_INODE.meta, NEW_PARENT_INODE.directory, NEW_PARENT_INODE.nlink, NEW_PARENT_INODE.nsubdirs + (IS_DIR ⊃ 1;0), NEW_PARENT_INODE.size + 1); aubifs_core_journal_add4#(ND1, ND2, ND3, ND4, RI, FI, RO, FO; ADR1, ADR2, ADR3, ADR4, 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); aubifs_core_index_store#(KEY4, ADR4, FI, RO, FO, FS, LOG, CSYNCED; RI); NEW_DENT := mkdentry(NEW_DENT.name, OLD_DENT.ino); OLD_DENT := negdentry(OLD_DENT.name); OLD_PARENT_INODE := mkinode(OLD_PARENT_INODE.ino, ND3.meta, ND3.directory, ND3.nlink, ND3.nsubdirs, ND3.size); NEW_PARENT_INODE := mkinode(NEW_PARENT_INODE.ino, ND4.meta, ND4.directory, ND4.nlink, ND4.nsubdirs, ND4.size)}} else abort } |