Linux kernel 在ubuntu下修改ext2内核模块时,一些警告被视为错误

Linux kernel 在ubuntu下修改ext2内核模块时,一些警告被视为错误,linux-kernel,filesystems,gcc-warning,Linux Kernel,Filesystems,Gcc Warning,我已经成功地制作了ext2的一个修改版本,称为myext2.ko,并对其进行了mount和umount等测试;当我将以下代码添加到fs/myext2/file.c中并尝试实现一个简单的加密函数(即,对读入字符串的最后一位求反)时,就会出现问题: ssize_t my_new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) { struct iovec iov; //change

我已经成功地制作了ext2的一个修改版本,称为myext2.ko,并对其进行了mount和umount等测试;当我将以下代码添加到fs/myext2/file.c中并尝试实现一个简单的加密函数(即,对读入字符串的最后一位求反)时,就会出现问题:

ssize_t my_new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
{
    struct iovec iov; //changed
    struct kiocb kiocb;
    struct iov_iter iter;
    ssize_t ret;
    //inserted by adward - begin
    size_t i;
    char buff[len];
    for (i=0;i<len;i++){
        buff[i] = buf[i] ^ 1;
    }
    iov.iov_base = (void __user *)buff;
    iov.iov_len = len;
    printk("Inside my_new_sync_write");
    //inserted by adward - end
    init_sync_kiocb(&ki_nbytesocb, filp);
    kiocb.ki_pos = *ppos;
    kiocb.ki_nbytes = len;
    iov_iter_init(&iter, WRITE, &iov, 1, len);

    ret = filp->f_op->write_iter(&kiocb, &iter);
    if (-EIOCBQUEUED == ret)
        ret = wait_on_sync_kiocb(&kiocb);
    *ppos = kiocb.ki_pos;
    return ret;
}

ssize_t my_new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
{
    struct iovec iov = { .iov_base = buf, .iov_len = len };
    struct kiocb kiocb;
    struct iov_iter iter;
    ssize_t ret;

    //inserted by adward - begin
    size_t i;
    //inserted by adward - end
    init_sync_kiocb(&kiocb, filp);
    kiocb.ki_pos = *ppos;
    kiocb.ki_nbytes = len;
    iov_iter_init(&iter, READ, &iov, 1, len);

    ret = filp->f_op->read_iter(&kiocb, &iter);
    if (-EIOCBQUEUED == ret)
        ret = wait_on_sync_kiocb(&kiocb);
    *ppos = kiocb.ki_pos;

    //inserted by adward - begin
    for (i=0;i<len;i++){
        buf[i] ^= 1;
    }
    printk("inside my_new_sync_read");
    //inserted by adward - end

    return ret;
}

有没有人做过类似的事情,遇到过这样的问题?如果我做错了什么,请通知我,谢谢。

以前遇到过同样的错误。U应该添加,因为ext2使用异步IO读取/写入文件。 希望这有助于:

const struct file_operations myext2_file_operations = {
.llseek     = generic_file_llseek,
.read       = new_sync_read, //want to replace with my_new_sync_read
.write      = new_sync_write, //want to replace with my_new_sync_write
...
}