acesyp

导航

达到极限了

人的接受能力果然是有限的。昨天一天没看进去什么东西。这几天正好要去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结构?

posted on 2005-04-27 09:42  AceSYP  阅读(1324)  评论(2编辑  收藏  举报