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

на главную - закладки

Жанры

Разработка ядра 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; /* счетчик использования

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

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Жена со скидкой, или Случайный брак

Ардова Алиса
Любовные романы:
любовно-фантастические романы
8.15
рейтинг книги
Жена со скидкой, или Случайный брак

Шаман. Похищенные

Калбазов Константин Георгиевич
1. Шаман
Фантастика:
боевая фантастика
попаданцы
6.44
рейтинг книги
Шаман. Похищенные

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Герцог и я

Куин Джулия
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Герцог и я

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Плохая невеста

Шторм Елена
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Плохая невеста