in drivers/ubd_kern.c [1557:1604]
int io_thread(void *arg)
{
int n, count, written, res;
os_fix_helper_signals();
while(1){
n = bulk_req_safe_read(
kernel_fd,
io_req_buffer,
&io_remainder,
&io_remainder_size,
UBD_REQ_BUFFER_SIZE
);
if (n <= 0) {
if (n == -EAGAIN)
ubd_read_poll(-1);
continue;
}
for (count = 0; count < n/sizeof(struct io_thread_req *); count++) {
struct io_thread_req *req = (*io_req_buffer)[count];
int i;
io_count++;
for (i = 0; !req->error && i < req->desc_cnt; i++)
do_io(req, &(req->io_desc[i]));
}
written = 0;
do {
res = os_write_file(kernel_fd,
((char *) io_req_buffer) + written,
n - written);
if (res >= 0) {
written += res;
}
if (written < n) {
ubd_write_poll(-1);
}
} while (written < n);
}
return 0;
}