NFSD端write流程分析

2021-05-27 01:28:44 字數 1351 閱讀 1870

早晨走路來實驗室,一路上頭上瀑布,腳下海浪,還不慎滑倒,摔了一身水,想起初中時候每次下雨,都從家裡百公尺衝刺到學校北牆,竄上牆頭,翻進學校,兩相對比,不禁感慨:人都會變老,誰也逃不掉。

言歸正傳,nfsd端write流程;

resp的定義相比read多了len + stable 兩個成員,

struct nfsd3_writeargs ;

static __be32

nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp,

struct nfsd3_writeres  *resp)

{__be32    nfserr;

unsigned long cnt = argp->len;

fh_copy(&resp->fh, &argp->fh);

resp->committed = argp->stable;

nfserr = nfsd_write(rqstp, &resp->fh, null,

argp->offset,

rqstp->rq_vec, argp->vlen,

&cnt,

&resp->committed);

resp->count = cnt;

return_status(nfserr);

這個len與count 有什麼區別麼?

nfsd_write()中並沒有把count引數傳遞進去,推斷count應該是廢棄了。

nfsd_write()設定了stable變數,但是沒看懂。。。大致判斷不會影響下層的呼叫,之後

host_err = vfs_writev(file, (struct iovec __user *)vec, vlen, &offset);

set_fs(oldfs);

if (host_err < 0)

goto out_nfserr;

*cnt = host_err;

nfsdstats.io_write += host_err;

nfsdstats是個全域性變數,表徵全域性狀態,然後看 vfs_writev();

if (!(file->f_mode & fmode_write))

return -ebadf;

if (!file->f_op || (!file->f_op->aio_write && !file->f_op->write))

return -einval;

return do_readv_writev(write, file, vec, vlen, pos);

看 do_readv_writev();

剩下的**與read的路徑完全一致了,不再追誰。

10 2 2 客戶端流程分析

客戶端主要包括以下主要函式過程 初始化 ssl演算法函式 連線並接收伺服器訊息執行緒函式 向伺服器傳送訊息函式。1 初始化 ssl演算法 此過程的 新增在 oninitdialog 方法中。處理過程如下 1 初始化 openssl 演算法庫ssl load error strings ssleay ...

XFire客戶端流程分析及案例

下面是xfire客戶端呼叫的流程分析圖,本文後續部分將圍繞該圖展開。服務模型是xfire中非常重要的概念之一,包含了服務的介面資訊 操作資訊 binding資訊等諸多服務呼叫過程中需要的資訊。因此在進行服務呼叫之前首先要建立服務模型。建立服務模型的工作是由服務工廠servicefactory完成的,...

客戶端提交mr job原始碼流程分析

job job.getinstance獲得job物件 job.set 新增configuration等配置引數 job.waitforcomplete 原始碼內部實則呼叫submit 方法 之後jobsubmiter中有個成員cluster cluster中又有個成員proxy 物件,幫助提交到ya...