Спасибо за ответ, @ctuffli.Я решил использовать структуру, аналогичную описанной здесь .По сути, я выделяю struct packet_data
, который будет содержать указатели для всех struct bio
с, которые должны быть объединены в один struct bio
(и позже один struct request
).Кроме того, я храню некоторую информацию, относящуюся к драйверу, в этом struct packet_data
.Затем я выделяю новый struct bio
(назовем его «merged_bio»), копирую все страницы из списка оригинальных BIO и затем указываю merged_bio->bi_private
на struct packet_data
.Этот последний взлом позволил бы мне отслеживать список исходных BIO, а также вызывать bio_endio()
, чтобы завершить ввод-вывод для всех отдельных BIO после успешной передачи merged_bio
.
Не уверен, еслиэто самый умный способ сделать это, но он делает то, что я хотел!: ^)