Lines Matching refs:io_req

448 static void ubd_end_request(struct io_thread_req *io_req)  in ubd_end_request()  argument
450 if (io_req->error == BLK_STS_NOTSUPP) { in ubd_end_request()
451 if (req_op(io_req->req) == REQ_OP_DISCARD) in ubd_end_request()
452 blk_queue_disable_discard(io_req->req->q); in ubd_end_request()
453 else if (req_op(io_req->req) == REQ_OP_WRITE_ZEROES) in ubd_end_request()
454 blk_queue_disable_write_zeroes(io_req->req->q); in ubd_end_request()
456 blk_mq_end_request(io_req->req, io_req->error); in ubd_end_request()
457 kfree(io_req); in ubd_end_request()
1196 static void ubd_map_req(struct ubd *dev, struct io_thread_req *io_req, in ubd_map_req() argument
1202 unsigned long byte_offset = io_req->offset; in ubd_map_req()
1206 io_req->io_desc[0].buffer = NULL; in ubd_map_req()
1207 io_req->io_desc[0].length = blk_rq_bytes(req); in ubd_map_req()
1210 BUG_ON(i >= io_req->desc_cnt); in ubd_map_req()
1212 io_req->io_desc[i].buffer = bvec_virt(&bvec); in ubd_map_req()
1213 io_req->io_desc[i].length = bvec.bv_len; in ubd_map_req()
1219 for (i = 0; i < io_req->desc_cnt; i++) { in ubd_map_req()
1220 cowify_req(io_req, &io_req->io_desc[i], byte_offset, in ubd_map_req()
1223 byte_offset += io_req->io_desc[i].length; in ubd_map_req()
1232 struct io_thread_req *io_req; in ubd_alloc_req() local
1235 io_req = kmalloc(sizeof(*io_req) + in ubd_alloc_req()
1238 if (!io_req) in ubd_alloc_req()
1241 io_req->req = req; in ubd_alloc_req()
1243 io_req->fds[0] = dev->cow.fd; in ubd_alloc_req()
1245 io_req->fds[0] = dev->fd; in ubd_alloc_req()
1246 io_req->error = 0; in ubd_alloc_req()
1247 io_req->sectorsize = SECTOR_SIZE; in ubd_alloc_req()
1248 io_req->fds[1] = dev->fd; in ubd_alloc_req()
1249 io_req->offset = (u64) blk_rq_pos(req) << SECTOR_SHIFT; in ubd_alloc_req()
1250 io_req->offsets[0] = 0; in ubd_alloc_req()
1251 io_req->offsets[1] = dev->cow.data_offset; in ubd_alloc_req()
1254 io_req->io_desc[i].sector_mask = 0; in ubd_alloc_req()
1255 io_req->io_desc[i].cow_offset = -1; in ubd_alloc_req()
1258 return io_req; in ubd_alloc_req()
1264 struct io_thread_req *io_req; in ubd_submit_request() local
1275 io_req = ubd_alloc_req(dev, req, segs); in ubd_submit_request()
1276 if (!io_req) in ubd_submit_request()
1279 io_req->desc_cnt = segs; in ubd_submit_request()
1281 ubd_map_req(dev, io_req, req); in ubd_submit_request()
1283 ret = os_write_file(thread_fd, &io_req, sizeof(io_req)); in ubd_submit_request()
1284 if (ret != sizeof(io_req)) { in ubd_submit_request()
1287 kfree(io_req); in ubd_submit_request()