浅尝辄止59-FAT32-内核1

上一篇分析了vfat(FAT系列文件系统在Linux系统中的名字)自身的一些信息,这一篇看看这些信息给了谁,那就得看register_filesystem里面了。

文件系统注册

注册过程离不开kernel/fs/filesystems.c里面的一些东西。

static struct file_system_type *file_systems;

file_systems是一个struct file_system_type类型的指针变量,这个类型和vfat的身份信息类型是同一个哦。这个类型定义在kernel/include/linux/fs.h里面,请额外注意一下struct file_system_type * next;这个成员(没错,它是个单向链表),下面要用。

struct file_system_type {
    const char *name;
    int fs_flags;
    //...
    void (*kill_sb) (struct super_block *);
    struct module *owner;
    struct file_system_type * next;
    //...
};

下面这个函数就是在遍历由file_systems开始的链表了。

  • 如果file_systems为空,就返回file_systems的地址
  • 如果file_systems为空,就返回链表的尾节点的next成员的地址

注意,上面两点都是返回指针的地址,不是返回指针值哦

static struct file_system_type **find_filesystem(const char *name, unsigned len)
{
    struct file_system_type **p;
    for (p=&file_systems; *p; p=&(*p)->next)
        if (strlen((*p)->name) == len &&
            strncmp((*p)->name, name, len) == 0)
            break;
    return p;
}

这里回到我们最初的问题——如何注册文件系统?下面这个函数就是把新文件系统的struct file_system_type变量接到以file_systems为首的链表尾部

int register_filesystem(struct file_system_type * fs)
{
    struct file_system_type ** p;
    //...
    p = find_filesystem(fs->name, strlen(fs->name));
    if (*p)
        res = -EBUSY;
    else
        *p = fs;
    //...
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,983评论 0 3
  • 进程 创建 创建进程用fork()函数。fork()为子进程创建新的地址空间并且拷贝页表。子进程的虚拟地址空间...
    梅花怒阅读 6,054评论 0 7
  • 【倔强的肥宅】本来我自己是打算随便吃点,但是我两个朋友非要一起吃。我想了想既然是晚饭,就将就吃点。弄几个开胃小食搭...
    鬼牧公子阅读 1,409评论 0 0
  • 世界上每个人都有害怕的东西,而害怕的东西不仅仅是一种物体,也是一种感觉。 就像有人怕蜘蛛、蛇、蝎子...
    逐梦之新阅读 1,697评论 0 3
  • 今天一觉睡到11:00多才睁眼,起来磨蹭了一会儿,叫了外卖,到1:00才吃好饭。 吃完饭做了一壶咖啡,虽然有了困意...
    炬焱阅读 1,252评论 1 1

友情链接更多精彩内容