hgglife 2019. 10. 16. 09:06

request 함수 

• make_request 함수: RAMDISK, Loop

static int xxx_make_request(request_queue_t *q, struct bio *bio) { 


     struct bio_vec *bvec; check_io; //요구 유효성 검사 처리


     bio_for_each_segment(bvec, bio, i) {


                do_io; // 요구 처리


     }


     bio_endio(bio, bio->bi_size, 0); // 처리 종료


     return 0;


     fail: bio_IO_error(bio, bio->bi_size);


     return 0;


}

• request 함수: 입출력 스케줄러를 사용하는 대부분의 블록 디바이스

static void xxx_request(request_queue_t *q) {

    
 struct request *xxx_req;

     while(1) {  

         xxx_req = elv_next_request(q);  

         if(!xxx_req) return ;

        do_io; // 입출력 실행  

        if(성공)end_request(xxx_req, 1);  

       else end_request(xxx_req, 0);

     }

}

 

주요 bio 구조체 변수

- bio_data_dir(bio) 입출력 방향

- bio->bi_sector 논리적 시작 섹터번호

- bio->bi_size 총 데이터 크기

- bio->bi_bdev->bd_disk->private_data : 디바이스 관리를 위해 할당한 구조체 주소

 

ch4 - https://show5376-hgglife.tistory.com/16