MCPcopy Create free account
hub / github.com/axboe/liburing / ublk_queue_init

Function ublk_queue_init

test/uring_cmd_ublk.c:404–466  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

402}
403
404static int ublk_queue_init(struct ublk_queue *q)
405{
406 struct ublk_dev *dev = q->dev;
407 int depth = dev->dev_info.queue_depth;
408 int i, ret = -1;
409 int cmd_buf_size, io_buf_size;
410 unsigned long off;
411 int ring_depth = depth, cq_depth = depth;
412
413 q->tgt_ops = dev->tgt.ops;
414 q->state = 0;
415 q->q_depth = depth;
416 q->cmd_inflight = 0;
417 q->tid = gettid();
418
419 cmd_buf_size = ublk_queue_cmd_buf_sz(q);
420 off = UBLKSRV_CMD_BUF_OFFSET +
421 q->q_id * (UBLK_MAX_QUEUE_DEPTH * sizeof(struct ublksrv_io_desc));
422 q->io_cmd_buf = (char *)mmap(0, cmd_buf_size, PROT_READ,
423 MAP_SHARED | MAP_POPULATE, dev->fds[0], off);
424 if (q->io_cmd_buf == MAP_FAILED) {
425 ublk_err("ublk dev %d queue %d map io_cmd_buf failed %m\n",
426 q->dev->dev_info.dev_id, q->q_id);
427 goto fail;
428 }
429
430 io_buf_size = dev->dev_info.max_io_buf_bytes;
431 for (i = 0; i < q->q_depth; i++) {
432 q->ios[i].buf_addr = NULL;
433
434 if (posix_memalign((void **)&q->ios[i].buf_addr,
435 getpagesize(), io_buf_size)) {
436 ublk_err("ublk dev %d queue %d io %d posix_memalign failed %m\n",
437 dev->dev_info.dev_id, q->q_id, i);
438 goto fail;
439 }
440 q->ios[i].flags = UBLKSRV_NEED_FETCH_RQ | UBLKSRV_IO_FREE;
441 }
442
443 ret = ublk_setup_ring(&q->ring, ring_depth, cq_depth,
444 IORING_SETUP_COOP_TASKRUN);
445 if (ret < 0) {
446 ublk_err("ublk dev %d queue %d setup io_uring failed %d\n",
447 q->dev->dev_info.dev_id, q->q_id, ret);
448 goto fail;
449 }
450
451 io_uring_register_ring_fd(&q->ring);
452
453 ret = io_uring_register_files(&q->ring, dev->fds, dev->nr_fds);
454 if (ret) {
455 ublk_err("ublk dev %d queue %d register files failed %d\n",
456 q->dev->dev_info.dev_id, q->q_id, ret);
457 goto fail;
458 }
459
460 return 0;
461 fail:

Callers 1

ublk_io_handler_fnFunction · 0.85

Calls 6

ublk_queue_cmd_buf_szFunction · 0.85
ublk_errFunction · 0.85
ublk_setup_ringFunction · 0.85
io_uring_register_filesFunction · 0.85
ublk_queue_deinitFunction · 0.85

Tested by

no test coverage detected