Hello list, I'm insteresting in how hard link and denry lookup work and their implementation. I know that this interface tries to connect an inode to a dentry, but why does it need to check whether the inode alias IS_ROOT if the inode represents a directory? And the code process in different way according to check result. What occasions are they used for? struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) { if (S_ISDIR(inode->i_mode)) { struct dentry *new = __d_find_any_alias(inode); if (unlikely(new)) { if (unlikely(d_ancestor(new, dentry))) { /*the code here is to forbidden ancestor hard link*/ } else if (!IS_ROOT(new)) { __d_unalias(inode, dentry, new); } else { __d_move(new, dentry, false); } } } } Thanks in advance. Regards, Larry