request 함수
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 : 디바이스 관리를 위해 할당한 구조체 주소