zoukankan      html  css  js  c++  java
  • 虚拟文件系统知识 new_inode

    new_inode位于内核中的fs/node.c文件

    struct inode *new_inode(struct super_block *sb)   
    {  
    struct inode *inode;  
      
    spin_lock_prefetch(&inode_sb_list_lock);  
      
    //创建一个新的inode节点  
    inode = new_inode_pseudo(sb);  
    //如果创建成功的话,就添加到sb中的inode链表  
    if (inode)  
    inode_sb_list_add(inode);  
    return inode;  
    }  
    struct inode *new_inode_pseudo(struct super_block *sb) 
    {
      //通过sb创建inode节点
      struct inode *inode = alloc_inode(sb);
    
     //初始化、
      if (inode) {
        spin_lock(&inode->i_lock);
        inode->i_state = 0; 
        spin_unlock(&inode->i_lock);
        INIT_LIST_HEAD(&inode->i_sb_list);
      }
      return inode;
    }

    如果sb中的中的回调方法alloc_inode(由下层文件系统提供)存在,那么有下层文件系统关键该inode节点

    static struct inode *alloc_inode(struct super_block *sb)
    {
      struct inode *inode;
    
      if (sb->s_op->alloc_inode)
        inode = sb->s_op->alloc_inode(sb);
      else
        inode = kmem_cache_alloc(inode_cachep, GFP_KERNEL);
    
      if (!inode)
        return NULL;
    
      if (unlikely(inode_init_always(sb, inode))) {
        if (inode->i_sb->s_op->destroy_inode)
          inode->i_sb->s_op->destroy_inode(inode);
        else
          kmem_cache_free(inode_cachep, inode);
        return NULL;
      }
    
      return inode;
    }
  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/bspp1314/p/9294280.html
Copyright © 2011-2022 走看看