
文件系统
文章平均质量分 72
mindlesslcc
这个作者很懒,什么都没留下…
展开
-
linux内核Kmalloc分配内存需要注意的问题(GFP_KERNEL可能会造成内核调度错误)
kmallochttp://blog.chinaunix.net/u2/79914/showart_1905549.html#include Linux/slab.h> void *kmalloc(size_t size, int flags);给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc转载 2016-10-29 19:52:25 · 4006 阅读 · 0 评论 -
ext2文件系统源代码之xattr_user.c
我们继续看xattr_user.c这个文件,很简单。/* * linux/fs/ext2/xattr_user.c * user扩展属性处理函数 * * Copyright (C) 2001 by Andreas Gruenbacher, */#include #include #include #include "ext2.h"#include "xattr.h"原创 2016-03-25 21:04:10 · 1193 阅读 · 0 评论 -
ext2文件系统源代码之xattr_trusted.c
我们来看下xattr_trusted.c这个文件的代码/* * linux/fs/ext2/xattr_trusted.c * 信任的扩展属性处理代码 * * Copyright (C) 2003 by Andreas Gruenbacher, */#include #include #include #include #include #include "xatt原创 2016-03-25 21:03:17 · 1292 阅读 · 0 评论 -
ext2文件系统源代码之xattr.c
今天我们来看ext2的扩展属性的主要文件xattr.c,内部有扩展属性的最重要的代码实现,但是文件也真的很长,我们来开始吧。/* 作者版权信息 * linux/fs/ext2/xattr.c * * Copyright (C) 2001-2003 Andreas Gruenbacher * 被Harrison Xing修改过 * Fix by Harrison Xing . *原创 2016-03-25 21:02:09 · 2003 阅读 · 0 评论 -
ext2文件系统源代码之balloc.c文件解析
前面把ext2的acl.c和acl.h文件分析过了,今天来看一个比较重要的文件,就是balloc.c,这个文件是用来做块的分配方面工作的,在文件系统是属于较低层的,可能有点困难,我努力讲解的通俗一点,大家有什么问题欢迎提问啦。/* 作者方面的信息 * linux/fs/ext2/balloc.c * * Copyright (C) 1992, 1993, 1994, 1995 * R原创 2016-03-14 22:00:33 · 4195 阅读 · 0 评论 -
ext2文件系统源代码之acl.c
今天继续看ext2源代码的acl.c文件,这个文件代码有点多是一些acl权限控制的实现,有点麻烦-_-,代码注释都是中文的,大家有问题随时欢迎骚扰哦在分析之前,为了不让大家看代码的时候感到有疑惑,给大家科普一下acl结构体的posix实现和ext2实现。acl的基本我上节应该都说过了,然后我们来看一下posix实现,定义如下struct posix_acl { /*引用计数*/ ato原创 2016-03-13 21:48:32 · 1829 阅读 · 1 评论 -
ext2文件系统源代码之Makefile
大家好,最近我在看文件系统方面的东西,觉得基础的东西已经没问题了,所以今天我决定做一件对我自己来说比较有挑战性的事情,就是阅读ext2文件系统的源代码,以期能够真正初步完成ext2的理解,然后逐步理解ext3和ext4。先看Makefile文件,哈哈,万丈高楼平地起,一切从基础做起。打开linux内核的2.6.22版本源代码的fs/ext2目录,打开Makefile文件,如下##原创 2016-03-13 21:44:14 · 1770 阅读 · 0 评论 -
linux内核sys_open源代码分析
打开一个文件,是通过内核提供的系统调用sys_open来实现的,在用户空间的open函数会被编译器编译成为int 80的汇编代码,进入内核空间执行打开操作,我们来顺着内核的代码来看一下具体的实现过程。sys_open函数定义在fs/open.c文件,定义如下asmlinkage long sys_open(const char __user *filename, int flags, in原创 2016-03-13 21:41:35 · 12088 阅读 · 0 评论 -
linux内核file结构
linux内核中file结构体并不是物理上存在于硬盘上的,而是用于描述进程与文件的关系和操作的。每当进程打开一个文件的时候,linux内核就会建立一个file结构体,而task_struct里的指向file的链表就会添加一个已经打开的文件。文件定义在include/linux/fs.h,定义如下,为了方便观看,直接在代码里以注释格式解析。。struct file { /* * fu_原创 2016-02-27 10:17:13 · 1964 阅读 · 0 评论 -
ext2文件系统源代码之xattr_security.c
继续看ext2文件系统源代码里的最后一些文件,不过最主要的代码我们已经解决了,接下来的就是一些细小的事情了,我们来看xattr_security.c吧。/* * linux/fs/ext2/xattr_security.c * 存储security的扩展属性处理函数 */#include #include #include #include #include #inclu原创 2016-03-25 21:04:56 · 1516 阅读 · 0 评论 -
ext2文件系统源代码之inode.c
今天,我们来看ext2文件系统源代码里边最大的一个文件inode.c。在讲这个文件之前,我需要仙鹤大家说一个概念,就是间接块的概念,ext2文件系统在块大小为4096的时候可以支持的最大文件大小是4T大小,而ext2_inode结构体,就是ext2文件系统的inode在硬盘上的存储格式,__le32i_block[EXT2_N_BLOCKS];EXT2_N_BLOCKS是15,如果每一个指原创 2016-03-18 19:19:00 · 3865 阅读 · 0 评论 -
linux内核super_block结构分析
超级块代表了整个文件系统,超级块是文件系统的控制块,有整个文件系统信息,一个文件系统所有的inode都要连接到超级块上,可以说,一个超级块就代表了一个文件系统。super_block定义在include/linux/fs.h里,我们来看一看这个数据结构的定义struct super_block { struct list_head s_list; /* Keep this first原创 2016-02-27 10:15:35 · 8193 阅读 · 0 评论 -
ext4之super.c
super.c是ext4里非常重要的文件,挂载时候运行的代码基本上都在super.c里边,如果super.c有一点代码上的bug的话,那么一个块设备就不能被以ext4文件系统挂载。我在比较重要的地方都加了注释讲解,如果有认为我没写详细或者写错的朋友们欢迎指出。/* * linux/fs/ext4/super.c * * Copyright (C) 1992, 1993, 1994原创 2016-10-06 19:12:49 · 5101 阅读 · 0 评论 -
ext4之Makefile
看一个linux内核模块之前,首先要做的就是看Makefile,然后试看init和exit函数,我看ext4的代码看的第一个文件也是Makefile(除了内核文档),接下来我们看一看2.6.19内核的ext4的Makefile吧。## ext4模块的Makefile.#obj-$(CONFIG_EXT4DEV_FS) += ext4dev.oext4dev-y := b原创 2016-10-03 09:18:46 · 807 阅读 · 0 评论 -
ext4之内核文档
最近接触ext4比较多,所以就想着直接开一个博客专门是ext4的,一方面是为了系统的学习下ext4,另一方面也是做一个标记,以后如果还有用到的地方可以回来再看看,当然最重要的还是和广大的技术人员交流,如果能够帮助到一些人就更好了。ext4第一次发布是在linux-2.6.19的内核里,发展到现在,ext4的代码已经是非常巨大,我下载linux-4.7的内核代码一看,居然有50W lines,我原创 2016-10-02 09:39:32 · 3223 阅读 · 0 评论 -
e2fsprogs编译问题
今天需要编译e2fsprogs,遇到了问题,打印如下zoned.c:159: warning: 'struct bdev_zone_descriptor' declared inside parameter listzoned.c:159: warning: its scope is only this definition or declaration, which is probabl原创 2016-10-14 17:44:12 · 3341 阅读 · 0 评论 -
文件系统测试工具IOZONE
最近刚刚入职百度做存储工程师,感觉存储方面真的是博大精深,有很多需要学习的地方,平常比较忙,也就没时间更新博客了(虽然平时来看的人也不是很多。。)。最近发现了几款文件系统测试工具,和大家分享一下。这些都是测试文件系统的工具,而不是测试磁盘的工具。磁盘设备之上是文件系统,测试磁盘的工具往往就是调用驱动块设备驱动的接口进行读写测试。而文件系统的测试软件就是针对文件系统层提供的功能进行测试,包括文件原创 2016-09-04 09:38:11 · 3850 阅读 · 0 评论 -
linux内核container_of宏解析
在看linux内核的源代码的时候,经常会看到一个宏,就是container_of,它的作用是由一个结构体的成员指针得到这个结构体的指针。看的多了,就想搞明白这是怎么个东西,打开source insight一看,这个宏定义在include/linux/kernel.h这个头文件里边,打开一看,定义如下/** * container_of - cast a member of a structu原创 2016-02-26 09:00:23 · 1117 阅读 · 0 评论 -
linux内核哈希链表解析
哈希表的介绍 hlistlinux内核里边除了著名的list双向循环链表以外,还有一个重要的数据结构,就是哈希链表。哈希链表也在很多重要的地方有所使用,比如linux内核的dentry,进程查询,文件系统等,可以说,弄明白hlist对于理解linux内核具有重要的意义。数据结构的介绍struct hlist_head { struct hlist_node *first;};原创 2016-02-26 09:04:55 · 4508 阅读 · 0 评论 -
linux内核list解析
在linux内核里又有一个非常重要的数据结构,他就是双向循环链表list,定义在linux/list.h,这个数据结构可以说是linux内核中使用最广泛的数据结构了,list的理解对于我们阅读和理解内核有重大的意义,接下来我们一起看一下list.h,看一下这个神奇的数据结构吧。首先看一下这个数据结构的定义struct list_head { struct list_head *next,原创 2016-02-26 09:11:26 · 1825 阅读 · 0 评论 -
linux内核inode结构
inode是linux内核的文件系统里边最重要的数据结构,可以说,一个inode就代表了一个文件,inode结构体保存了文件的大小,创建时间,文件的块大小等各种参数,一个文件可以有多个dentry,因为在linux里由于软连接,硬连接的存在,指向一个文件的路径可能有多个,但是一个文件的inode只能有一个,一般在文件系统里氛围inode区和数据区,而inode区的大小能占到10%左右。inod原创 2016-02-27 10:16:30 · 5716 阅读 · 0 评论 -
linux内核dentry结构分析
dentry,即directory entry,目录项,就是多个文件或者目录的链接,通过这个链接可以找寻到目录之下的文件或者是目录项。dentry在文件系统里是极其重要的一个概念,dentry结构体在linux内核里也是用处广泛,这个结构体定义在include/linux/dcache.h里,我们来看一下结构体的定义。struct dentry { atomic_t d_count; un原创 2016-02-27 10:14:14 · 11801 阅读 · 0 评论 -
linux内核read操作源代码分析
read操作是任何操作系统里的基本操作,我们来看一下在linux内核里,read文件是怎样实现的。read函数在用户空间是由read系统调用实现的,由编译器编译成软中断int 0x80来进入内核空间,然后在中端门上进入函数sys_read,从而进入内核空间执行read操作。sys_read函数定义在fs/read_write.c文件,定义如下asmlinkage ssize_t sys原创 2016-03-06 09:08:55 · 9882 阅读 · 2 评论 -
linux内核权限控制之vfs_permission分析
在linux文件系统的各种操作里,很重要的一个东西就是权限控制,我们来一起追溯内核源代码,弄清楚内核的权限之谜。在VFS(linux虚拟文件系统)里,权限控制都是通过vfs_permission来实现的,我们从vfs_permission来看,vfs_permission函数定义在fs/namei.c,定义如下int vfs_permission(struct nameidata *nd,原创 2016-03-06 09:03:38 · 3074 阅读 · 0 评论 -
ext2文件系统源代码之ialloc.c
今天我们来看一个和inode的分配有关的文件,ialloc.c,这个文件有点大,做好准备哦。我们开始吧/* 文件作者,又是他,看来ext2文件系统的code都是他写的 * linux/fs/ext2/ialloc.c * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) * Laborat原创 2016-03-17 22:47:49 · 1624 阅读 · 0 评论 -
ext2文件系统源代码之fsync.c
今天我们来看ext2文件系统里的一个和文件数据同步有关的文件fsync.c,这个文件的代码是文件在内存里的数据和硬盘上不一样的时候,采取数据同步时需要采用的。那就开始吧/*作者和版权信息 * linux/fs/ext2/fsync.c * * Copyright (C) 1993 Stephen Tweedie (sct@dcs.ed.ac.uk) * from * C原创 2016-03-16 15:11:53 · 1632 阅读 · 0 评论 -
ext2文件系统源代码之file.c
今天我们继续来看ext2文件系统的另一个比较重要的文件file.c,这个文件比较短,但是却很重要,定义了一些与文件操作有关的结构体,我们来看看吧。/*作者版权信息 * linux/fs/ext2/file.c * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) * Laboratoire M原创 2016-03-16 15:10:53 · 1771 阅读 · 0 评论 -
ext2文件系统源代码之ext2.h
今天,我们看一下ext2文件系统源代码里面的ext2.h文件,这是一个头文件,里边都是一些函数的声明和一些结构体的定义,很多引用ext2的函数的地方都需要包含这个头文件,所以这个头文件用处是很广泛的,但是这个文件很简单,并且还很短,这就让我们理解变得很轻松了。#include #include /*ext2挂载选项结构体*/struct ext2_mount_options { /原创 2016-03-16 15:09:21 · 3079 阅读 · 0 评论 -
ext2文件系统源代码之acl.h
今天看一下ext2文件系统源代码的acl.h文件的源代码,这个文件的源代码并不长,不到一百行,注释我都用中文的,希望大家理解应该没有问题,有什么问题欢迎骚扰哦。首先我想说一下什么是acl,之前的linux系统对于文件的权限管理都是9位的管理方式,user,group,other各三位,分别是rwx,读写执行三个权限,但是后来发现这种方式有缺陷,所以呢,访问控制列表ACL就应运而生。比如us原创 2016-03-13 21:47:10 · 1996 阅读 · 0 评论 -
ext2文件系统源代码之dir.c
今天我们来看ext2源代码的dir.c文件,这个文件是做和目录有关的操作的,也是很重要的一个文件,大家认真看哦,有什么和我不一致的大家一起探讨~~在讲这个之前我觉得还是先说下ext2文件系统的目录方面的基础比较好,这样会更容易看明白。ext2文件系统分为inode和block,inode是索引,block是数据块,那我们怎么定义目录呢?其实,目录其实也是文件的一种,只不过是目录的内容是目录原创 2016-03-15 21:45:43 · 3780 阅读 · 3 评论 -
ext2文件系统源代码之ioctl.c
今天,我来说一个ext2文件系统源代码里比较简单的一个文件,ioctl.c,里边是做一些对于硬件设备的io指令相关的文件,一般来说,硬件设备的ioctl应该是极其复杂的文件,但是由于这里是ext2,是文件系统层,所以对于ioctl的操作不是很多。好啦,我们开始看吧。/* 日常作者,还是那个人 * linux/fs/ext2/ioctl.c * * Copyright (C) 1993,原创 2016-03-20 11:23:49 · 1753 阅读 · 0 评论 -
ext2文件系统源代码之namei.c
我们继续来看ext2文件系统源代码里的namei.c文件,这个文件的代码主要是文件名查找之类的操作函数,并不是很难。/* * linux/fs/ext2/namei.c * * The only non-static object here is ext2_dir_inode_operations. * * 作者信息 * Copyright (C) 1992, 1993, 1994原创 2016-03-20 11:24:58 · 2799 阅读 · 1 评论 -
ext2文件系统源代码之super.c
今天来看一个ext2文件系统里的super.c文件,这个文件的内容是文件系统里的超级块的相关函数,对于文件系统有很大的重要性,并且这个文件也很长,好啦,我们开始看吧。/* 日常作者信息 * linux/fs/ext2/super.c * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) * L原创 2016-03-20 20:05:58 · 2682 阅读 · 0 评论 -
linux内核umount源代码分析
之前我们讲过mount的内核源代码,今天我们来一起看一下umount系统调用的内核源代码实现吧。首先看sys_umount函数,定义在fs/namespace.c,定义如下asmlinkage long sys_umount(char __user * name, int flags){ struct nameidata nd; int retval; /*之前讲过的,格局传入的路原创 2016-03-12 11:09:55 · 3877 阅读 · 0 评论 -
linux内核setuid分析
最近在看linux内核文件系统的代码,发现有关权限管理的代码好多,最近索性一次性解决,一劳永逸。我们先看一个我们在用户空间经常使用的一个setuid函数,这个函数就是变更当前进程的uid,对应的内核函数首先是sys_setuid,这个函数定义在kernel/sys.c,定义如下asmlinkage long sys_setuid(uid_t uid){ /*保存以前的euid,就是有效原创 2016-03-11 16:09:37 · 2610 阅读 · 0 评论 -
linux内核capable源代码分析
linux内核里对于进程的权限管理有一个很重要的函数capable,以前看了好多遍,今天下决心搞定他,也在此立下一个碑,以后有谁想搞明白他的话,我还可以提供一些帮助。capable函数定义在kernel/capability.c,作用是检验当前进程有没有相应的权限,定义如下int capable(int cap){ return __capable(current, cap);}原创 2016-03-11 16:08:26 · 6762 阅读 · 0 评论 -
linux内核follow_link分析
在linux内核文件系统源代码里,有一个很重要的函数,就是do_follow_link函数,这个函数对应着用户空间的软链接文件的索引操作,有着很广泛的应用,我们今天来看一下他的来龙去脉。首先我们从vfs_follow_link函数看起,vfs_follow_link函数定义在fs/namei.c,定义如下int vfs_follow_link(struct nameidata *nd, c原创 2016-03-11 16:07:02 · 2450 阅读 · 0 评论 -
ext2文件系统之ext2_lookup函数源代码分析
之前我们讲过vfs虚拟文件系统的lookup文件查找的实现,知道当内核的缓存没有找到的时候,就会调用到inode_operations结构体的lookup函数来实现,我们今天以ext2文件系统为例,来讲解一下对应文件系统的lookup函数的实现。首先ext2的inode_operation结构体定义在ext2/namei.c,定义如下const struct inode_operation原创 2016-03-08 22:03:30 · 3935 阅读 · 0 评论 -
linux内核之chdir分析
今天我们看一些在linux系统里边经常使用的cd命令对应的内核实现,就是sys_chdir函数的实现。sys_chdir函数在fs/open.c里,定义如下asmlinkage long sys_chdir(const char __user * filename){ /*路径名查找函数*/ struct nameidata nd; int error; /*之前我们分析过,根据原创 2016-03-10 21:55:25 · 2992 阅读 · 0 评论 -
ext2文件系统源代码之xattr.h
今天我们开始看ext2文件系统里的另一个重要的东西,就是扩展文件属性,我们首先看它的头文件定义xattr.h/* File: linux/ext2_xattr.h On-disk format of extended attributes for the ext2 filesystem. (C) 2001 Andreas Gruenbacher, */#includ原创 2016-03-21 12:32:19 · 1399 阅读 · 0 评论