MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2AddDotEntries

Function Ext2AddDotEntries

Ext4Fsd/create.c:638–684  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

636}
637
638NTSTATUS Ext2AddDotEntries(struct ext2_icb *icb, struct inode *dir,
639 struct inode *inode)
640{
641 struct ext3_dir_entry_2 * de;
642 struct buffer_head * bh;
643 struct ext4_dir_entry_tail *t;
644 ext3_lblk_t block = 0;
645 unsigned int blocksize = dir->i_sb->s_blocksize;
646 int csum_size = 0;
647 int rc = 0;
648
649 if (ext4_has_metadata_csum(dir->i_sb))
650 csum_size = sizeof(struct ext4_dir_entry_tail);
651
652 bh = ext3_append(icb, inode, &block, &rc);
653 if (!bh) {
654 goto errorout;
655 }
656
657 de = (struct ext3_dir_entry_2 *) bh->b_data;
658 de->inode = cpu_to_le32(inode->i_ino);
659 de->name_len = 1;
660 de->rec_len = cpu_to_le16(EXT3_DIR_REC_LEN(de->name_len));
661 strcpy (de->name, ".");
662 ext3_set_de_type(inode->i_sb, de, S_IFDIR);
663 de = (struct ext3_dir_entry_2 *)
664 ((char *) de + le16_to_cpu(de->rec_len));
665 de->inode = cpu_to_le32(dir->i_ino);
666 de->rec_len = cpu_to_le16(inode->i_sb->s_blocksize-EXT3_DIR_REC_LEN(1)-csum_size);
667 de->name_len = 2;
668 strcpy (de->name, "..");
669 ext3_set_de_type(inode->i_sb, de, S_IFDIR);
670 inode->i_nlink = 2;
671 if (csum_size) {
672 t = EXT4_DIRENT_TAIL(bh->b_data, blocksize);
673 initialize_dirent_tail(t, blocksize);
674 }
675 ext4_dirent_csum_set(inode, (struct ext4_dir_entry *)bh->b_data);
676 set_buffer_dirty(bh);
677 ext3_mark_inode_dirty(icb, inode);
678
679errorout:
680 if (bh)
681 __brelse (bh);
682
683 return Ext2WinntError(rc);
684}
685
686//
687// Any call to this routine must have Fcb's MainResource and FcbLock acquired.

Callers 1

Ext2CreateFileFunction · 0.85

Calls 8

ext4_has_metadata_csumFunction · 0.85
ext3_appendFunction · 0.85
ext3_set_de_typeFunction · 0.85
initialize_dirent_tailFunction · 0.85
ext4_dirent_csum_setFunction · 0.85
ext3_mark_inode_dirtyFunction · 0.85
__brelseFunction · 0.85
Ext2WinntErrorFunction · 0.85

Tested by

no test coverage detected