Lines Matching refs:iu

322 	struct rnbd_iu *iu;  in rnbd_get_iu()  local
325 iu = kzalloc(sizeof(*iu), GFP_KERNEL); in rnbd_get_iu()
326 if (!iu) in rnbd_get_iu()
331 kfree(iu); in rnbd_get_iu()
335 iu->permit = permit; in rnbd_get_iu()
344 atomic_set(&iu->refcount, 2); in rnbd_get_iu()
345 init_waitqueue_head(&iu->comp.wait); in rnbd_get_iu()
346 iu->comp.errno = INT_MAX; in rnbd_get_iu()
348 if (sg_alloc_table(&iu->sgt, 1, GFP_KERNEL)) { in rnbd_get_iu()
350 kfree(iu); in rnbd_get_iu()
354 return iu; in rnbd_get_iu()
357 static void rnbd_put_iu(struct rnbd_clt_session *sess, struct rnbd_iu *iu) in rnbd_put_iu() argument
359 if (atomic_dec_and_test(&iu->refcount)) { in rnbd_put_iu()
360 sg_free_table(&iu->sgt); in rnbd_put_iu()
361 rnbd_put_permit(sess, iu->permit); in rnbd_put_iu()
362 kfree(iu); in rnbd_put_iu()
370 struct rnbd_iu *iu; in rnbd_softirq_done_fn() local
372 iu = blk_mq_rq_to_pdu(rq); in rnbd_softirq_done_fn()
373 sg_free_table_chained(&iu->sgt, RNBD_INLINE_SG_CNT); in rnbd_softirq_done_fn()
374 rnbd_put_permit(sess, iu->permit); in rnbd_softirq_done_fn()
375 blk_mq_end_request(rq, errno_to_blk_status(iu->errno)); in rnbd_softirq_done_fn()
380 struct rnbd_iu *iu = priv; in msg_io_conf() local
381 struct rnbd_clt_dev *dev = iu->dev; in msg_io_conf()
382 struct request *rq = iu->rq; in msg_io_conf()
385 iu->errno = errno; in msg_io_conf()
394 static void wake_up_iu_comp(struct rnbd_iu *iu, int errno) in wake_up_iu_comp() argument
396 iu->comp.errno = errno; in wake_up_iu_comp()
397 wake_up(&iu->comp.wait); in wake_up_iu_comp()
402 struct rnbd_iu *iu = priv; in msg_conf() local
404 iu->errno = errno; in msg_conf()
405 schedule_work(&iu->work); in msg_conf()
409 struct rnbd_iu *iu, struct kvec *vec, in send_usr_msg() argument
417 INIT_WORK(&iu->work, conf); in send_usr_msg()
419 .priv = iu, in send_usr_msg()
422 err = rtrs_clt_request(dir, &req_ops, rtrs, iu->permit, in send_usr_msg()
425 wait_event(iu->comp.wait, iu->comp.errno != INT_MAX); in send_usr_msg()
426 *errno = iu->comp.errno; in send_usr_msg()
436 struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work); in msg_close_conf() local
437 struct rnbd_clt_dev *dev = iu->dev; in msg_close_conf()
439 wake_up_iu_comp(iu, iu->errno); in msg_close_conf()
440 rnbd_put_iu(dev->sess, iu); in msg_close_conf()
449 struct rnbd_iu *iu; in send_msg_close() local
456 iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT); in send_msg_close()
457 if (!iu) in send_msg_close()
460 iu->buf = NULL; in send_msg_close()
461 iu->dev = dev; in send_msg_close()
467 err = send_usr_msg(sess->rtrs, WRITE, iu, &vec, 0, NULL, 0, in send_msg_close()
471 rnbd_put_iu(sess, iu); in send_msg_close()
476 rnbd_put_iu(sess, iu); in send_msg_close()
482 struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work); in msg_open_conf() local
483 struct rnbd_msg_open_rsp *rsp = iu->buf; in msg_open_conf()
484 struct rnbd_clt_dev *dev = iu->dev; in msg_open_conf()
485 int errno = iu->errno; in msg_open_conf()
510 wake_up_iu_comp(iu, errno); in msg_open_conf()
511 rnbd_put_iu(dev->sess, iu); in msg_open_conf()
517 struct rnbd_iu *iu = container_of(work, struct rnbd_iu, work); in msg_sess_info_conf() local
518 struct rnbd_msg_sess_info_rsp *rsp = iu->buf; in msg_sess_info_conf()
519 struct rnbd_clt_session *sess = iu->sess; in msg_sess_info_conf()
521 if (!iu->errno) in msg_sess_info_conf()
525 wake_up_iu_comp(iu, iu->errno); in msg_sess_info_conf()
526 rnbd_put_iu(sess, iu); in msg_sess_info_conf()
535 struct rnbd_iu *iu; in send_msg_open() local
546 iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT); in send_msg_open()
547 if (!iu) { in send_msg_open()
552 iu->buf = rsp; in send_msg_open()
553 iu->dev = dev; in send_msg_open()
555 sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp)); in send_msg_open()
562 err = send_usr_msg(sess->rtrs, READ, iu, in send_msg_open()
563 &vec, sizeof(*rsp), iu->sgt.sgl, 1, in send_msg_open()
567 rnbd_put_iu(sess, iu); in send_msg_open()
573 rnbd_put_iu(sess, iu); in send_msg_open()
581 struct rnbd_iu *iu; in send_msg_sess_info() local
592 iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT); in send_msg_sess_info()
593 if (!iu) { in send_msg_sess_info()
598 iu->buf = rsp; in send_msg_sess_info()
599 iu->sess = sess; in send_msg_sess_info()
600 sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp)); in send_msg_sess_info()
615 err = send_usr_msg(sess->rtrs, READ, iu, in send_msg_sess_info()
616 &vec, sizeof(*rsp), iu->sgt.sgl, 1, in send_msg_sess_info()
621 rnbd_put_iu(sess, iu); in send_msg_sess_info()
626 rnbd_put_iu(sess, iu); in send_msg_sess_info()
990 struct rnbd_iu *iu) in rnbd_client_xfer_request() argument
993 struct rtrs_permit *permit = iu->permit; in rnbd_client_xfer_request()
1001 iu->rq = rq; in rnbd_client_xfer_request()
1002 iu->dev = dev; in rnbd_client_xfer_request()
1013 sg_cnt = blk_rq_map_sg(dev->queue, rq, iu->sgt.sgl); in rnbd_client_xfer_request()
1016 sg_mark_end(&iu->sgt.sgl[0]); in rnbd_client_xfer_request()
1025 size = rnbd_clt_get_sg_size(iu->sgt.sgl, sg_cnt); in rnbd_client_xfer_request()
1027 .priv = iu, in rnbd_client_xfer_request()
1031 &vec, 1, size, iu->sgt.sgl, sg_cnt); in rnbd_client_xfer_request()
1116 struct rnbd_iu *iu = blk_mq_rq_to_pdu(rq); in rnbd_queue_rq() local
1123 iu->permit = rnbd_get_permit(dev->sess, RTRS_IO_CON, in rnbd_queue_rq()
1125 if (!iu->permit) { in rnbd_queue_rq()
1130 iu->sgt.sgl = iu->first_sgl; in rnbd_queue_rq()
1131 err = sg_alloc_table_chained(&iu->sgt, in rnbd_queue_rq()
1136 iu->sgt.sgl, in rnbd_queue_rq()
1141 rnbd_put_permit(dev->sess, iu->permit); in rnbd_queue_rq()
1146 err = rnbd_client_xfer_request(dev, rq, iu); in rnbd_queue_rq()
1153 sg_free_table_chained(&iu->sgt, RNBD_INLINE_SG_CNT); in rnbd_queue_rq()
1154 rnbd_put_permit(dev->sess, iu->permit); in rnbd_queue_rq()
1555 struct rnbd_iu *iu; in rnbd_clt_map_device() local
1586 iu = rnbd_get_iu(sess, RTRS_ADMIN_CON, RTRS_PERMIT_WAIT); in rnbd_clt_map_device()
1587 if (!iu) { in rnbd_clt_map_device()
1592 iu->buf = rsp; in rnbd_clt_map_device()
1593 iu->dev = dev; in rnbd_clt_map_device()
1594 sg_init_one(iu->sgt.sgl, rsp, sizeof(*rsp)); in rnbd_clt_map_device()
1601 ret = send_usr_msg(sess->rtrs, READ, iu, in rnbd_clt_map_device()
1602 &vec, sizeof(*rsp), iu->sgt.sgl, 1, in rnbd_clt_map_device()
1606 rnbd_put_iu(sess, iu); in rnbd_clt_map_device()
1643 rnbd_put_iu(sess, iu); in rnbd_clt_map_device()
1652 rnbd_put_iu(sess, iu); in rnbd_clt_map_device()