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. 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 对应的逻辑块号