C.5. Glock Holders
Tabela C.5, “Sinalizadores do proprietário glock” exibe os significados de diferentes bandeiras de glock holders..
Sinalizador | Nome | Significado |
---|---|---|
a | Async | Não espere pelo resultado glock (fará um conjunto para enviar depois) |
A | Qualquer | Qualquer modo de bloqueio compatível é aceitável |
c | Sem cache | Quando desbloqueado, rebaixe o bloqueio DLM imediatamente |
e | Não expire | Ignore pedidos de cancelamento de bloqueios subsequentes |
E | exato | Deve ter um modo de bloqueio exato |
F | Primeiro | Ajuste quando o proprietário é o primeiro a ser concedido para este bloqueio |
H | Detentor | Indica que o bloqueio requerido é concedido |
p | Prioridade | Enfileire os proprietários no início da fila |
t | Tentar | Uma "tentativa" de bloqueio |
T | Tentar 1CB | Uma "tentativa" que envia um callback |
W | Espera | Ajuste enquanto espera por um pedido para completar |
As bandeiras holders mais importantes são H (holder) e W (wait) como mencionado anteriormente, uma vez que elas são definidas dependendo das solicitações de bloqueio concedidos e as solicitações de bloqueio em fila de espera, respectivamente. A ordenação dos holders na lista é importante. Se houver qualquer holder concedido, eles estarão sempre no topo da fila, seguido por quaisquer holders em fila de espera.
Se não houver holders concedidos, o primeiro holder da lista será aquele que desencadeia a próxima mudança de estado. Como as solicitações de rebaixamento (demote) sempre são considerados prioridade maior do que os pedidos do sistema de arquivos, estas podem nem sempre resultar diretamente em uma mudança para o estado requerido.
O subsistema do glock suporta dois tipos de bloqueio de "experimento". Eles são úteis tanto porque permitem a obtenção de bloqueios fora da ordem normal (com um adequado back-off e repetição) como também porque pode ser usado para ajudar a evitar a utilização de recursos por outros nós. O bloqueio t (try) normal, é basicamente, apenas o que seu nome indica, é uma "tentativa" de bloqueio, que não faz nada de especial. O bloqueio T (
try 1CB
) por outro lado, é idêntico ao bloqueio t, exceto que o DLM irá enviar uma única chamada de retorno para os bloqueios holders de correntes incompatíveis. Uma das utilidades do bloqueio T (try 1CB
) é com os bloqueios iopen
, que são utilizados para arbitrar entre os nós quando a contagem de um i_nlink
do inode é zero, e determinar qual dos nós será responsável por desalocar o inode. O glock iopen
é normalmente realizado no estado compartilhado, mas quando a contagem do i_nlink
torna-se zero e ->delete_inode
() é chamado, ele vai solicitar um bloqueio exclusivo com o conjunto do T (try 1CB
). Ele continuará a desalocar o inode se o bloqueio for concedido. Se o bloqueio não for concedido o resultado será o(s) nó(s) que estavam impedindo a concessão do bloqueio marcando seu(s) glock(s) com a bandeira D (demote), que é verificada em ->drop_inode
() tempo, a fim de assegurar que o desalocação não seja esquecida.
Isso significa que inodes que possuem contagem de links zero, mas ainda estão abertos será desalocado pelo nó em que ocorre o último
close
(). Além disso, ao mesmo tempo que a contagem da ligação do inodo é decrementado para zero o inodo é marcado como estando no estado especial de possuir zero de contagem da link, mas ainda em uso no bitmap do grupo de recursos. Este funciona como lista órfã do arquivo ext3 system3 na medida em que permite que qualquer leitor subseqüente do bitmap saiba que existe espaço em potencial que pode ser recuperado, e tentar recuperá-lo.