Lines Matching refs:rdma

32 #include <rdma/ib_verbs.h>
33 #include <rdma/rdma_cm.h>
152 struct p9_trans_rdma *rdma = clnt->trans;
154 if (rdma->port != P9_PORT)
155 seq_printf(m, ",port=%u", rdma->port);
156 if (rdma->sq_depth != P9_RDMA_SQ_DEPTH)
157 seq_printf(m, ",sq=%u", rdma->sq_depth);
158 if (rdma->rq_depth != P9_RDMA_RQ_DEPTH)
159 seq_printf(m, ",rq=%u", rdma->rq_depth);
160 if (rdma->timeout != P9_RDMA_TIMEOUT)
161 seq_printf(m, ",timeout=%lu", rdma->timeout);
162 if (rdma->privport)
168 * parse_opts - parse mount options into rdma options structure
170 * @opts: rdma transport-specific structure to parse options into
242 struct p9_trans_rdma *rdma = c->trans;
245 BUG_ON(rdma->state != P9_RDMA_INIT);
246 rdma->state = P9_RDMA_ADDR_RESOLVED;
250 BUG_ON(rdma->state != P9_RDMA_ADDR_RESOLVED);
251 rdma->state = P9_RDMA_ROUTE_RESOLVED;
255 BUG_ON(rdma->state != P9_RDMA_ROUTE_RESOLVED);
256 rdma->state = P9_RDMA_CONNECTED;
260 if (rdma)
261 rdma->state = P9_RDMA_CLOSED;
280 rdma_disconnect(rdma->cm_id);
285 complete(&rdma->cm_done);
293 struct p9_trans_rdma *rdma = client->trans;
301 ib_dma_unmap_single(rdma->cm_id->device, c->busa, client->msize,
328 up(&rdma->rq_sem);
335 rdma->state = P9_RDMA_FLUSHING;
344 struct p9_trans_rdma *rdma = client->trans;
348 ib_dma_unmap_single(rdma->cm_id->device,
351 up(&rdma->sq_sem);
362 static void rdma_destroy_trans(struct p9_trans_rdma *rdma)
364 if (!rdma)
367 if (rdma->qp && !IS_ERR(rdma->qp))
368 ib_destroy_qp(rdma->qp);
370 if (rdma->pd && !IS_ERR(rdma->pd))
371 ib_dealloc_pd(rdma->pd);
373 if (rdma->cq && !IS_ERR(rdma->cq))
374 ib_free_cq(rdma->cq);
376 if (rdma->cm_id && !IS_ERR(rdma->cm_id))
377 rdma_destroy_id(rdma->cm_id);
379 kfree(rdma);
385 struct p9_trans_rdma *rdma = client->trans;
390 c->busa = ib_dma_map_single(rdma->cm_id->device,
393 if (ib_dma_mapping_error(rdma->cm_id->device, c->busa))
400 sge.lkey = rdma->pd->local_dma_lkey;
407 ret = ib_post_recv(rdma->qp, &wr, NULL);
409 ib_dma_unmap_single(rdma->cm_id->device, c->busa,
420 struct p9_trans_rdma *rdma = client->trans;
436 if (unlikely(atomic_read(&rdma->excess_rc) > 0)) {
437 if ((atomic_sub_return(1, &rdma->excess_rc) >= 0)) {
444 atomic_inc(&rdma->excess_rc);
463 if (down_interruptible(&rdma->rq_sem)) {
485 c->busa = ib_dma_map_single(rdma->cm_id->device,
488 if (ib_dma_mapping_error(rdma->cm_id->device, c->busa)) {
497 sge.lkey = rdma->pd->local_dma_lkey;
506 if (down_interruptible(&rdma->sq_sem)) {
516 err = ib_post_send(rdma->qp, &wr, NULL);
524 ib_dma_unmap_single(rdma->cm_id->device, c->busa,
535 atomic_inc(&rdma->excess_rc);
541 spin_lock_irqsave(&rdma->req_lock, flags);
542 if (err != -EINTR && rdma->state < P9_RDMA_CLOSING) {
543 rdma->state = P9_RDMA_CLOSING;
544 spin_unlock_irqrestore(&rdma->req_lock, flags);
545 rdma_disconnect(rdma->cm_id);
547 spin_unlock_irqrestore(&rdma->req_lock, flags);
553 struct p9_trans_rdma *rdma;
558 rdma = client->trans;
559 if (!rdma)
563 rdma_disconnect(rdma->cm_id);
564 rdma_destroy_trans(rdma);
568 * alloc_rdma - Allocate and initialize the rdma transport structure
573 struct p9_trans_rdma *rdma;
575 rdma = kzalloc(sizeof(struct p9_trans_rdma), GFP_KERNEL);
576 if (!rdma)
579 rdma->port = opts->port;
580 rdma->privport = opts->privport;
581 rdma->sq_depth = opts->sq_depth;
582 rdma->rq_depth = opts->rq_depth;
583 rdma->timeout = opts->timeout;
584 spin_lock_init(&rdma->req_lock);
585 init_completion(&rdma->cm_done);
586 sema_init(&rdma->sq_sem, rdma->sq_depth);
587 sema_init(&rdma->rq_sem, rdma->rq_depth);
588 atomic_set(&rdma->excess_rc, 0);
590 return rdma;
606 struct p9_trans_rdma *rdma = client->trans;
607 atomic_inc(&rdma->excess_rc);
611 static int p9_rdma_bind_privport(struct p9_trans_rdma *rdma)
621 err = rdma_bind_addr(rdma->cm_id, (struct sockaddr *)&cl);
639 struct p9_trans_rdma *rdma;
652 rdma = alloc_rdma(&opts);
653 if (!rdma)
657 rdma->cm_id = rdma_create_id(&init_net, p9_cm_event_handler, client,
659 if (IS_ERR(rdma->cm_id))
663 client->trans = rdma;
667 err = p9_rdma_bind_privport(rdma);
676 rdma->addr.sin_family = AF_INET;
677 rdma->addr.sin_addr.s_addr = in_aton(addr);
678 rdma->addr.sin_port = htons(opts.port);
679 err = rdma_resolve_addr(rdma->cm_id, NULL,
680 (struct sockaddr *)&rdma->addr,
681 rdma->timeout);
684 err = wait_for_completion_interruptible(&rdma->cm_done);
685 if (err || (rdma->state != P9_RDMA_ADDR_RESOLVED))
689 err = rdma_resolve_route(rdma->cm_id, rdma->timeout);
692 err = wait_for_completion_interruptible(&rdma->cm_done);
693 if (err || (rdma->state != P9_RDMA_ROUTE_RESOLVED))
697 rdma->cq = ib_alloc_cq_any(rdma->cm_id->device, client,
700 if (IS_ERR(rdma->cq))
704 rdma->pd = ib_alloc_pd(rdma->cm_id->device, 0);
705 if (IS_ERR(rdma->pd))
718 qp_attr.send_cq = rdma->cq;
719 qp_attr.recv_cq = rdma->cq;
720 err = rdma_create_qp(rdma->cm_id, rdma->pd, &qp_attr);
723 rdma->qp = rdma->cm_id->qp;
731 err = rdma_connect(rdma->cm_id, &conn_param);
734 err = wait_for_completion_interruptible(&rdma->cm_done);
735 if (err || (rdma->state != P9_RDMA_CONNECTED))
743 rdma_destroy_trans(rdma);
748 .name = "rdma",
777 MODULE_ALIAS_9P("rdma");