- 博客(17)
- 资源 (5)
- 收藏
- 关注
原创 Linux那些事儿之我是Block层(10)scsi命令的前世今生(四)
当然,while循环结束也可能是因为1453行的这两个判断.首先req如果没有了,另一个得看scsi_dev_queue_ready()的返回值,如果返回值为0,那么break也会被执行,从而结束循环. 1270 /* 1271 * scsi_dev_queue_ready: if we can send requests to sdev, return 1 else
2007-12-25 20:04:00 9899
原创 Linux那些事儿之我是Block层(9)scsi命令的前世今生(三)
下一个更为重要的函数是scsi_dispatch_cmd,来自drivers/scsi/scsi.c: 459 /* 460 * Function: scsi_dispatch_command 461 * 462 * Purpose: Dispatch a command to the low-level driver. 4
2007-12-25 19:58:00 7187
原创 Linux那些事儿之我是Block层(8)scsi命令的前世今生(二)
一旦这种狼狈为奸的关系建立好了,就可以开始执行请求了.来看blk_execute_rq(),来自block/ll_rw_blk.c: 2605 /** 2606 * blk_execute_rq - insert a request into queue for execution 2607 * @q: queue to insert the re
2007-12-25 15:19:00 10863
原创 Linux那些事儿之我是Block层(7)scsi命令的前世今生(一)
现在我们块设备也有了,队列也有了,要提交请求也就可以开始提交了.那就让我们来研究一下如何提交请求如何处理请求吧.不过哥们儿有言在先,出错处理的那些乱七八糟的代码咱们就不理睬了.仍然以scsi磁盘举例,最初scsi这边发送的是scsi命令,可是从block走就得变成request,然而走到usb-storage那边又得变回scsi命令.换言之,这整个过程scsi命令要变两次身.首先让我们从s
2007-12-25 15:03:00 10179 2
原创 Linux那些事儿之我是Block层(6)浓缩就是精华?(三)
第三个,blk_register_queue(). 4079 int blk_register_queue(struct gendisk *disk) 4080 { 4081 int ret; 4082 4083 request_queue_t *q = disk->queue; 4084 4085
2007-12-20 15:30:00 7901
原创 Linux那些事儿之我是Block层(5)浓缩就是精华?(二)
第二个,register_disk,来头不小,它来自遥远的fs/partitions/check.c: 473 /* Not exported, helper to add_disk(). */ 474 void register_disk(struct gendisk *disk) 475 { 476 struct block_devi
2007-12-19 20:21:00 10799
原创 Linux那些事儿之我是Block层(4)浓缩就是精华?(一)
人,生在床上,死在床上;欲生欲死,还是在床上.这句话非常有道理.有人说它有点俗,但,我并不这么认为.我因为经常坐在床上一边看A片一边看代码,所以对这句话体会颇深,事实上它形象的描述了我坐在床上看代码时复杂的心情,说欲生欲死,一点也不夸张,尤其是当我看到add_disk()这个无比变态的函数的时候.我不禁感慨,上帝欲使人灭亡,必先使其疯狂;上帝欲使人疯狂,必先使其看Linux内核代码.
2007-12-19 15:34:00 9810 3
原创 Linux那些事儿之我是Block层(3)驱动不过一出戏,内存申请为哪般?
下一个函数,alloc_disk().在sd.c中咱们传递进来的参数是16. 720 struct gendisk *alloc_disk(int minors) 721 { 722 return alloc_disk_node(minors, -1); 723 } 724 725 struct gendisk *al
2007-12-19 14:42:00 8216
原创 Linux那些事儿之我是Block层(2)注册一个块设备驱动
看完了block子系统的初始化之后,我曾一度迷茫过,也曾辗转反侧,也曾苦恼万分,我完全不知道下一步该怎么走,几经思索,思索着我和中国的未来,徘徊过后,彷徨过后,终于决定,和scsi disk驱动同步进行往下走,因为scsi disk那边会调用许多block层这边提供的函数,于是我们就在这边来看看这些函数究竟是干什么的.第一个函数当然就是register_blkdev(). 55
2007-12-19 14:09:00 7833 1
原创 Linux那些事儿之我是Block层(1)Block子系统的初始化
于是我们从genhd_device_init()开始看起. 350 static int __init genhd_device_init(void) 351 { 352 int err; 353 354 bdev_map = kobj_map_init(base_probe, &block_subsys_loc
2007-12-12 16:07:00 12334 3
原创 Linux那些事儿之我是SCSI硬盘(6)三座大山(三)
接下来,第三座大山是sd_read_cache_type. 1385 /* 1386 * sd_read_cache_type - called only from sd_revalidate_disk() 1387 * called with buffer of length SD_BUF_SIZE 1388 */ 1389 static voi
2007-12-10 18:55:00 11985 5
原创 Linux那些事儿之我是SCSI硬盘(5)三座大山(二)
第二座大山,sd_read_write_protect_flag. 1327 /* 1328 * read write protect setting, if possible - called only in sd_revalidate_disk() 1329 * called with buffer of length SD_BUF_SIZE 1330
2007-12-10 18:48:00 11938 1
原创 Linux那些事儿之我是Block层(引子)
很久以前,天还是蓝的,水也是绿的,庄稼是长在地里的,猪肉是可以放心吃的,耗子还是怕猫的,法庭是讲理的,上床是先结婚的,理发店是只管理发的,药是可以治病的,医生是救死扶伤的,拍电影是不需要陪导演睡觉的,照相是要穿衣服的,欠钱是要还的,孩子的爸爸是明确的,学校是不图挣钱的,白痴是不能当教授的,卖狗肉是不能挂羊头的,男就是男的女的就是女的.那时候Block层还是一部分附属于drivers/目录下一部分附
2007-12-10 18:31:00 11122 4
原创 Linux那些事儿之我是SCSI硬盘(3)磁盘磁盘你动起来!
首先我们看sd_revalidate_disk(),这个函数很重要,一定程度上来说,正是这个函数从硬件和软件两个方面掀起了我们了解scsi磁盘的性高潮.这个函数它不是一个函数在战斗,它完全是贾宝玉林黛玉方世玉附体,由这一个函数可以牵连出N个函数.而这N个函数中的一些函数本身又有好几百行,所以我们算是陷进去了. 1496 /** 1497 * sd_revalidat
2007-12-07 14:29:00 11976
原创 Linux那些事儿 之 我是PCI(5)初始化(二)
.initcall2.init子节中的两个函数已经见识过了,该轮到.initcall3.init子节里的了,就是上边儿表中的acpi_pci_init和pci_access_init,这两个又是谁先谁后那?acpi_pci_init在drivers/pci/pci-acpi.c文件里,而pci_access_init 在arch/i386/pci/init.c文件里,它俩根本就不在同一个目录下面,
2007-12-05 18:43:00 14559 13
原创 Linux那些事儿之我是SCSI硬盘(2)依然probe
虽然scsi disk不难,但是如果你以为scsi disk这个模块每个函数都像init_sd()一样简单,那么我只能说你属于那种被蜘蛛咬了就以为自己是蜘蛛侠,被雷电劈了就以为自己是闪电侠,摸了一次高压电就以为自己是沈殿霞.你不服?咱们来看sd_probe,这个函数就不是那么简单. 1566 /** 1567 * sd_probe - called during d
2007-12-04 21:25:00 9756 3
原创 Linux那些事儿 之 我是PCI(4)初始化(一)
解析完了PCI的那些内核参数,再翻过多少座山跨过多少条河,内核就会遇到init/main.c里一个名叫do_initcalls的函数。do_initcalls对内核来说只不过是漫长冒险旅程中的一个驿站,对PCI这个故事来说却是命运转轮的开始,内核在它里边完成了对.initcall.init节里各种xxx_initcall函数的执行,PCI的那些自然也包括在内。你不用像新东方老罗“我走来走去,为中国
2007-12-01 23:41:00 12271 1
Linux那些事儿之我是USB Core(v1.0)
2007-11-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人