Lines Matching full:sc
14 static int smbdirect_accept_init_params(struct smbdirect_socket *sc);
18 int smbdirect_accept_connect_request(struct smbdirect_socket *sc, in smbdirect_accept_connect_request() argument
21 struct smbdirect_socket_parameters *sp = &sc->parameters; in smbdirect_accept_connect_request()
29 if (SMBDIRECT_CHECK_STATUS_WARN(sc, SMBDIRECT_SOCKET_CREATED)) in smbdirect_accept_connect_request()
36 sc->ib.dev->attrs.max_qp_rd_atom); in smbdirect_accept_connect_request()
40 smbdirect_connection_negotiate_rdma_resources(sc, in smbdirect_accept_connect_request()
45 ret = smbdirect_accept_init_params(sc); in smbdirect_accept_connect_request()
47 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
53 ret = smbdirect_connection_create_qp(sc); in smbdirect_accept_connect_request()
55 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
61 ret = smbdirect_connection_create_mem_pools(sc); in smbdirect_accept_connect_request()
63 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
69 recv_io = smbdirect_connection_get_recv_io(sc); in smbdirect_accept_connect_request()
72 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
83 sc->recv_io.expected = SMBDIRECT_EXPECT_NEGOTIATE_REQ; in smbdirect_accept_connect_request()
86 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
98 WARN_ON_ONCE(sc->status != SMBDIRECT_SOCKET_CREATED); in smbdirect_accept_connect_request()
99 sc->status = SMBDIRECT_SOCKET_RDMA_CONNECT_NEEDED; in smbdirect_accept_connect_request()
109 if (sc->rdma.legacy_iwarp) { in smbdirect_accept_connect_request()
123 WARN_ON_ONCE(sc->status != SMBDIRECT_SOCKET_RDMA_CONNECT_NEEDED); in smbdirect_accept_connect_request()
124 sc->status = SMBDIRECT_SOCKET_RDMA_CONNECT_RUNNING; in smbdirect_accept_connect_request()
125 sc->rdma.expected_event = RDMA_CM_EVENT_ESTABLISHED; in smbdirect_accept_connect_request()
126 sc->rdma.cm_id->event_handler = smbdirect_accept_rdma_event_handler; in smbdirect_accept_connect_request()
127 ret = rdma_accept(sc->rdma.cm_id, &conn_param); in smbdirect_accept_connect_request()
129 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_connect_request()
139 INIT_DELAYED_WORK(&sc->idle.timer_work, smbdirect_connection_idle_timer_work); in smbdirect_accept_connect_request()
140 sc->idle.keepalive = SMBDIRECT_KEEPALIVE_PENDING; in smbdirect_accept_connect_request()
141 mod_delayed_work(sc->workqueues.idle, &sc->idle.timer_work, in smbdirect_accept_connect_request()
156 smbdirect_connection_destroy_mem_pools(sc); in smbdirect_accept_connect_request()
158 smbdirect_connection_destroy_qp(sc); in smbdirect_accept_connect_request()
164 static int smbdirect_accept_init_params(struct smbdirect_socket *sc) in smbdirect_accept_init_params() argument
166 const struct smbdirect_socket_parameters *sp = &sc->parameters; in smbdirect_accept_init_params()
182 atomic_set(&sc->send_io.bcredits.count, 1); in smbdirect_accept_init_params()
188 atomic_set(&sc->send_io.lcredits.count, sp->send_credit_target); in smbdirect_accept_init_params()
192 sc->rw_io.credits.max = rdma_rw_mr_factor(sc->ib.dev, in smbdirect_accept_init_params()
193 sc->rdma.cm_id->port_num, in smbdirect_accept_init_params()
195 sc->rw_io.credits.num_pages = DIV_ROUND_UP(maxpages, sc->rw_io.credits.max); in smbdirect_accept_init_params()
197 sc->rw_io.credits.max += 1; in smbdirect_accept_init_params()
200 sc->recv_io.credits.target = 1; in smbdirect_accept_init_params()
202 atomic_set(&sc->rw_io.credits.count, sc->rw_io.credits.max); in smbdirect_accept_init_params()
213 struct smbdirect_socket *sc = recv_io->socket; in smbdirect_accept_negotiate_recv_done() local
218 smbdirect_log_rdma_recv(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_recv_done()
224 smbdirect_log_rdma_recv(sc, SMBDIRECT_LOG_INFO, in smbdirect_accept_negotiate_recv_done()
231 if (WARN_ON_ONCE(sc->recv_io.expected != SMBDIRECT_EXPECT_NEGOTIATE_REQ)) in smbdirect_accept_negotiate_recv_done()
239 ib_dma_sync_single_for_cpu(sc->ib.dev, in smbdirect_accept_negotiate_recv_done()
250 sc->recv_io.reassembly.full_packet_received = true; in smbdirect_accept_negotiate_recv_done()
252 smbdirect_connection_reassembly_append_recv_io(sc, recv_io, 0); in smbdirect_accept_negotiate_recv_done()
269 spin_lock_irqsave(&sc->connect.lock, flags); in smbdirect_accept_negotiate_recv_done()
270 if (!sc->first_error) { in smbdirect_accept_negotiate_recv_done()
271 INIT_WORK(&sc->connect.work, smbdirect_accept_negotiate_recv_work); in smbdirect_accept_negotiate_recv_done()
272 if (sc->status == SMBDIRECT_SOCKET_NEGOTIATE_NEEDED) in smbdirect_accept_negotiate_recv_done()
273 queue_work(sc->workqueues.accept, &sc->connect.work); in smbdirect_accept_negotiate_recv_done()
275 spin_unlock_irqrestore(&sc->connect.lock, flags); in smbdirect_accept_negotiate_recv_done()
286 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_recv_done()
291 struct smbdirect_socket *sc = in smbdirect_accept_negotiate_recv_work() local
293 struct smbdirect_socket_parameters *sp = &sc->parameters; in smbdirect_accept_negotiate_recv_work()
305 if (sc->first_error) in smbdirect_accept_negotiate_recv_work()
317 sc->idle.keepalive = SMBDIRECT_KEEPALIVE_NONE; in smbdirect_accept_negotiate_recv_work()
318 mod_delayed_work(sc->workqueues.idle, &sc->idle.timer_work, in smbdirect_accept_negotiate_recv_work()
325 recv_io = smbdirect_connection_reassembly_first_recv_io(sc); in smbdirect_accept_negotiate_recv_work()
327 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_recv_work()
330 spin_lock_irqsave(&sc->recv_io.reassembly.lock, flags); in smbdirect_accept_negotiate_recv_work()
331 sc->recv_io.reassembly.queue_length--; in smbdirect_accept_negotiate_recv_work()
333 spin_unlock_irqrestore(&sc->recv_io.reassembly.lock, flags); in smbdirect_accept_negotiate_recv_work()
336 if (SMBDIRECT_CHECK_STATUS_DISCONNECT(sc, SMBDIRECT_SOCKET_NEGOTIATE_NEEDED)) in smbdirect_accept_negotiate_recv_work()
338 sc->status = SMBDIRECT_SOCKET_NEGOTIATE_RUNNING; in smbdirect_accept_negotiate_recv_work()
355 smbdirect_log_negotiate(sc, SMBDIRECT_LOG_INFO, in smbdirect_accept_negotiate_recv_work()
371 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_recv_work()
379 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_recv_work()
381 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_recv_work()
386 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_recv_work()
390 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_recv_work()
395 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_recv_work()
399 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_recv_work()
440 sc->recv_io.credits.target = credits_requested; in smbdirect_accept_negotiate_recv_work()
441 sc->recv_io.credits.target = min_t(u16, sc->recv_io.credits.target, in smbdirect_accept_negotiate_recv_work()
456 if (sc->accept.listener) { in smbdirect_accept_negotiate_recv_work()
457 struct smbdirect_socket *lsc = sc->accept.listener; in smbdirect_accept_negotiate_recv_work()
461 list_del(&sc->accept.list); in smbdirect_accept_negotiate_recv_work()
462 list_add_tail(&sc->accept.list, &lsc->listen.ready); in smbdirect_accept_negotiate_recv_work()
481 smbdirect_accept_negotiate_finish(sc, ntstatus); in smbdirect_accept_negotiate_recv_work()
484 void smbdirect_accept_negotiate_finish(struct smbdirect_socket *sc, u32 ntstatus) in smbdirect_accept_negotiate_finish() argument
486 const struct smbdirect_socket_parameters *sp = &sc->parameters; in smbdirect_accept_negotiate_finish()
500 sc->recv_io.reassembly.full_packet_received = true; in smbdirect_accept_negotiate_finish()
501 sc->recv_io.expected = SMBDIRECT_EXPECT_DATA_TRANSFER; in smbdirect_accept_negotiate_finish()
502 list_for_each_entry(recv_io, &sc->recv_io.free.list, list) in smbdirect_accept_negotiate_finish()
509 posted = smbdirect_connection_recv_io_refill(sc); in smbdirect_accept_negotiate_finish()
511 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_finish()
514 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_finish()
522 new_credits = smbdirect_connection_grant_recv_credits(sc); in smbdirect_accept_negotiate_finish()
525 send_io = smbdirect_connection_alloc_send_io(sc); in smbdirect_accept_negotiate_finish()
528 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_finish()
531 smbdirect_socket_schedule_cleanup(sc, ret); in smbdirect_accept_negotiate_finish()
561 smbdirect_log_negotiate(sc, SMBDIRECT_LOG_INFO, in smbdirect_accept_negotiate_finish()
584 send_io->sge[0].addr = ib_dma_map_single(sc->ib.dev, in smbdirect_accept_negotiate_finish()
588 ret = ib_dma_mapping_error(sc->ib.dev, send_io->sge[0].addr); in smbdirect_accept_negotiate_finish()
590 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_finish()
594 smbdirect_socket_schedule_cleanup(sc, ret); in smbdirect_accept_negotiate_finish()
599 send_io->sge[0].lkey = sc->ib.pd->local_dma_lkey; in smbdirect_accept_negotiate_finish()
602 ib_dma_sync_single_for_device(sc->ib.dev, in smbdirect_accept_negotiate_finish()
614 ret = smbdirect_connection_post_send_wr(sc, &send_io->wr); in smbdirect_accept_negotiate_finish()
617 smbdirect_log_rdma_send(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_finish()
625 smbdirect_socket_schedule_cleanup(sc, ret); in smbdirect_accept_negotiate_finish()
639 struct smbdirect_socket *sc = send_io->socket; in smbdirect_accept_negotiate_send_done() local
643 smbdirect_log_rdma_send(sc, SMBDIRECT_LOG_INFO, in smbdirect_accept_negotiate_send_done()
652 atomic_dec(&sc->send_io.pending.count); in smbdirect_accept_negotiate_send_done()
656 smbdirect_log_rdma_send(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_negotiate_send_done()
659 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_negotiate_send_done()
672 smbdirect_socket_schedule_cleanup(sc, -EOPNOTSUPP); in smbdirect_accept_negotiate_send_done()
674 smbdirect_connection_negotiation_done(sc); in smbdirect_accept_negotiate_send_done()
680 struct smbdirect_socket *sc = id->context; in smbdirect_accept_rdma_event_handler() local
696 if (event->status || event->event != sc->rdma.expected_event) { in smbdirect_accept_rdma_event_handler()
706 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_ERR, in smbdirect_accept_rdma_event_handler()
708 smbdirect_socket_status_string(sc->status), in smbdirect_accept_rdma_event_handler()
709 SMBDIRECT_DEBUG_ERR_PTR(sc->first_error), in smbdirect_accept_rdma_event_handler()
710 rdma_event_msg(sc->rdma.expected_event), in smbdirect_accept_rdma_event_handler()
715 smbdirect_socket_schedule_cleanup(sc, ret); in smbdirect_accept_rdma_event_handler()
719 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO, in smbdirect_accept_rdma_event_handler()
721 smbdirect_socket_status_string(sc->status), in smbdirect_accept_rdma_event_handler()
722 SMBDIRECT_DEBUG_ERR_PTR(sc->first_error), in smbdirect_accept_rdma_event_handler()
725 if (sc->first_error) in smbdirect_accept_rdma_event_handler()
730 smbdirect_connection_rdma_established(sc); in smbdirect_accept_rdma_event_handler()
738 * it initialized sc->connect.work only for us to in smbdirect_accept_rdma_event_handler()
744 * yet. sc->connect.work is still be disabled and in smbdirect_accept_rdma_event_handler()
747 if (SMBDIRECT_CHECK_STATUS_DISCONNECT(sc, SMBDIRECT_SOCKET_RDMA_CONNECT_RUNNING)) in smbdirect_accept_rdma_event_handler()
749 sc->status = SMBDIRECT_SOCKET_NEGOTIATE_NEEDED; in smbdirect_accept_rdma_event_handler()
750 spin_lock_irqsave(&sc->connect.lock, flags); in smbdirect_accept_rdma_event_handler()
751 if (!sc->first_error) in smbdirect_accept_rdma_event_handler()
752 queue_work(sc->workqueues.accept, &sc->connect.work); in smbdirect_accept_rdma_event_handler()
753 spin_unlock_irqrestore(&sc->connect.lock, flags); in smbdirect_accept_rdma_event_handler()
768 WARN_ON_ONCE(sc->rdma.expected_event != RDMA_CM_EVENT_ESTABLISHED); in smbdirect_accept_rdma_event_handler()
769 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); in smbdirect_accept_rdma_event_handler()