Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

C.5. Glock Holder

表格 C.5, “Glock holder 旗標” 顯示了不同 glock holder 旗標的意義。

表格 C.5. Glock holder 旗標

旗標名稱意義
aAsync(非同步)不等待 glock 結果(之後會輪詢結果)
AAny(任何)接受任何相容的鎖定模式
cNo cache(不快取)當釋放之後,即刻降階 DLM 鎖定
eNo expire(不過期)忽略之後的鎖定取消請求
EExact(完全符合)鎖定模式必須完全符合
FFirst(第一)當 holder 乃第一個被授與此 glock 的情形下進行設置
HHolder顯示請求的鎖定已授與
pPriority(優先權)將 holder 加入佇列的開頭
tTry(嘗試)「try」鎖定
TTry 1CB傳送 callback 的「try」鎖定
WWait(等待)等待請求完成時設置
如同先前所提及的,最重要的 holder 旗標乃 H(holder)與 W(wait)旗標,因為它們乃相應地設置於授與的請求以及排程的請求上。清單中的 holder 順序非常重要。若有任何授與的 holder,它們總是會位於佇列的最前方,之後則為其它排程的 holder。
若無授與的 holder,那麼清單中的第一個 holder 將會是啟動下個狀態變更的 holder。因為降階請求的優先權總會比來自於檔案系統的請求高,因此不一定總是會直接成為請求的狀態。
Glock 子系統支援兩種類型的「try」鎖定。這兩種類型皆相當有幫助,因為它們能改變鎖定的正常順序(以適當的 back-off 和 retry),並且它們可被使用來協助避免資源被其它節點使用。正常的 t(try)lock 基本上名副其實;它是個不會進行任何特殊動作的「嘗試」鎖定。另外,T(try 1CB)鎖定與 t 鎖定相似,除了 DLM 會傳送單一 callback 至目前不相容的 lock holder 上。T(try 1CB)鎖定的其中一項使用方法即與 iopen 鎖定搭配使用(用來在 inode 的 i_nlink 計數為零時,進行節點之間的調停,並判斷哪些節點將負責取消 inode 的配置。iopen glock 一般會處於共享狀態,不過當 i_nlink 計數成為零並且 ->delete_inode() 被調用時,它將會請求一項設置了 T(try 1CB)的 exclusive lock。若授與了鎖定,它將會繼續取消 inode 的配置。若鎖定未授與,原本防止鎖定被授與的節點會將其 glock 標記 D(demote)旗標,並且該旗標將會于 ->drop_inode() 時檢查,以確保取消配置動作不會被遺忘。
這代表含有零個連結計數,但卻仍開啟中的 inode 將會被發生了最後的 close() 的節點取消配置。並且,當 inode 的連結計數降為零的同時,inode 將會被標記為含有零個連結計數,不過卻依然使用於資源群組 bitmap 中的特殊狀態。它的運作方式與 ext3 file system3 的 orphan 清單相似,它會讓之後的任何 bitmap 讀者,都能知道可能可取回潛在的空間,並嘗試取回該空間。