nfs-ganesha - Session

1. EXCHANGE_ID - 创建client id

封装在nfs4_op_exchange_id中。

  1. 调用get_client_record函数,将NFS client传进来的co_ownerid创建nfs_client_record_t。主要是填充其中的cr_unconfirmed_rec部分。
  2. 调用create_client_id,分配client id,创建client owner等。

1.1 nfs_client_record_t

struct nfs_client_record_t {
...
    nfs_client_id_t *cr_confirmed_rec; //confirm
    nfs_client_id_t *cr_unconfirmed_rec;//unconfirm
...
}

struct nfs_client_id_t {
    clientid4 cid_clientid; //clientid
    verifier4 cid_verifier; //verifier,重启后会变化
...
    state_owner_t cid_owner; //client owner
    struct glist_head cid_openowners;   //open owner list
    struct glist_head cid_lockowners;   //lock owners list
    pthread_mutex_t cid_mutex;
...
    struct gsh_client *gsh_client; //
};

2. CREATE_SESSION - confirm client id

封装在nfs4_op_create_session中。

  1. 通过nfs_client_id_get_unconfirmed,通过clientid得到unconfirmed的nfs_client_id_t,即EXCHANGE_ID时候创建的。
  2. 创建nfs41_session对象,为session分配slot
  3. 创建session id
  4. nfs_client_record_t中的cr_unconfirmed_rec抹去,填上cr_confirmed_rec

你可能感兴趣的:(nfs-ganesha - Session)