linux kernel sourse tree의 깃허브 코드를 참조해 Ext4의 주요 구조체를 정리한 글입니다.

Ext4 주요 구조체 정리
Superblock, inode, dentry, Block Group, extent, orphan, Journal

📌 Ext4 inode

🫧 dentry

: 디렉터리 내부 항목을 나타내는 객체

  • 디렉터리 안 파일 또는 하위 디렉터리에 대한 정보를 담고 있다
  • 이름 기반 파일 접근을 빠르게 하기 위한 캐시 구조
  • 항목(파일, 디렉터리 등) 과 inode를 연결하는 역할
  • 실제 디스크에 존재하지 않는 VFS 레벨의 메모리 객체
  • dentry cache(dcache)로 작동하여 디스크 접근을 줄이고자 함

즉, ext4가 dentry를 직접 관리하는 것이 아닌, ext4_lookup()과 같은 함수에서 돌면서 VFS가 dentry를 사용할 수 있도록 연산을 제공한다.

🫧 코드

struct dentry {
	// dentry 상태 여부
	unsigned int d_flags;
	
	// 해시 테이블 내 연결 리스트 노드
	struct hlist_bl_node d_hash;
	
	// dentry 부모 포인터
	struct dentry *d_parent;
	
	// 파일명 or 디렉터리명
	struct qstr d_name;
	
	// 디렉터리가 참조하는 inode
	struct inode *d_inode;
					 
	// 짧은 이름을 위한 내부 버퍼
	// 보통 32바이트 이내인 경우 d_name.name이 d_iname[]을
		// 가리키도록 함. 긴 경우는 kmalloc으로 할당
	unsigned char d_iname[DNAME_INLINE_LEN];
	
	// dentry가 속한 파일 시스템의 super_block
	struct super_block *d_sb;
	
	// 시간
	unsigned long d_time;
	
	// 부모 디렉터리의 자식 목록 내 위치
	struct hlist_node d_sib;
	
	// 현재 dentry의 자식 목록 (트리 구조)
	struct hlist_head d_children;
};

카테고리:

업데이트: