Выделение суперблока
Метод get sb объекта, представляющего файловую систему, обычно реализуется функцией, состоящей из одной строки кода. Например, в файловой системе Ext2 этот метод реализован так:
struct super_block ext2_get_sb(struct file_system_type type,
int flags, const char dev_name,
void Mata){
return get_sb_bdev(type, flags, dev_name, data, ext2_fill_super);
}
Функция виртуальной файловой системы get sb bdev выделяет и инициализирует новый суперблок, подходящий для дисковых файловых систем. Она принимает адрес функции ext2_fiii_superо, которая считывает дисковый суперблок из раздела Ext2 на диске.
Для выделения суперблоков, подходящих для специальных файловых систем, виртуальная файловая система предоставляет следующие функции: get sb pseudo (для специальных файловых систем без точки монтирования, например, pipfs), get_sb_singie (для специальных файловых систем с единственной ТОЧКОЙ монтирования, например, sysfs) И get sb nodev (для специальных файловых систем, которые могут быть монтированы неоднократно, например, tmpfs).
Приведем самые важные операции из числа выполняемых функцией
get_sb_bdev :
1. Вызывает open bdev exci), чтобы открыть блочное устройство с именем dev name
2. Вызывает sget для осуществления поиска в списке суперблоков файловой системы (type->fs_supers, см. разд. "Регистрация типа файловой системы"ранее в этой главе). Если суперблок, относящийся к блочному устройству, уже присутствует, функция возвращает его адрес. В противном случае она выделяет и инициализирует новый объект-суперблок, заносит его в список файловой системы и в глобальный список суперблоков, а затем возвращает его адрес.
3. Если суперблок не является новым (то есть не был выделен на предыдущем шаге, потому что файловая система уже была смонтирована), функция переходит к шагу 6.
4. Копирует значение параметра flags в поле s fiags суперблока и заносит в ПОЛЯ s_id, soldblocksize И sblocksize Значения, соответствующие блочному устройству.
5. Вызывает специфичную для файловой системы функцию, переданную в качестве последнего аргумента функции get sb bdev , чтобы прочитать данные суперблока с диска и заполнить другие поля нового суперблока.
6. Возвращает адрес нового объекта-суперблока.
Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница