2017-09-14 1 views
0

저는 리눅스 커널 경로를 이해하려고합니다. 아래의 경우 해결 방법 :리눅스 커널 경로 산책. lookup_slow explain

경로를

"/ ext3_dir/ext4_dir"

우리가 마운트 된 파일 시스템에 따라 ext4_dir는 ext4를 파일 시스템의 루트 한 말을하자, EXT3 디렉토리 ext3_dir에 장착.

1 : 언제든지 ext4_dir에 대한 dentry가 dentry 캐시에 없거나 ext3을 ext3에 마운트 한 후에 항상 존재할 수 있습니까?

Q2 :

첫 dentry가

dentry = d_alloc_parallel(dir, name, &wq);

을 할당하고 우리가

inode->i_op->lookup(inode, dentry, flags);를 호출한다

link_path_walk->walk_component->lookup_slow()

:되는 dcache 미스 케이스는 아래의 느린 경로에 다음 가능한 경우

실제 파일 시스템 함수를 호출하여 부모 디렉토리의 inode 데이터 블록 안의 구성 요소 (여기서는 ext3_dir)를 읽습니다. ext3_dir이 ext3 파일 시스템에 있기 때문에 ext4_dir의 데이터를 dentry로 읽으려면 ext4 파일 시스템에 어떻게 액세스합니까?

덕분에, 카필

답변

1

Dentry은 파일 시스템의 마운트 지점이 캐시에서 항상 입니다 표현. 또한, 파일 시스템의 루트 아이 노드 은 항상으로 존재합니다.

따라서 "/ ext3_dir/ext4_dir"을 탐색하는 데 파일 시스템의 기능이 필요하지 않습니다. 덴 트리와 inode는 모두 VFS 캐시를 사용하여 추출됩니다.

+0

감사합니다. Tsyvarev. 당신은 또한 그것이 의무적 인 방법을 알고 있습니까, 나는 어떻게 우리가 dcache에 뿌리 dentry를 고정시키는지를 말합니다. – Kapil

+0

잘 모르겠지만, dentry에는 참조 카운터 필드'd_lockref'가 있습니다. 따라서이 카운터를 증가 시키면 VFS가 dentry가 캐시를 벗어나는 것을 방지합니다. 어쨌든, 루트 덴 트리를 고정하는 것은 VFS를위한 작업이며 파일 시스템 드라이버는이 작업에 관여하지 않습니다. – Tsyvarev