Структуры для VFS — это самая "любимая" вещь, и в этой подсистеме существуют не только рассмотренные структуры, но и еще некоторые. Каждая зарегистрированная файловая система представлена структурой file_system_type
. Объекты этого типа описывают файловую систему и ее свойства. Более того, каждая точка монтирования представлена в виде структуры vfsmount
. Эта структура содержит информацию о точке монтирования, такую как ее положение и флаги, с которыми выполнена операция монтирования.
И наконец, каждый процесс имеет три структуры, которые описывают файловую систему и файлы, связанные с процессом. Это структуры file_struct
, fs_struct
и namespace
.
Далее в этой главе будут рассматриваться эти объекты и их роль в функционировании уровня VFS.
Объект superblock
Объект
Объект struct super_block
, которая определена в файле
. Она выглядит следующим образом (комментарии описывают назначение каждого поля).
struct super_block {
struct list_head s_list; /* список всех суперблоков */
dev_t s_dev; /* идентификатор */
unsigned long s_blocksize; /* размер блока в байтах */
unsigned long s_old_blocksize; /* старый размер блока
в байтах */
unsigned char s_blocksize_bits; /* размер блока в битах */
unsigned char s_dirt; /* флаг того,
что суперблок изменен */
unsigned long long s_maxbytes; /* максимальный размер файла */
struct file_system_type *s_type; /* тип файловой системы */
struct super_operations *s_op; /* операции суперблока */
struct dquot_operations *dq_op; /* операции с квотами */
struct quotactl_ops *s_qcop; /* операции управления квотами */
struct export_operations *s_export_op; /* операции экспортирования */
unsigned long s_flags; /* флаги монтирования */
unsigned long s_magic; /* магический номер файловой системы */
struct dentry *s_root; /* каталог, точка монтирования */
struct rw_semaphore s_umount; /* семафор размонтирования */
struct semaphore s_lock; /* семафор суперблока */
int s_count; /* счетчик ссылок на суперблок */
int s_syncing; /* флаг синхронизации
файловой системы */
int s_need_sync_fs; /* флаг того, что файловая
система еще не синхронизирована */
atomic_t s_active; /* счетчик активных ссылок */
void *s_security; /* модуль безопасности */
struct list_head s_dirty; /* список измененных индексов */