9.5. Glock ホルダー
以下の表は、さまざまな glock ホルダーフラグの意味を示しています。
フラグ | 名前 | 意味 |
---|---|---|
a | Async | glock の結果を待ちません (結果は後でポーリングします)。 |
A | Any | 互換性のあるロックモードはすべて受け入れ可能です。 |
c | No cache | ロック解除時に DLM ロックを即時に降格します。 |
e | No expire | 後続のロック取り消し要求を無視します。 |
E | Exact | 完全一致するロックモードでなければなりません。 |
F | First | ホルダーがこのロックに最初に許可される場合に指定します。 |
H | Holder | 要求したロックが許可されたことを示します。 |
p | Priority | キューの先頭にある待機ホルダー |
t | Try | try ロックです。 |
T | Try 1CB | コールバックを送信する try ロックです。 |
W | Wait | 要求完了の待機中にセットされます。 |
前述のように、それぞれ許可されたロック要求とキューに追加されたロック要求に設定されるため、ホルダーフラグで最も重要となるのは H (ホルダー) および W (待機) です。リスト内でのホルダーの順序は重要です。許可されたホルダーがある場合は常にキューの先頭にあり、その後にキューに追加されているホルダーが続きます。
許可されたホルダーがない場合は、リストの最初のホルダーが次の状態変更をトリガーするホルダーになります。降格要求は常にファイルシステムからの要求よりも優先度が高いと見なされるため、要求された状態が直接変更されるとは限りません。
glock サブシステムは、2 種類の try ロックに対応しています。これらは、(適切なバックオフと再試行により) 通常の順序からロックを解除でき、他のノードで使用されているリソースを回避するために使用できるため役立ちます。通常の t (試行) ロックは、その名前が示すとおりです。特別なことは行わない試行ロックです。一方、T (try 1CB
) ロックは、DLM が現在互換性のないロックホルダーにコールバックを 1 つ送信するのを除き、t ロックと同じです。T (try 1CB
) ロックには、iopen
ロックがあります。これは、inode の i_nlink
数がゼロの場合にノード間の調整に使用されます。また、inode の割り当てに対応するノードを決定します。iopen
glock は通常、共有状態で保持されますが、i_nlink
リンク数がゼロになり、→evict_inode
() が呼び出されると、T (try 1CB
) セットによる排他的ロックが要求されます。ロックが許可されると、inode の割り当て解除が継続されます。ロックが許可されていない場合は、ロックの付与を妨げていたノードが glock を D (降格) フラグでマークします。これは、割り当て解除が忘れられていないことを確認するために、→drop_inode
() 時間で確認されます。
つまり、リンク数がゼロであるがまだ開いている inode が、最後の close
() が発生したノードによって割り当て解除されます。また、inode のリンク数もゼロにデクリメントされますが、inode はリンク数がゼロの特別な状態にあるとマークされますが、引き続きリソースグループのビットマップで使用されています。これは ext3 ファイルシステム 3 の孤立リストと同様に機能し、ビットマップの後続のリーダーは、再利用される可能性のある領域があることを認識し、再利用を試みることができます。