Linux Kernel (Ядро линукса) (часть 2)


Размонтирование файловой системы

Системный вызов umount служит для размонтирования файловой системы. Соответствующая служебная процедура sys_umount работает с двумя параметрами: с именем файла (это либо каталог, являющийся точкой монтирования, либо имя файла блочного устройства) и набором флагов. Она выполняет следующие действия:
1. Вызывает функцию path iookup для анализа пути к точке монтирования. Эта функция возвращает результаты анализа через локальную переменную nd, имеющую тип nameidata
2. Если полученный каталог не является точкой монтирования какой-либо файловой системы, обсуждаемая функция устанавливает в переменной retvai код возврата -einval и переходит к шагу 6. Эта проверка выполняется путем выяснения, содержит ли nd->mnt->mnt_root адрес объекта ”эле- мент каталога”, на который указывает nd. dentry.
3. Если файловая система, подлежащая размонтированию, не была смонтирована в данном пространстве имен, функция устанавливает в переменной retvai код возврата -einval и переходит к шагу 6. (Вспомним, что у некоторых специальных файловых систем нет точки монтирования.) Чтобы ВЫПОЛНИТЬ эту проверку, вызывается функция check_mnt ДЛЯ nd->mnt.
4. Если у пользователя нет привилегий, требуемых для размонтирования файловой системы, обсуждаемая функция устанавливает в переменной retvai код возврата -ЕРЕРм и переходит к шагу 6.
5. Вызывает функцию do_umount , передавая ей в качестве параметров объект, представляющий смонтированную файловую систему (nd.mnt) и набор флагов (flags). Эта функция выполняет следующие операции:
• извлекает адрес суперблока sb из поля mnt sb объекта, представляющего смонтированную файловую систему;
• если пользователь запросил форсированное размонтирование, функция прерывает любую текущую операцию монтирования при помощи операции суперблока umount_begin;
• если файловая система, подлежащая размонтированию, является корневой, и пользователь не требует отключения файловой системы, эта функция вызывает do remount , чтобы заново смонтировать корневую файловую систему только для чтения, и возвращает управление;
• получает для записи семафор namespace->sem текущего процесса и спин-блокировку vfsrn.ou.nt lock;
• если смонтированная файловая система не включает в себя точек монтирования дочерних смонтированных файловых систем, или если пользователь запросил форсированное отключение файловой системы, функция вызывает umount tree для размонтирования файловой системы вместе со всеми дочерними системами;
• освобождает спин-блокировку vfsmount_lock И семафор namespace->sem текущего процесса.
6. Уменьшает счетчики обращений объекта элемент каталога”, соответствующего корневому каталогу файловой системы, и дескриптора смонтированной файловой системы. (Эти счетчики были увеличены функцией
path_lookup ().)
7. Возвращает retvai.

Предыдущая страница | 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 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...