mkdir
2022-01-02 10:57:33   0  举报             
     
         
 AI智能生成
  mkdir ceph client侧的处理
    作者其他创作
 大纲/内容
  Client::ll_mkdir    
     may_create    
     _getattr_for_perm父目录的inode的caps是否有As的权限  
     inode_permission 操作的用户uid、gid是否有权限  
     _mkdir    
     1.is_quota_files_exceeded 检查配额  
     2.填充MetaRequest请求  
     3.get_or_create    
     1.给inode->dir赋值  
     2.获取需要的Dentry结构    
     存在,从inode->dir->dentries中获取  
     不存在,调用link创建一个,并放入Client::lru缓存  
     4.make_request    
     1.choose_target_mds 选择一个mds  
     2._get_or_open_mds_session 打开或者创建一个与mds的session  
     3.send_request 发送请求    
     1.生成MClientRequest请求  
     2.Client::encode_cap_releases 去掉父目录caps中的Fs权限,并新建ceph_mds_request_release添加到MClientRequest的release中  
     3.session->requests.push_back(&request->item); 添加请求到队列  
     4.session->con->send_message(r) 发送请求  
     4.等待回复  
     5.发送回复:MClientReply  
     5.trim_cache  
     fill_stat  
     Client::handle_client_replay    
     1.insert_trace    
     1.Client::add_update_inode 分配新创建的目录的inode  
     2.Client::add_update_inode 更新父目录的inode  
     3.Client::update_dir_dist 更新父目录inode中的fragmap  
     4.Inode::open_dir 获取父目录的inode的dir  
     5.Client::insert_dentry_inode 给Dentry中inode赋值,并将Dentry加入自己的inode链表  
     2.唤醒阻塞的请求  
     Server::handle_client_request    
     mds->locker->process_request_cap_release    
     mdcache->get_inode(ino)  获取父目录的CInode  
     in->get_client_cap(client) 获取CInode中对应client的cap  
     cap->confirm_receipt(seq, caps) 将CInode caps中的_issued和_pending设置为与传过来的caps相同  
     adjust_cap_wanted(cap, wanted, issue_seq) 设置caps中的wanted  
     eval(in, CEPH_CAP_LOCKS)  
     Server::dispatch_client_request    
     Server::handle_client_mkdir    
     rdlock_path_xlock_dentry  
     mds->locker->acquire_locks  
     prepare_new_inode 创建CInodeb并填充信息  
     newi->get_or_open_dirfrag 目录分片  
     mdcache->predirty_journal_parents  
     mds->locker->issue_new_caps  
     journal_and_reply    
     early_reply 回复客户端  
     submit_mdlog_entry    
     MDLog::_submit_entry 提交日志  
     submit_cond.Signal() 触发刷盘  
     mds->locker->drop_rdlocks_for_early_reply  
     mds->balancer->maybe_fragment  
     
    收藏 
     
 
 
 
 
  0 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
  
  
 