Циклическая зависимость между Dentry и суперблочной структурой в ядре Linux

Раньше я занимался программированием. Теперь я читаю код ядра Linux в C. Я нашел:

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 ответ

Решение

Во-первых, существует круговая зависимость между двумя структурами, но -

Там нет проблем с этим, когда есть предварительное объявление (например, struct dentry; до определения структуры super_block и наоборот) поскольку обе структуры используют указатели на другие структуры, а размер указателей в любом случае известен. Использование полей каждой структуры потребует ее определения заранее.

Другие вопросы по тегам