Linux内核中的Dentry和超级块结构之间的循环依赖关系

我曾经做过一些编程。 现在我正在读C中的linux内核代码。我发现:

struct super_block { ... ... unsigned long s_flags; /* mount flags */ unsigned long s_magic; /* filesystem's magic number */ struct dentry *s_root; /* directory mount point */ struct rw_semaphore s_umount; /* unmount semaphore */ ... ... } struct dentry { ... ... struct dentry_operations *d_op; /* dentry operations table */ struct super_block *d_sb; /* superblock of file */ unsigned int d_flags; /* dentry flags */ int d_mounted; /* is this a mount point? */ void *d_fsdata; /* filesystem-specific data */ ... ... }; 

我们可以看到super_block结构具有struct dentry属性,而struct dentry具有super_block属性。 它是否会导致循环依赖? 非常感谢

如果是,记忆如何pipe理工作? 例如,如果一个dentry对象被删除,super_block将指向一个无效的位置。 我的意思是如何pipe理他们的生命周期。

首先,两个结构之间存在循环依赖关系,但是 –

当前向声明(如struct dentry;在struct super_block的定义之前,反之亦然)时,没有任何问题,因为两个结构都使用指向其他结构的指针,并且无论如何都知道指针的大小。 使用每个结构的字段将需要事先定义。