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

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

Жанры

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

 struct semaphore s_vfs_rename_sem; /* семафор переименования */

};

Код для создания, управления и ликвидации объектов суперблок находится в файле

fs/super.c
. Объект суперблок создается и инициализируется в функции
alloc_super
. Эта функция вызывается при монтировании файловой системы, которая считывает суперблок файловой системы с диска и заполняет поля объекта суперблок.

Операции суперблока

Наиболее

важный элемент суперблока — это поле
s_op
, которое является указателем на таблицу операций суперблока. Таблица операций суперблока представлена с помощью структуры
struct super_operations
, которая определена в файле
<linux/fs.h>
. Она выглядит следующим образом.

struct super_operations {

 struct inode *(*alloc_inode)(struct super_block *sb);

 void (*destroy_inode)(struct inode*);

 void (*read_inode)(struct inode*);

 void (*dirty_inode)(struct inode*);

 void (*write_inode)(struct inode*, int);

 void (*put inode)(struct inode*);

 void (*drop_inode)(struct inode*);

 void (*delete_inode)(struct inode*);

 void (*put_super)(struct super_block*);

 void (*write_super)(struct super block*);

 int (*sync_fs)(struct super_block*, int);

 void (*write_super_lockfs)(struct super_block*);

 void (*unlockfs)(struct super_block*);

 int (*statfs)(struct super_block*, struct statfs*);

 int (*remount_fs)(struct super_block*, int*, char*);

 void (*clear_inode)(struct inode*);

 void (*umount_begin)(struct super block*);

 int (*show_options)(struct seq_file*, struct vfsmount*);

};

Каждое поле этой структуры представляет собой указатель на функцию, которая работает с объектом суперблок. Операции суперблока выполняют низкоуровневые действия с файловой системой и ее файловыми индексами.

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

sb->s_op->write_super(sb);

где параметр sb — это указатель на суперблок файловой системы. Следуя по указателю

s_op
, получаем таблицу операций суперблока и, наконец, необходимую функцию
write_super
, которая вызывается непосредственно. Следует обратить внимание на то, что вызову функции
write_super
необходимо передать указатель на суперблок в качестве параметра, несмотря на то что метод связан с суперблоком. Это происходит от того, что язык программирования С не объектно-ориентирован. В C++ аналогичный вызов может быть выполнен следующим образом.

sb.write_super;

В

языке С нет простого способа получить указатель на объект, для которого вызван метод, поэтому его необходимо передавать явно.

Рассмотрим операции суперблока, которые описаны в структуре

super_operations
.

• 

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
.

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

Двойник короля 17

Скабер Артемий
17. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 17

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

Лондон

Резерфорд Эдвард
The Big Book
Проза:
историческая проза
6.67
рейтинг книги
Лондон

Локки 10. Потомок бога

Решетов Евгений Валерьевич
10. Локки
Фантастика:
фэнтези
юмористическое фэнтези
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 10. Потомок бога

Изгой Проклятого Клана. Том 5

Пламенев Владимир
5. Изгой
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 5

Оживший камень

Кас Маркус
1. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Оживший камень

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Двойник Короля 6

Скабер Артемий
6. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 6

Мастер решений

Земляной Андрей Борисович
3. Специалист по выживанию
Фантастика:
боевая фантастика
космическая фантастика
6.20
рейтинг книги
Мастер решений

Хроники Тириса. Книга 1

Маханенко Василий Михайлович
1. Хроники Тириса
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
6.00
рейтинг книги
Хроники Тириса. Книга 1

Евреи России. Времена и события. История евреев Российской империи

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Евреи России. Времена и события. История евреев Российской империи

Слезы Эйдена 1

Владимиров Денис
11. Глэрд
Фантастика:
боевая фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Слезы Эйдена 1

Родословная. Том 1

Ткачев Андрей Юрьевич
1. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Родословная. Том 1

Хозяин Стужи 4

Петров Максим Николаевич
4. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Хозяин Стужи 4