Вход/Регистрация
Разработка ядра Linux
вернуться

Лав Роберт

Шрифт:

 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; /* список измененных индексов */

 struct list_head s_io; /* список обратной записи */

 struct hlist_head s_anon; /* анонимные элементы каталога

для экспортирования */

 struct list_head s_files; /* список связанных файлов */

 struct block_device *s_bdev; /* соответствующий драйвер

блочного устройства */

 struct list_head s_instances; /* список файловых систем

данного типа */

 struct quota_info s_dquot; /* параметры квот */

 char s_id[32]; /* текстовое имя */

 void *s_fs_info; /* специфическая информация

файловой системы */

 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*);

};

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

  • Читать дальше
  • 1
  • ...
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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