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

  • 相关阅读:
    ASP.NET CORE3.0 API Swagger+IdentityServer4授权验证
    Ubuntu16.04安装RabbitMq并设置用户
    使用sql实现表90度旋转(矩阵转置)
    HDWiKi新架设网站打开慢原因排查1.4秒→0.03秒
    手机端网页设置了csswidth:100%,但不能显示完整的问题
    SQL Server 2008 收缩日志
    MSSQL查看一个数据库中所有表的行数
    那就简单说说这个服务器吧,题外话。
    win7单独安装php
    css兼容写法
  • 原文地址:https://www.cnblogs.com/acesyp/p/146108.html
Copyright © 2011-2022 走看看