B.5. glock ホルダー

表B.5「Glock ホルダーフラグ」 には、異なる glock ホルダーのフラッグの意味をまとめています。

表B.5 Glock ホルダーフラグ

フラグ名前意味
aAsyncglock の結果を待ちません (結果を後でポールします)
AAny互換性のあるロックモードはすべて受け入れ可能です
cNo cacheロック解除時に DLM ロックを即時に降格します
eNo expire後続のロック取り消し要求を無視します
EExact完全一致するロックモードでなければなりません
FFirstホルダーがこのロックに最初に許可される場合に指定します
HHolder要求したロックが許可されたことを示します
pPriorityキューの先頭にある待機ホルダー
tTry「try」ロックです
TTry 1CBコールバックを送信する「try」ロックです
WWait要求完了の待機中にセットされます
前述したように、H (holder) および W (wait) はそれぞれ、許可されたロック要求と、キューに追加されたロック要求に設定されるので、最も重要なホルダーフラグです。一覧内でのホルダーの順序付けは重要です。許可されたホルダーがある場合は、必ずキューの先頭に配置され、キューに追加されたホルダーがその後に続きます。
許可されたホルダーがない場合には、一覧の最初のホルダーが次の状態変更をトリガーします。降格の要求は、ファイルシステムからの要求よりも常に優先度が高いとみなされるため、この要求によって必ずしも直接、要求された状態への変更が行われるわけではありません。
glock のサブシステムは、2 種類の "try" ロックをサポートします。これらのロックは、(適切な back-off および retry で) 通常の順序でのロックの取得を可能にし、他のノードが使用中のリソースを回避するために使用できるため、いずれも有用です。通常の t (try) ロックは、その名前が示すように "try" ロックであり、特別なことは何もしません。一方、T (try 1CB) ロックは、DLM が単一のコールバックを互換性のないロックホルダーに送信する以外は t ロックと同じです。T (try 1CB) ロックの使用例の 1 つに、iopen ロックとの併用があります。このロックは、inode の i_nlink 数がゼロのときにノードを判別して、どのノードが inode の割り当て解除を行っているかを判断するために使用されます。iopen glock は通常共有の状態で保持されますが、i_nlink 数がゼロになり、->delete_inode() が呼び出されると、T (try 1CB) が設定された状態で排他的ロックを要求します。ロックが許可された場合は、inode の割り当て解除を継続します。ロックが許可されない場合は、ロックの許可を阻止していたノードにより glock に D (降格) フラグが設定されます。このフラグは、割り当て解除が忘れられないように ->drop_inode() が呼び出されたときにチェックされます。
これは、リンクカウントがゼロでありながら開いている inode が、最終の close() が発生するノードによって割り当て解除されることを意味します。また、inode のリンクカウントがゼロに減少するのと同時に、その inode は、リンクカウントがゼロでありながらもリソースグループビットマップで依然として使用中であるという特別の状態としてマークされます。この関数は、ext3 ファイルシステムの孤立アイテム一覧と同様に、後に続くビットマップのリーダーに、再使用可能な潜在的領域があることを知らせて、再利用を試みます。