歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux I/O Block--遞交I/O請求

Linux I/O Block--遞交I/O請求

日期:2017/3/1 10:05:44   编辑:Linux編程

在通用塊層中,bio用來描述單一的I/O請求,它記錄了一次I/O操作所必需的相關信息,如用於I/O操作的數據緩存位置,I/O操作的塊設備起始扇區,是讀操作還是寫操作等等。struct bio的定義如下

struct bio {
sector_t bi_sector; /* device address in 512 byte
sectors */
struct bio *bi_next; /* request queue link */
struct block_device *bi_bdev;
unsigned long bi_flags; /* status, command, etc */
unsigned long bi_rw; /* bottom bits READ/WRITE,
* top bits priority
*/

unsigned short bi_vcnt; /* how many bio_vec's */
unsigned short bi_idx; /* current index into bvl_vec */

/* Number of segments in this BIO after
* physical address coalescing is performed.
*/
unsigned int bi_phys_segments;

unsigned int bi_size; /* residual I/O count */

/*
* To keep track of the max segment size, we account for the
* sizes of the first and last mergeable segments in this bio.
*/
unsigned int bi_seg_front_size;
unsigned int bi_seg_back_size;

unsigned int bi_max_vecs; /* max bvl_vecs we can hold */

unsigned int bi_comp_cpu; /* completion CPU */

atomic_t bi_cnt; /* pin count */

struct bio_vec *bi_io_vec; /* the actual vec list */

bio_end_io_t *bi_end_io;

void *bi_private;
#if defined(CONFIG_BLK_DEV_INTEGRITY)
struct bio_integrity_payload *bi_integrity; /* data integrity */
#endif

bio_destructor_t *bi_destructor; /* destructor */

/*
* We can inline a number of vecs at the end of the bio, to avoid
* double allocations for a small number of bio_vecs. This member
* MUST obviously be kept at the very end of the bio.
*/
struct bio_vec bi_inline_vecs[0];
};

Copyright © Linux教程網 All Rights Reserved