歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

在通用塊層中,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