• struct inode* alloc_inode(struct super_block *sb)
— эта функция создает и инициализирует новый объект файлового индекса, связанного с данным суперблоком.
• void destroy_inode(struct inode *inode)
— эта функция уничтожает данный объект индекса файла.
• void read_inode(struct inode *inode)
— эта функция считывает с диска файловый индекс с номером inode->i_ino
и заполняет все остальные поля структуры данных индекса.
• void dirty_inode(struct inode *inode)
— эта функция вызывается подсистемой VFS, когда в индекс вносятся изменения (dirty). Журналируемые файловые системы (как, например, ext3) используют эту функцию для обновления журнала.
• void write_inode(struct inode inode*, int wait)
— эта функция записывает указанный индекс на диск. Параметр wait
указывает, должна ли данная операция выполняться синхронно.
• void put_inode(struct inode *inode)
— эта функция освобождает указанный индекс.
• void drop_inode(struct inode *inode)
— эта функция вызывается подсистемой VFS, когда исчезает последняя ссылка на индекс. Обычные файловые системы Unix никогда не определяют эту функцию, в таком случае подсистема VFS просто удаляет индекс. Вызывающий код должен удерживать блокировку inode_lock
.
• void delete_inode(struct inode *inode)
— эта функция удаляет индекс файла с диска.
• void put_super(struct super_block *sb)
— эта функция вызывается подсистемой VFS при размонтировании файловой системы, чтобы освободить указанный суперблок.
• void write_super(struct super_block *sb)
— эта функция обновляет суперблок на диске данными из указанного суперблока. Подсистема VFS вызывает эту функцию для синхронизации измененного суперблока в памяти с данными суперблока на диске.
• int sync_fs(struct super_block *sb, int wait)
— эта функция синхронизирует метаданные файловой системы с данными на диске. Параметр wait
указывает, должна ли операция быть синхронной или асинхронной.
• void write_super_lockfs(struct super_block *sb)
— эта функция предотвращает изменения файловой системы и затем обновляет данные суперблока на диске данными из указанного суперблока. Сейчас она используется диспетчером логических томов (LVM, Logical Volume Manager).
• void unlockfs(struct super_block *sb)
— эта функция разблокирует файловую систему после выполнения функции write_super_lockfs()
.
• int statfs(struct super_block *sb, struct statfs *statfs)
— эта функция вызывается подсистемой VFS для получения статистики файловой системы, Статистика указанной файловой системы записывается в структуру statfs
.
• int remount_fs(struct super_block *sb, int *flags, char *data)
— эта функция вызывается подсистемой VFS, когда файловая система монтируется с другими параметрами монтирования.
• void clear_inode(struct inode*)
— эта функция вызывается подсистемой VFS для освобождения индекса и очистки всех страниц памяти, связанных с индексом.
• void umount_begin(struct super_block *sb)
— эта функция вызывается подсистемой VFS для прерывания операции монтирования. Она используется сетевыми файловыми системами, такими как NFS.
Все рассмотренные функции вызываются подсистемой VFS в контексте процесса. Все они при необходимости могут блокироваться.
Некоторые из этих функций являются необязательными. Файловая система может установить их значения в структуре операций суперблока равными NULL
. Если соответствующий указатель равен NULL
, то подсистема VFS или вызывает общий вариант функции, или не происходит ничего, в зависимости от операции.
Объект inode
Объект inode
содержит всю информацию, которая необходима ядру для манипуляций с файлами и каталогами. В файловых системах в стиле Unix вся информация просто считывается из дисковых индексов и помещается в объект inode
подсистемы VFS. Если файловые системы не имеют индексов, то эту информацию необходимо получить из других дисковых структур[70].
Объект индекса файла представляется с помощью структуры struct inode
, которая определена в файле
. Эта структура с комментариями, описывающими назначение каждого поля, имеет следующий вид.
struct inode {
struct hlist_node i_hash; /* хешированный список */