挂载 VFS 错误:挂载:/fwd:错误的 fs 类型、错误的选项、/dev/loop0 上的超级块错误、缺少代码页或帮助程序或其他错误

如何解决挂载 VFS 错误:挂载:/fwd:错误的 fs 类型、错误的选项、/dev/loop0 上的超级块错误、缺少代码页或帮助程序或其他错误

我正在尝试在 Linux 中挂载 VFS,但它给了我这个错误

挂载:/fwd:错误的 fs 类型、错误的选项、/dev/loop0 上的超级块错误、缺少代码页或帮助程序或其他错误。

看起来它给我的错误是我弄乱了我的超级块结构。

sudo demsg output

[25665.303994] 坏幻数

[25665.303998] 读取 buffer_head 时出错

[25665.303998] 坏块大小

我安装了 abc# mount test_###.ko /fwd 模块完整代码如下

    #include <linux/init.h>
    #include <linux/fs.h>
    #include <linux/pagemap.h>
    #include <linux/highmem.h>
    #include <linux/time.h>
    #include <linux/string.h>
    #include <linux/backing-dev.h>
    #include <linux/ramfs.h>
    #include <linux/sched.h>
    #include <linux/parser.h>
    #include <linux/magic.h>
    #include <linux/slab.h>
    #include <asm/uaccess.h>
    #include <linux/proc_fs.h>
    #include <linux/pci.h>

    #define RAMFS_DEFAULT_MODE  0755


    /*
    int pci_mmap_fits(struct pci_dev *pdev,int resno,struct vm_area_struct *vma,enum pci_mmap_api mmap_api);*/
    extern ssize_t generic_file_splice_write(struct pipe_inode_info *,struct file *,loff_t *,size_t,unsigned int);
    extern ssize_t do_sync_write(struct file *filp,const char __user *buf,size_t len,loff_t *ppos);
    const struct address_space_operations ramfs_aops = {
        .readpage   = simple_readpage,.write_begin    = simple_write_begin,.write_end  = simple_write_end,};

    const struct file_operations ramfs_file_operations = {

        .read   = generic_read_dir,.mmap       = generic_file_mmap,.fsync      = noop_fsync,.llseek     = generic_file_llseek,};

    const struct inode_operations ramfs_file_inode_operations = {
        .setattr    = simple_setattr,.getattr    = simple_getattr,};

    static const struct super_operations ramfs_ops;
    static const struct inode_operations ramfs_dir_inode_operations;

    static struct backing_dev_info ramfs_backing_dev_info = {
        .name       = "ramfs",.ra_pages   = 0,/* No readahead */
        .capabilities   = NOMMU_MAP_DIRECT | NOMMU_MAP_COPY |
                      NOMMU_MAP_READ     | NOMMU_MAP_EXEC    | NOMMU_MAP_WRITE,};
    //*************************************************Functons*************************************************************

    enum pci_mmap_api {
        PCI_MMAP_SYSFS,//mmap on /sys/bus/pci/devices/<BDF>/resource<N>
        PCI_MMAP_PROCFS  //mmap on /proc/bus/pci/<BDF>
    };
    int pci_mmap_fits(struct pci_dev *pdev,struct vm_area_struct *vmai,enum pci_mmap_api mmap_api);
    struct pci_filp_private {
        enum pci_mmap_state mmap_state;
        int write_combine;
    };

    static int proc_bus_pci_mmap(struct file *file,struct vm_area_struct *vma)
    {
        struct pci_dev *dev = PDE_DATA(file_inode(file));
        struct pci_filp_private *fpriv = file->private_data;
        int i,ret;

        if (!capable(CAP_SYS_RAWIO))
        return -EPERM;

        /* Make sure the caller is mapping a real resource for this device */
        for (i = 0; i < PCI_ROM_RESOURCE; i++) {
        if (pci_mmap_fits(dev,i,vma,PCI_MMAP_PROCFS))
            break;
        }

        if (i >= PCI_ROM_RESOURCE)
        return -ENODEV;
        int bars = pci_select_bars(dev,IORESOURCE_MEM);
      /*  ret = pci_mmap_page_range(dev,bars,fpriv->mmap_state,fpriv->write_combine);
      */  if (ret < 0)
        return ret;

        return 0;
    }
    struct inode *ramfs_get_inode(struct super_block *sb,const struct inode *dir,umode_t mode,dev_t dev)
    {
        struct inode * inode = new_inode(sb);

        if (inode) {
        inode->i_ino = get_next_ino();
        inode_init_owner(inode,dir,mode);
        inode->i_mapping->a_ops = &ramfs_aops;

        mapping_set_gfp_mask(inode->i_mapping,GFP_HIGHUSER);
        mapping_set_unevictable(inode->i_mapping);
        /*inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;*/
        switch (mode & S_IFMT) {
            default:
            init_special_inode(inode,mode,dev);
            break;
            case S_IFREG:
            inode->i_op = &ramfs_file_inode_operations;
            inode->i_fop = &ramfs_file_operations;
            break;
            case S_IFDIR:
            inode->i_op = &ramfs_dir_inode_operations;
            inode->i_fop = &simple_dir_operations;

            /* directory inodes start off with i_nlink == 2 (for "." entry) */
            inc_nlink(inode);
            break;
            case S_IFLNK:
            inode->i_op = &page_symlink_inode_operations;
            break;
        }
        }
        return inode;
    }

    /*
     * File creation. Allocate an inode,and we're done..
     */
    /* SMP-safe */
    static int
    ramfs_mknod(struct inode *dir,struct dentry *dentry,dev_t dev)
    {
        struct inode * inode = ramfs_get_inode(dir->i_sb,dev);
        int error = -ENOSPC;

        if (inode) {
        d_instantiate(dentry,inode);
        dget(dentry);   /* Extra count - pin the dentry in core */
        error = 0;
        /*dir->i_mtime = dir->i_ctime = CURRENT_TIME;*/
        }
        return error;
    }

    static int ramfs_mkdir(struct inode * dir,struct dentry * dentry,umode_t mode)
    {
        int retval = ramfs_mknod(dir,dentry,mode | S_IFDIR,0);
        if (!retval)
        inc_nlink(dir);
        return retval;
    }

    static int ramfs_create(struct inode *dir,bool excl)
    {
        return ramfs_mknod(dir,mode | S_IFREG,0);
    }

    static int ramfs_symlink(struct inode * dir,const char * symname)
    {
        struct inode *inode;
        int error = -ENOSPC;

        inode = ramfs_get_inode(dir->i_sb,S_IFLNK|S_IRWXUGO,0);
        if (inode) {
        int l = strlen(symname)+1;
        error = page_symlink(inode,symname,l);
        if (!error) {
            d_instantiate(dentry,inode);
            dget(dentry);
            /*dir->i_mtime = dir->i_ctime = CURRENT_TIME;*/
        } else
            iput(inode);
        }
        return error;
    }

    static const struct inode_operations ramfs_dir_inode_operations = {
        .create     = ramfs_create,.lookup     = simple_lookup,.link       = simple_link,.unlink     = simple_unlink,.symlink    = ramfs_symlink,.mkdir      = ramfs_mkdir,.rmdir      = simple_rmdir,.mknod      = ramfs_mknod,.rename     = simple_rename,};

    static const struct super_operations ramfs_ops = {
        .statfs     = simple_statfs,.drop_inode = generic_delete_inode,};

    struct ramfs_mount_opts {
        umode_t mode;
    };

    enum {
        Opt_mode,Opt_err
    };

    static const match_table_t tokens = {
        {Opt_mode,"mode=%o"},{Opt_err,NULL}
    };

    struct ramfs_fs_info {
        struct ramfs_mount_opts mount_opts;
    };

    static int ramfs_parse_options(char *data,struct ramfs_mount_opts *opts)
    {
        substring_t args[MAX_OPT_ARGS];
        int option;
        int token;
        char *p;

        opts->mode = RAMFS_DEFAULT_MODE;

        while ((p = strsep(&data,",")) != NULL) {
        if (!*p)
            continue;

        token = match_token(p,tokens,args);
        switch (token) {
            case Opt_mode:
            if (match_octal(&args[0],&option))
                return -EINVAL;
            opts->mode = option & S_IALLUGO;
            break;
            /*
             * We might like to report bad mount options here;
             * but traditionally ramfs has ignored all mount options,* and as it is used as a !CONFIG_SHMEM simple substitute
             * for tmpfs,better continue to ignore other mount options.
             */
        }
        }

        return 0;
    }

    int ramfs_fill_super(struct super_block *sb,void *data,int silent)
    {
        struct ramfs_fs_info *fsi;
        struct inode *inode;
        int err;



        fsi = kzalloc(sizeof(struct ramfs_fs_info),GFP_KERNEL);
        sb->s_fs_info = fsi;
        if (!fsi)
        return -ENOMEM;

        err = ramfs_parse_options(data,&fsi->mount_opts);
        if (err)
        return err;

        sb->s_maxbytes      = MAX_LFS_FILESIZE;
        sb->s_blocksize     = PAGE_SIZE;
        /*sb->s_blocksize_bits    = PAGE_CACHE_SHIFT;*/
        sb->s_magic     = RAMFS_MAGIC;
        sb->s_op        = &ramfs_ops;
        sb->s_time_gran     = 1;

        inode = ramfs_get_inode(sb,NULL,S_IFDIR | fsi->mount_opts.mode,0);
        sb->s_root = d_make_root(inode);
        if (!sb->s_root)
        return -ENOMEM;

        return 0;
    }

    struct dentry *ramfs_mount(struct file_system_type *fs_type,int flags,const char *dev_name,void *data)
    {
        return mount_nodev(fs_type,flags,data,ramfs_fill_super);
    }
    #define MS_NOUSER   (1<<31)
    static struct dentry *rootfs_mount(struct file_system_type *fs_type,flags|MS_NOUSER,ramfs_fill_super);
    }

    static void ramfs_kill_sb(struct super_block *sb)
    {
        kfree(sb->s_fs_info);
        kill_litter_super(sb);
    }

    static struct file_system_type ramfs_fs_type = {
        .name       = "ramfs3",.mount      = ramfs_mount,.kill_sb    = ramfs_kill_sb,.fs_flags   = FS_USERNS_MOUNT,};


    int __init init_ramfs_fs(void)
    {
        return register_filesystem(&ramfs_fs_type);
    }

    module_init(init_ramfs_fs)

    /*
    int __init init_rootfs(void)
    {
        int err;

        err = bdi_init(&ramfs_backing_dev_info);
        if (err)
        return err;

        err = register_filesystem(&rootfs_fs_type);
        if (err)
        bdi_destroy(&ramfs_backing_dev_info);

        return err;
    }




    */

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res