B.5. glock ホルダー
表B.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) ロックの使用例の 1 つに、iopen ロックとの併用があります。これは、inode の i_nlink カウントがゼロのときノード間での調整に使われます。また、inode の割り当てに対応するノードを決定します。iopen glock は通常共有状態で保持されますが、i_nlink 数がゼロになり、->evict_inode() が呼び出されると、T (try 1CB) が設定された排他的ロックが要求されます。ロックが許可されると、inode の割り当て解除が継続されます。ロックが許可された場合は、inode の割り当て解除を継続します。ロックが許可されない場合は、ロックの許可を阻止していたノードにより glock に D (降格) フラグが設定されます。このフラグは、割り当て解除が忘れられないように ->drop_inode() が呼び出されたときにチェックされます。
これは、リンクカウントがゼロでありながら開いている inode が、最終の close() が発生するノードによって割り当て解除されることを意味します。また、inode のリンクカウントがゼロに減少するのと同時に、その inode は、リンクカウントがゼロでありながらもリソースグループビットマップで依然として使用中であるという特別の状態としてマークされます。この関数は、ext3 ファイルシステムの孤立アイテム一覧と同様に、後に続くビットマップのリーダーに、再使用可能な潜在的領域があることを知らせて、再利用を試みます。