Ant*_*ony 6 c filesystems ext2 linux-kernel
对于大学分配,我们必须修改ext2文件系统,以便在文件小于60字节时将文件存储在inode的块指针中,并在文件大于此时移动到常规块存储.
我从2.6 linux内核源代码(按照指示)复制了ext2代码并从那里开始.
当文件增长超过60个字节时,我需要将当前在inode的块指针数组中的任何数据复制到实际块中.所以,我需要将内核内存写入ext2块.一个简单的调用do_sync_write将无法在这里工作,因为它需要用户空间内存.
我已经看过了实现,do_sync_write并且我不确定如何复制它的功能,而是使用内核内存.
这是我当前对此特定部分的实现(不起作用):
ssize_t extmod_write(struct file *filp, const char *buf,
size_t len, loff_t *ppos)
{
...
printk(KERN_INFO "Switching to regular file");
temp = kmalloc(inode->i_size, GFP_KERNEL);
memcpy(temp, EXT2_I(inode)->i_data, inode->i_size);
/* Need to clear the block pointers before they are allocated by kernel */
memset(EXT2_I(inode)->i_data, 0, sizeof(EXT2_I(inode)->i_data));
if (do_sync_write(filp, temp, inode->i_size, &dummy) < 0) {
printk(KERN_INFO "DAMN! Writing current buffer failed");
return -EINVAL;
}
kfree(temp);
return do_sync_write(filp, buf, len, ppos);
Run Code Online (Sandbox Code Playgroud)
编辑:
我查看了符号链接.基本上,ext2具有"快速符号链接"的概念; 即链接名称长度小于60个字节.如果它是一个快速符号链接,则数据存储在块指针中.这很容易做到,我已经为常规文件实现了这一点.如果链接不是快速符号链接,则数据的处理方式与常规文件相同.我想我已经回到了原点.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |