美文网首页
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