[virtual system file] sget函数解析
来源:互联网 发布:怎样登录淘宝联助手 编辑:程序博客网 时间:2024/06/15 17:50
struct super_block *sget(struct file_system_type *type,int (*test)(struct super_block *,void *),int (*set)(struct super_block *,void *),int flags,void *data) /* find or create a superblock */{struct super_block *s = NULL;struct super_block *old;int err;retry:spin_lock(&sb_lock);if (test) {/* 该if语句,用于搜索type->fs_supers链表是否有需求的super_block实例,如果有则返回该实例,如果没有退出该if */hlist_for_each_entry(old, &type->fs_supers, s_instances) {if (!test(old, data))continue;if (!grab_super(old))goto retry;if (s) {up_write(&s->s_umount);destroy_super(s);s = NULL;}return old;}}if (!s) {spin_unlock(&sb_lock);s = alloc_super(type, flags);/* 分配一个super_block的实例,并对其成员初始化 */if (!s)return ERR_PTR(-ENOMEM);goto retry;}err = set(s, data);/* 关联super_block与data */if (err) {spin_unlock(&sb_lock);up_write(&s->s_umount);destroy_super(s);return ERR_PTR(err);}s->s_type = type;strlcpy(s->s_id, type->name, sizeof(s->s_id));list_add_tail(&s->s_list, &super_blocks);hlist_add_head(&s->s_instances, &type->fs_supers); /* 将super_block添加到type->fs_supers的hash链表 */spin_unlock(&sb_lock);get_filesystem(type);register_shrinker(&s->s_shrink);return s;}EXPORT_SYMBOL(sget);
总结:sget是在@type的fs_supers链表中找是否与@data相匹配的super_block实例,通过@test方法,如果找到直接返回该实例;如果没有找到则通过alloc_super方法申请一个新的super_block实例,并将该实例用@set方法与@data关联起来与进一步的初始化,并将该实例添加到super_blocks链表和@type->fs_supers链表中,然后返回该实例。
0 0
- [virtual system file] sget函数解析
- The "Virtual File System" in Linux
- 关于sqlite的virtual file system层的编写
- linux下system () 函数解析
- nodejs File System 文件系统操作函数分类
- nodejs File System 文件系统操作函数分类
- GT4 开发:将 GridFTP 与 Jakarta Commons Virtual File System 集成在一起
- GT4 开发:将 Storage Resource Broker 与 Jakarta Commons Virtual File System 集成在一起
- Windows NT File System Internals----Chapter 5 The NT Virtual Memory Manage
- file system
- file system
- File system
- include file和virtual
- #include virtual&file
- virtual函数
- virtual函数
- virtual函数
- R语言:system.file()函数中文帮助文档(中英文对照)
- 为 armhf 版本Ubuntu 14.04 系统增加Flash和Netflix支持
- lecture 进口和创新
- Android 开发系列5 使用netty
- 三角函数之间的转换公式
- 穿越冰冷的科技,语音交互之下的爱情——电影《her》
- [virtual system file] sget函数解析
- jquery attr和css属性
- protobuf简介
- JSP中的TAG
- SVN clean Up 失败处理方法
- 寻找IP的命令行方法!
- Objective-C第六版第12章----Preprocessor
- 判断点是否在多边形内的算法
- c#获取计算机制造商信息