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.

Tabla C.5. Indicadores de portadores de glock

IndicadorNombreSignificado
aAsyncNo espera ningún resultado de Glock (emitirá un resultado más adelante)
AAnyAcepta cualquier modo de cerrojo compatible
cNo cacheCuando está desbloqueado, degrada al cerrojo DLM inmediatamente
eNo expireIgnora solicitudes posteriores de cancelar el cerrojo
EExactDebe tener el modo exacto de cerrojo
FFirstCuando el portador es el primero en concedérsele este cerrojo
HHolderIndica que se ha otorgado el cerrojo solicitado
pPriorityPone al 'Portador' a la cabeza de la cola
tTryUn cerrojo de "ensayo"
TTry 1CBUn cerrojo de "ensayo" que envía una llamada
WWaitSe 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.