Циклическая зависимость между 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
и наоборот) поскольку обе структуры используют указатели на другие структуры, а размер указателей в любом случае известен. Использование полей каждой структуры потребует ее определения заранее.