Inode相关函数

  bitmap.c

1. int new_block(int dev)

申请一个新的逻辑块;

在逻辑块位图sb->s_zmap[ ]中找到第一个位为0的, 将其置位

在缓冲区中找到一对应的缓冲块, 初始化



2. void free_block(int dev, int block)

释放一个逻辑块,

将逻辑块位图上对应的位清0



3. struct m_inode * new_inode(int dev)

从inode位图sb->s_imap[ ] 中找到第一个为0的, 

找到一个空闲的Inode节点

位图中相应位置1

初始化该节点

bh->b_dirt = 1;
inode->i_count=1;
inode->i_nlinks=1;
inode->i_dev=dev;
inode->i_uid=current->euid;
inode->i_gid=current->egid;
inode->i_dirt=1;
inode->i_num = j + i*8192;
inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;



4. void free_inode(struct m_inode * inode)

释放指定的Inode节点

将sb->s_imap[ ] 对应的位清0

bh->b_dirt = 1;
memset(inode,0,sizeof(*inode));



inode.c

5. struct m_inode * get_empty_inode(void)

得到第一个空闲I节点

判断空闲: if (!last_inode->i_count) 并且 if (!inode->i_dirt && !inode->i_lock)

memset(inode,0,sizeof(*inode));
inode->i_count = 1;



6. static void read_inode(struct m_inode * inode)

从设备上读取indoe内容, 拷贝到inode结构中

block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks +
(inode->i_num-1)/INODES_PER_BLOCK;



7. static void write_inode(struct m_inode * inode)
从设备上读取i节点内容, 然后拷贝到缓冲区中



8. struct m_inode * iget(int dev,int nr)

dev 设备号

nr I节点号

搜索指定的设备号, 节点号的inode, 拷贝到内存中



9. void iput(struct m_inode * inode)

回写该节点,

如果链接数为1, 则释放逻辑块和该节点


10. void invalidate_inodes(int dev)
释放在内存中的i节点
inode->i_dev = inode->i_dirt = 0;

11. void sync_inodes(void)
同步内存中i节点与设备上i节点

12. static int _bmap(struct m_inode * inode,int block,int create)
返回该节点所在的逻辑块号,
create flag指, 如果不存在该逻辑块号, 则创建之(TRUE)
首先判断block的有效性
block >0 && 
block <=(7+512 + 512 * 512)
if (block <7) 
return inode->i_zone[block];

block-=7
bh=bread(inode->i_dev, inode->i_zone[7]);
return ((unsigned short *) (bh->b_data))[block];


13. int bmap(struct m_inode * inode,int block)
{
return _bmap(inode,block,0);
}
block 对应的逻辑块号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值