| aubifs_mkdir#(MD, FI, RO, FO; P_INODE, C_INODE, DENT, ERR, RI, FS, LOG, CSYNCED) {if pre-mkdir(P_INODE, DENT, MD, FS, RI, RO) then choose ADR1, ADR2, ADR3, KEY1, KEY2, KEY3, ND1, ND2, ND3 with true in {KEY1 := inodekey(P_INODE.ino); KEY2 := dentrykey(P_INODE.ino, DENT.name); aubifs_core_index_newino#(RI, FI, RO, FO, FS, LOG, CSYNCED; KEY3); ND1 := inodenode(KEY1, P_INODE.meta, P_INODE.directory, P_INODE.nlink, P_INODE.nsubdirs + 1, P_INODE.size + 1); ND2 := dentrynode(KEY2, KEY3.ino); ND3 := inodenode(KEY3, MD, true, 1, 0, 0); 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_store#(KEY1, ADR1, 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); DENT := mkdentry(DENT.name, KEY3.ino); P_INODE := mkinode(P_INODE.ino, ND1.meta, ND1.directory, ND1.nlink, ND1.nsubdirs, ND1.size); C_INODE := mkinode(KEY3.ino, ND3.meta, ND3.directory, ND3.nlink, ND3.nsubdirs, ND3.size)}} else abort } |