C.5. Portadores de Glock
La Tabla C.5, “Indicadores de portadores de glock” muestra el significado de los diferentes indicadores de portadores de glock.
Indicador | Nombre | Significado |
---|---|---|
a | Async | No espera ningún resultado de Glock (emitirá un resultado más adelante) |
A | Any | Acepta cualquier modo de cerrojo compatible |
c | No cache | Cuando está desbloqueado, degrada al cerrojo DLM inmediatamente |
e | No expire | Ignora solicitudes posteriores de cancelar el cerrojo |
E | Exact | Debe tener el modo exacto de cerrojo |
F | First | Cuando el portador es el primero en concedérsele este cerrojo |
H | Holder | Indica que se ha otorgado el cerrojo solicitado |
p | Priority | Pone al 'Portador' a la cabeza de la cola |
t | Try | Un cerrojo de "ensayo" |
T | Try 1CB | Un cerrojo de "ensayo" que envía una llamada |
W | Wait | Se establece mientras espera que una solicitud se complete |
Los indicadores de portadores son H (holder) y W (wait) como se mencionó anteriormente, ya que se establecen en solicitudes de cerrojo otorgadas y solicitudes de cerrojo en cola, respectivamente. El ordenamiento de los portadores en la lista es importante. Si hay portadores otorgados, siempre estarán en la cabeza de la cola, seguido por otros portadores en cola.
Si no hay portadores otorgados, entonces el primer portador de la lista será el primero en activar el siguiente cambio de estado. Debido a que las solicitudes para degradar son considerados de más prioridad que las solicitudes del sistema de archivos, puede ser que no siempre resulte en el cambio al estado solicitado.
El subsistema de glock soporta dos clases de cerrojos "try". Estos cerrojos son útiles porque permiten la toma de bloqueos del orden normal (con regreso y reintento apropiados ) y porque pueden servir para ayudar a evitar recursos en uso por otros nodos. El cerrojo normal t (try) es básicamente lo que su nombre indica; es el cerrojo de "ensayo" que no hace nada especial. Por otra parte, el cerrojo T (
try 1CB
), es idéntico al cerrojo t excepto que el DLM enviará una sola llamada a los portadores de cerrojos incompatibles. El cerrojo T (try 1CB
) con los cerrojos iopen
, sirve de árbitro entre nodos cuando el conteo de nodos i_nlink
es cero y, determina cuál de los nodos deberá cambiar la asignación del inodo. El glock iopen
por lo general se lleva a cabo en el estado compartido, pero cuando el conteo i_nlink
se convierte en cero y ->delete_inode
() es llamado, solicitará un cerrojo exclusivo con T (try 1CB
). Si el cerrojo es otorgado, continuará cambiando la asignación del inodo. De lo contrario, hará que los nodos que impedían el cerrojo marque su(s) glock(s) con el indicador D (degradar), el cual se revisa en ->drop_inode
() para garantizar que el cambio de asignación no se olvide.
Esto significa que los inodos que tienen un conteo de enlace cero, pero que aún están abiertos, serán cambiados de asignación por el nodo en el cual ocurre el
close
() final. También, al mismo tiempo que el conteo de enlace de inodo decrece a cero, el inodo se marca como si estuviera en el estado especial de conteo de enlace cero pero aún se utiliza en el bitmap de grupo de recursos. Esto funciona como un huérfano de la lista de sistema de archivos ext3 en que permite a cualquier lector posterior del bitmap saber que hay espacio potencial que podría ser reclamado, e intentar reclamarlo.