Чтение онлайн

на главную

Жанры

Разработка ядра Linux
Шрифт:

• 

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
, которая определена в файле
<linux/fs.h>
. Эта структура с комментариями, описывающими назначение каждого поля, имеет следующий вид.

70

Файловые системы, которые не имеют индексов, обычно хранят необходимую информацию как часть файла. Некоторые современные файловые системы также применяют базы данных для хранения метаданных файла. В любом случае объект индекса создается тем способом, который подходит для файловой системы.

struct inode {

 struct hlist_node i_hash; /* хешированный список */

 struct list_head i_list; /* связанный список индексов */

 struct list_head i_dentry; /* связанный список объектов dentry */

 unsigned long i_ino; /* номер индекса */

 atomic_t i_count; /* счетчик ссылок */

 umode_t i_mode; /* права доступа */

 unsigned int i_nlink; /* количество жестких ссылок */

 uid_t i_uid; /* идентификатор пользователя-владельца */

 gid_t i_gid; /* идентификатор группы-владельца */

 kdev_t i_rdev; /*
связанное устройство */

 loff_t i_size; /* размер файла в байтах */

 struct timespec i_atime; /* время последнего доступа к файлу */

 struct timespec i_mtime; /* время последнего изменения файла */

 struct timespec i_ctime; /* время изменения индекса */

 unsigned int i_blkbits; /* размер блока в битах */

 unsigned long i_blksize; /* размер блока в байтах */

 unsigned long i_version; /* номер версии */

 unsigned long i_blocks; /* размер файла в блоках */

 unsigned short i_bytes; /* количество использованных байтов */

 spinlock_t i_lock; /* блокировка для защиты полей */

 struct rw_semaphore i_alloc_sem /* вложенные блокировки при

захваченной i_sem */

 struct semaphore i_sem; /* семафор индекса */

 struct inode_operations *i_op; /* таблица операций с индексом */

 struct file_operations *i_fop; /* файловые операции */

 struct super_block *i_sb; /* связанный суперблок */

 struct file_lock *i_flock; /* список блокировок файлов */

 struct address_space *i_mapping; /* соответствующее адресное

пространство */

 struct address_space i_data; /* адресное пространство устройства */

 struct dquot *i_dquot[MAXQUOTAS]; /* дисковые квоты

для индекса */

 struct list_head i_devices; /* список блочных устройств */

 struct pipe_inode_info *i_pipe; /* информация конвейера */

 struct block_device *i_bdev; /* драйвер блочного устройства */

 unsigned long i_dnotify_mask; /* события каталога */

 struct dnotify_struct *i_dnotify; /* информация о событиях каталога */

 unsigned long i_state; /* флаги состояния */

 unsigned long dirtied_when /* время первого изменения */

 unsigned int i_flags; /* флаги файловой системы */

 unsigned char i_sock; /* сокет или нет? */

 atomic_t i_writecount; /* счетчик использования

Поделиться:
Популярные книги

Дайте поспать! Том III

Матисов Павел
3. Вечный Сон
Фантастика:
фэнтези
5.00
рейтинг книги
Дайте поспать! Том III

Путь Чести

Щукин Иван
3. Жизни Архимага
Фантастика:
фэнтези
боевая фантастика
6.43
рейтинг книги
Путь Чести

Энфис 2

Кронос Александр
2. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 2

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Книга пяти колец. Том 3

Зайцев Константин
3. Книга пяти колец
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Книга пяти колец. Том 3

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2

Титан империи 3

Артемов Александр Александрович
3. Титан Империи
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Титан империи 3

Последний попаданец 9

Зубов Константин
9. Последний попаданец
Фантастика:
юмористическая фантастика
рпг
5.00
рейтинг книги
Последний попаданец 9

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Неестественный отбор.Трилогия

Грант Эдгар
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Неестественный отбор.Трилогия

Хозяйка дома на холме

Скор Элен
1. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка дома на холме

Гром над Академией. Часть 2

Машуков Тимур
3. Гром над миром
Фантастика:
боевая фантастика
5.50
рейтинг книги
Гром над Академией. Часть 2