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结构?

  • 相关阅读:
    设计模式(三):装饰模式
    实战pythoninstagram
    设计模式(二):观察者模式
    instagram 的api研究
    设计模式(四):代理模式
    设计模式(五):工厂模式
    qq微博oauth认证记录
    js 处理json数据记录
    17Django高级之Auth
    20Django高级之信号
  • 原文地址:https://www.cnblogs.com/acesyp/p/146108.html
Copyright © 2011-2022 走看看