专业始于专注 卓识源于远见
‐7‐
0 返回值表示从设备中读,非 0 返回值表示向设备写。
2.请求队列
一个块请求队列是一个块 I/O 请求的队列,其定义如代码清单 13.4。
代码清单 13.4 request 队列结构体
1 struct request
_
queue
2 {
3 ...
4 /* 保护队列结构体的自旋锁 */
5 spinlock
_
t
_
_
queue
_
lock;
6 spinlock
_
t *queue
_
lock;
7
8 /* 队列 kobject */
9 struct kobject kobj;
10
11 /* 队列设置 */
12 unsigned long nr
_
requests; /* 最大的请求数量 */
13 unsigned int nr
_
congestion
_
on;
14 unsigned int nr
_
congestion
_
off;
15 unsigned int nr
_
batching;
16
17 unsigned short max
_
sectors; /* 最大的扇区数 */
18 unsigned short max
_
hw
_
sectors;
19 unsigned short max
_
phys
_
segments; /* 最大的段数 */
20 unsigned short max
_
hw
_
segments;
21 unsigned short hardsect
_
size; /* 硬件扇区尺寸 */
22 unsigned int max
_
segment
_
size; /* 最大的段尺寸 */
23
24 unsigned long seg
_
boundary
_
mask; /* 段边界掩码 */
25 unsigned int dma
_
alignment; /* DMA 传送的内存对齐限制 */
26
27 struct blk
_
queue
_
tag *queue
_
tags;
28
29 atomic
_
t refcnt; /* 引用计数 */
30
31 unsigned int in
_
flight;
32
33 unsigned int sg
_
timeout;
34 unsigned int sg
_
reserved
_
size;
35 int node;
36
37 struct list
_
head drain
_
list;
38
39 struct request *flush
_
rq;
40 unsigned char ordered;
41 };
请求队列跟踪等候的块 I/O 请求,它存储用于描述这个设备能够支持的请求的类型信息、它们的最大
大小、多少不同的段可进入一个请求、硬件扇区大小、对齐要求等参数,其结果是:如果请求队列被配置
正确了,它不会交给该设备一个不能处理的请求。