8.5. Soportes para Glock
enTabla 8.5, “Banderas de soporte de Glock” se muestran los significados de las diferentes banderas de los soportes de las glock.
Bandera | Nombre | Significado |
---|---|---|
a | Async | No espere el resultado de glock (hará una encuesta para el resultado más tarde) |
A | Cualquier | Se acepta cualquier modo de bloqueo compatible |
c | No hay caché | Cuando se desbloquea, baja el bloqueo DLM inmediatamente |
e | No caduca | Ignorar las solicitudes de cancelación de bloqueo posteriores |
E | Exactamente | Debe tener el modo de bloqueo exacto |
F | Primero | Se establece cuando el titular es el primero en ser concedido para esta cerradura |
H | Titular | Indica que se ha concedido el bloqueo solicitado |
p | Prioridad | Colocar al titular de la cola en la cabeza de la cola |
t | Prueba con | Una cerradura "try" |
T | Prueba 1CB | Un bloqueo "try" que envía un callback |
W | Espera | Se establece mientras se espera a que se complete la solicitud |
Los indicadores de titular más importantes son H (titular) y W (espera), como se mencionó anteriormente, ya que se establecen en las solicitudes de bloqueo concedidas y en las solicitudes de bloqueo en cola, respectivamente. El orden de los titulares en la lista es importante. Si hay titulares concedidos, siempre estarán a la cabeza de la cola, seguidos de los titulares en cola.
Si no hay titulares concedidos, el primer titular de la lista será el que desencadene el siguiente cambio de estado. Dado que las solicitudes de baja se consideran siempre de mayor prioridad que las solicitudes del sistema de archivos, esto podría no siempre resultar directamente en un cambio de estado solicitado.
El subsistema glock soporta dos tipos de bloqueos "try". Estos son útiles tanto porque permiten la toma de bloqueos fuera del orden normal (con un retroceso y reintento adecuados) como porque pueden ser utilizados para ayudar a evitar recursos en uso por otros nodos. El bloqueo normal t (try) es justo lo que su nombre indica; es un bloqueo "try" que no hace nada especial. El bloqueo T (try 1CB
), por otro lado, es idéntico al bloqueo t, excepto que el DLM enviará una única devolución de llamada a los actuales titulares de bloqueos incompatibles. Un uso del bloqueo T (try 1CB
) es con los bloqueos iopen
, que se utilizan para arbitrar entre los nodos cuando la cuenta i_nlink
de un nodo es cero, y determinar cuál de los nodos será responsable de la desasignación del nodo. El glock de iopen
se mantiene normalmente en estado compartido, pero cuando la cuenta de i_nlink
llega a cero y se llama a →evict_inode
(), solicitará un bloqueo exclusivo con T (try 1CB
) establecido. Si el bloqueo es concedido, continuará con la asignación del inodo. Si el bloqueo no se concede, el nodo(s) que impedía(n) la concesión del bloqueo marcará(n) su(s) glock(s) con la bandera D (demote), que se comprueba en →drop_inode
() para asegurar que la desasignación no se olvida.
Esto significa que los inodos que tienen un recuento de enlaces cero pero que todavía están abiertos serán desasignados por el nodo en el que se produce el close
() final. Además, al mismo tiempo que el recuento de enlaces del nodo se reduce a cero, el nodo se marca como en el estado especial de tener un recuento de enlaces cero pero todavía en uso en el mapa de bits del grupo de recursos. Esto funciona como la lista de huérfanos del sistema de archivos ext3 en el sentido de que permite a cualquier lector posterior del mapa de bits saber que existe un espacio potencialmente recuperable, e intentar recuperarlo.