zoukankan      html  css  js  c++  java
  • 达到极限了

    人的接受能力果然是有限的。昨天一天没看进去什么东西。这几天正好要去INFOCOM展会做兼职报道,顺便换换脑子。如果精力有剩余的话我会继续。

    现在需要解决的问题是fist生成的代码里面有一个hidden_dentry。在每个dentry,inode和file的操作函数里都有这么一句:
    dentry_t *hidden_dentry;
    hidden_dentry = smallfs_hidden_dentry(dentry)

    dentry_t就是dentry结构。把第二句代码追溯一下:
    #  define smallfs_hidden_dentry(dentry) dtohd(dentry)
    # define dtohd(dent) (dtopd(dent)->wdi_dentry)
    # define dtopd(dentry) ((struct smallfs_dentry_info *)(dentry)->d_fsdata)

    把宏做置换最后得到的结果是:
    ((struct smallfs_dentry_info *)(dentry)->d_fsdata)->wdi_dentry

    smallfs_dentry_info 的定义是:
    struct smallfs_dentry_info {
        dentry_t *wdi_dentry;
    };

    这段代码的含义没能看懂。昨天想了一阵子没想出个所以然来。相应的在inode操作里面也有一个hidden_inode的概念,和hidden_dentry几乎一摸一样,就不列举了。看一下实际的函数:
    (smallfs/dentry.c,smallfs是暂时取的,被feather称为可爱的名字……)
    smallfs_d_hash(dentry_t *dentry, qstr_t *name)
    {
        int err = 0;
        dentry_t *hidden_dentry;

        print_entry_location();
        hidden_dentry = smallfs_hidden_dentry(dentry); /* CPW: Moved to after print_entry_location */

        if (!hidden_dentry->d_op || !hidden_dentry->d_op->d_hash)
     goto out;

        err = hidden_dentry->d_op->d_hash(hidden_dentry, name);

     out:
        print_exit_status(err);
        return err;
    }

    谁能解释一下hidden_dentry在这里的作用。关键是定义的时候那一大串宏的目的是什么。


    我有一个猜测,在别的fs源码中,有为d_fsdata分配一个dentry结构的实例。(一个空指针为什么可以指向一个具体的fs实例?谁从理论上解释一下)。那么可能hidden_dentry结构中fs_data指向的是真实的dentry的位置。但是在FIST生成的那些源码里面没有找到关于任何d_fsdata的定义。而且为什么要先将d_fsdata转换成smallfs_dentry_info 再指向一个dentry结构?

  • 相关阅读:
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Vue.js项目部署在Tomcat服务器上
    Vue2.0 + ElementUI的+ PageHelper实现的表格分页
    mybatis中使用mysql的模糊查询字符串拼接(like)
    C++循环链表解决约瑟夫环问题
    Nginx源码分析-ngx_module_s结构体
    设计模式(一)工厂模式Factory(创建型)(转)
    网络编程--套接字选项(一)
    Linux阵列 RAID详解 (转)
    HDFS RAID实现方案(转)
  • 原文地址:https://www.cnblogs.com/acesyp/p/146108.html
Copyright © 2011-2022 走看看