Search code examples
linuxfilesystemskernelext4ext3

linux kernel path walk. lookup_slow explaination


I am trying to understand the linux kernel path walk. How is the below case resolved:

For the Path,

"/ext3_dir/ext4_dir"

Lets say we have following mounted filesystems, ext4_dir is root of ext4 filesystem, mounted on ext3 directory ext3_dir.

Q1: Is it possible that at any time dentry for ext4_dir is not present on dentry cache or it will always be there after ext4 mounted on top of ext3 ?

Q2: If dcache miss case is possible then in the slow path below:

link_path_walk->walk_component->lookup_slow()

first dentry is allocated

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

and then we call

inode->i_op->lookup(inode, dentry, flags);

which calls the actual filesystem function to read the component inside the data blocks of inode of the parent directory, here ext3_dir. Since ext3_dir is in ext3 filesystem, how does the ext4 filesystem is accessed in this case to read the data of ext4_dir into dentry?

Thanks, Kapil


Solution

  • Dentry represented mount point of a filesystem is always in the cache. Also, root inode for a filesystem always exists.

    So, no filesystem's function is required to navigate to "/ext3_dir/ext4_dir": both dentry and inode are extracted with use of VFS cache.