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

时间:2014-04-15 19:12:28

标签: c linux kernel superblock

我曾经做过一些oo编程。现在我正在读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属性。它会导致循环依赖吗?非常感谢

如果是,内存管理如何工作?例如,如果删除了dentry对象,则super_block将指向无效的位置。我的意思是如何管理他们的生命周期。

1 个答案:

答案 0 :(得分:3)

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

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