美文网首页
NFS Client in Linux Kernel - Rec

NFS Client in Linux Kernel - Rec

作者: 帆子_8c3a | 来源:发表于2019-04-14 17:11 被阅读0次

1. Client端Recovery总体过程

  1. Client会定期发送的SEQUENCE,由于Server重启,返回NFS4ERR_BADSESSION。导致调用nfs4_schedule_session_recovery,标记NFS4CLNT_SESSION_RESET,进入nfs4_state_manager状态机处理。
  2. 标记NFS4CLNT_SESSION_RESET会导致Clinet发送DESTROY_SESSION,Server由于重启,无法用sessionid找到原有的session,返回NFS4ERR_BADSESSION
  3. Client发送CREATE_SESSION,Server返回NFS4ERR_STALE_CLIENTID
  4. Client调用nfs4_state_start_reclaim_reboot,并标记NFS4CLNT_LEASE_EXPIRED+NFS4CLNT_RECLAIM_REBOOT
  5. 标记NFS4CLNT_LEASE_EXPIRED导致发送EXCHANGE_ID+CREATE_SESSION
  6. 标记NFS4CLNT_RECLAIM_REBOOT导致调用nfs4_do_reclaimnfs4_state_end_reclaim_reboot
    1. nfs4_do_reclaim: 枚举所有open和lock,reclaim它们
    2. nfs4_state_end_reclaim_reboot: 发送RECLAIM_COMPLETE

2. nfs4_do_reclaim

  1. 从super block可以枚举所有的owner
  2. 从owner上可以枚举所有的open state
  3. reclaim所有的 open state
  4. 每个open state可以枚举所有的lock
  5. reclaim所有的 lock

3. Server处于grace period

3.1 reclaim open

代码逻辑在nfs4_open_reclaim,发送CLAIM_PREVIOUS标记的OPEN命令给NFS Server

3.2 reclaim lock

代码逻辑在nfs4_lock_reclaim,发送带reclaim标记的LOCK命令给NFS Server

4. Server处于non grace period

当某个NFS reclaim操作返回-NFS4ERR_NO_GRACE,client认为它目前已经结束grace period。

4.1 reclaim open

代码逻辑在nfs41_open_expired。由于Server不在grace period,直接将这个state设置成过期,从链表中删除。

4.2 reclaim lock

代码逻辑在nfs41_lock_expired。由于Server不在grace period,直接将这个state设置成过期,从链表中删除。

相关文章

网友评论

      本文标题:NFS Client in Linux Kernel - Rec

      本文链接:https://www.haomeiwen.com/subject/rjjswqtx.html