2017-09-14 6 views
0

J'essaie de comprendre le chemin du noyau Linux. Comment le ci-dessous le cas résolu:chemin du noyau Linux marche. lookup_slow explication

Pour le chemin,

"/ ext3_dir/ext4_dir"

Disons que nous avons suivant les systèmes de fichiers montés, ext4_dir est la racine du système de fichiers ext4, monté sur ext3_dir annuaire ext3. Q1: Est-il possible qu'à tout moment dentry pour ext4_dir ne soit pas présent sur le cache dentry ou il sera toujours là après ext4 monté au-dessus de ext3?

Q2: Si dcache cas de manque est alors possible dans le chemin lent ci-dessous:

link_path_walk->walk_component->lookup_slow()

premier dentry est attribué

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

et nous appelons

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

qui appelle la fonction réelle du système de fichiers pour lire le composant dans les blocs de données de l'inode du répertoire parent, ici ext3_dir. Puisque ext3_dir est dans le système de fichiers ext3, comment accéder au système de fichiers ext4 dans ce cas pour lire les données de ext4_dir dans dentry?

Merci, Kapil

Répondre

1

Dentry représenté point de montage d'un système de fichiers est toujours dans le cache. En outre, l'inode racine pour un système de fichiers existe toujours. Par conséquent, aucune fonction de système de fichiers n'est requise pour accéder à "/ ext3_dir/ext4_dir": à la fois dentry et inode sont extraits à l'aide du cache VFS.

+0

Merci Tsyvarev pour la réponse. savez-vous aussi comment est-ce mandaté, je veux dire comment épingler la racine dentry à dcache. – Kapil

+0

Je ne suis pas sûr, mais dentry a un champ de compteur de référence 'd_lockref'. Ainsi, en incrémentant ce compteur, VFS empêche Dentry de quitter le cache. Dans tous les cas, épingler root dentry est une tâche pour VFS, les pilotes de systèmes de fichiers ne sont pas impliqués dans cela. – Tsyvarev