Red Hat Training

A Red Hat training course is available for RHEL 8

9.5. Glock ホルダー

以下の表は、さまざまな glock ホルダーフラグの意味を示しています。

表9.5 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 の孤立リストと同様に機能し、ビットマップの後続のリーダーは、再利用される可能性のある領域があることを認識し、再利用を試みることができます。