저는 리눅스 커널 경로를 이해하려고합니다. 아래의 경우 해결 방법 :리눅스 커널 경로 산책. 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()
실제 파일 시스템 함수를 호출하여 부모 디렉토리의 inode 데이터 블록 안의 구성 요소 (여기서는 ext3_dir)를 읽습니다. ext3_dir이 ext3 파일 시스템에 있기 때문에 ext4_dir의 데이터를 dentry로 읽으려면 ext4 파일 시스템에 어떻게 액세스합니까?
덕분에, 카필
감사합니다. Tsyvarev. 당신은 또한 그것이 의무적 인 방법을 알고 있습니까, 나는 어떻게 우리가 dcache에 뿌리 dentry를 고정시키는지를 말합니다. – Kapil
잘 모르겠지만, dentry에는 참조 카운터 필드'd_lockref'가 있습니다. 따라서이 카운터를 증가 시키면 VFS가 dentry가 캐시를 벗어나는 것을 방지합니다. 어쨌든, 루트 덴 트리를 고정하는 것은 VFS를위한 작업이며 파일 시스템 드라이버는이 작업에 관여하지 않습니다. – Tsyvarev