Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / 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]; 
};