原创 OPEN(三)

    現在可以接着講解文件打開過程。在前面的文章中我們講過,客戶端在發起OPEN操作前創建了新的數據結構nfs4_state_owner和nfs4_state,nfs4_state_owner表示客戶端一個用戶,nfs4_state表示

原创 創建反向通道

    是時候講講NFS客戶端和服務器之間反向通道的建立過程了,因爲馬上就會講到delegation了。一般情況下,NFS客戶端向服務器發送RPC請求,服務器進行處理,這個通道稱爲正向通道。而delegation需要使用反向通道,當服務器

原创 打開一個有delegation的文件(權限衝突)

    這篇文章中先講講NFSv4中的READ。客戶端發起READ請求時需要提供三個信息:一個stateid、數據在文件中的起始位置、請求的數據量。服務器會根據客戶端提供的stateid查找到對應的文件,然後讀取文件中的數據返回給客戶端。

原创 OPEN(二)

        這篇文章中我們接着講解服務器端的處理程序,首先介紹幾個與OPEN操作有關的數據結構。第1個數據結構是struct nfs4_openowner,這個數據結構跟客戶端的nfs4_state_owner相對應,保存了一個用戶的

原创 OPEN(一)

1.OPEN請求報文和應答報文中的數據         OPEN操作比較複雜,涉及到很多種特殊情況。按照RFC3530的規定,OPEN請求報文中需要包含下列數據: struct OPEN4args { seqid4

原创 關閉文件

1.CLOSE和OPEN_DOWNGRADE     客戶端用戶執行完讀寫操作之後就需要關閉文件了,一般情況下客戶端用戶調用close(2)關閉文件。NFS文件系統中有兩個請求與關閉文件相關:CLOSE和OPEN_DOWNGRADE。 C

原创 打開一個有delegation的文件(權限沒有衝突)

    這篇文章中我們討論這樣一種情況:假設用戶user1以只讀權限打開了文件file1,並且服務器爲這個文件分配了delegation。現在用戶user2用樣以只讀權限打開文件file1,那麼user2打開文件的過程是什麼樣的呢?是否還

原创 LAYOUTGET(一)

    現在可以講解LAYOUTGET請求了,首先我們需要回憶一下NFS文件系統中讀數據的過程,看看LAYOUT請求是什麼時候觸發的。NFS文件系統中,每個緩存頁關聯了一個數據結構struct nfs_page。同時客戶端還定義了一個數據

原创 NFS中的文件鎖

    文件鎖是保持文件同步的一種手段,當多個用戶同時操作同一個文件時,文件鎖可以保證數據不發生衝突。NFSv2和NFSv3依靠NLM協議實現文件鎖,NFSv4本身實現了文件鎖,不需要NLM協同工作了。NFS中的文件鎖既可以加在客戶端,也

原创 MDS中file layout初始化過程

    pNFS系統的部署過程見這篇文章:http://blog.csdn.net/ycnian/article/details/8523193。這篇文章中我們講講MDS的初始化過程,主要想講講向文件/proc/fs/nfsd/pnfs_

原创 客戶端如何設置delegation

    上一篇文章中我們講解了服務器沒有分發delegation的情況下,OPEN操作結束之後客戶端的設置過程,這篇文章中我們接着講講如果服務器分發了delegation客戶端的設置過程。首先講講客戶端表示delegation的數據結構,

原创 返還delegation

    現在可以講解delegation的返還過程了。像上一篇文章中講到的那樣,當文件的訪問過程發生衝突時,服務器會向客戶端發送CB_RECALL請求。客戶端接收到CB_RECALL請求後,首先會更新關聯在這個文件上的open state

原创 分發delegation

    delegation是NFSv4中保持文件同步的一種機制。當NFS客戶端持有delegation時就認爲自己和服務器保持同步了。多個客戶端可以持有同一個文件的delegation,比如多個客戶端以只讀方式打開了同一個文件,這種情況

原创 連續兩次打開同一個文件

        前面幾篇文章中我們講解了OPEN操作中最基本的情況:打開服務器端存在的一個文件,接下來的幾篇文章中,我們討論幾種特殊情況。這篇文章中我們先討論第一種情況:同一個用戶連續兩次打開同一個文件。     用戶user1以只讀權限

原创 設置layout

    layout需要MDS、DS和客戶端三方共同支持,當客戶端通過GETATTR請求獲取了layout類型後,還需要檢查自己是否支持這種類型,客戶端檢查、設置layout的函數是set_pnfs_layoutdriver()。