FILE
rtrs-srv.c
File preview with syntax highlighting.
linux-6.19.14/drivers/infiniband/ulp/rtrs/rtrs-srv.c
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * RDMA Transport Layer 4 * 5 * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved. 6 * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved. 7 * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved. 8 */ 9 10#undef pr_fmt 11#define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt 12 13#include <linux/module.h> 14 15#include "rtrs-srv.h" 16#include "rtrs-log.h" 17#include <rdma/ib_cm.h> 18#include <rdma/ib_verbs.h> 19#include "rtrs-srv-trace.h" 20 21MODULE_DESCRIPTION("RDMA Transport Server"); 22MODULE_LICENSE("GPL"); 23 24/* Must be power of 2, see mask from mr->page_size in ib_sg_to_pages() */ 25#define DEFAULT_MAX_CHUNK_SIZE (128 << 10) 26#define DEFAULT_SESS_QUEUE_DEPTH 512 27#define MAX_HDR_SIZE PAGE_SIZE 28 29static const struct rtrs_rdma_dev_pd_ops dev_pd_ops; 30static struct rtrs_rdma_dev_pd dev_pd = { 31 .ops = &dev_pd_ops 32}; 33const struct class rtrs_dev_class = { 34 .name = "rtrs-server", 35}; 36static struct rtrs_srv_ib_ctx ib_ctx; 37 38static int __read_mostly max_chunk_size = DEFAULT_MAX_CHUNK_SIZE; 39static int __read_mostly sess_queue_depth = DEFAULT_SESS_QUEUE_DEPTH; 40 41static bool always_invalidate = true; 42module_param(always_invalidate, bool, 0444); 43MODULE_PARM_DESC(always_invalidate, 44 "Invalidate memory registration for contiguous memory regions before accessing."); 45 46module_param_named(max_chunk_size, max_chunk_size, int, 0444); 47MODULE_PARM_DESC(max_chunk_size, 48 "Max size for each IO request, when change the unit is in byte (default: " 49 __stringify(DEFAULT_MAX_CHUNK_SIZE) "KB)"); 50 51module_param_named(sess_queue_depth, sess_queue_depth, int, 0444); 52MODULE_PARM_DESC(sess_queue_depth, 53 "Number of buffers for pending I/O requests to allocate per session. Maximum: " 54 __stringify(MAX_SESS_QUEUE_DEPTH) " (default: " 55 __stringify(DEFAULT_SESS_QUEUE_DEPTH) ")"); 56 57static cpumask_t cq_affinity_mask = { CPU_BITS_ALL }; 58 59static struct workqueue_struct *rtrs_wq; 60 61static inline struct rtrs_srv_con *to_srv_con(struct rtrs_con *c) 62{ 63 return container_of(c, struct rtrs_srv_con, c); 64} 65 66static bool rtrs_srv_change_state(struct rtrs_srv_path *srv_path, 67 enum rtrs_srv_state new_state) 68{ 69 enum rtrs_srv_state old_state; 70 bool changed = false; 71 unsigned long flags; 72 73 spin_lock_irqsave(&srv_path->state_lock, flags); 74 old_state = srv_path->state; 75 switch (new_state) { 76 case RTRS_SRV_CONNECTED: 77 if (old_state == RTRS_SRV_CONNECTING) 78 changed = true; 79 break; 80 case RTRS_SRV_CLOSING: 81 if (old_state == RTRS_SRV_CONNECTING || 82 old_state == RTRS_SRV_CONNECTED) 83 changed = true; 84 break; 85 case RTRS_SRV_CLOSED: 86 if (old_state == RTRS_SRV_CLOSING) 87 changed = true; 88 break; 89 default: 90 break; 91 } 92 if (changed) 93 srv_path->state = new_state; 94 spin_unlock_irqrestore(&srv_path->state_lock, flags); 95 96 return changed; 97} 98 99static void free_id(struct rtrs_srv_op *id) 100{ 101 if (!id) 102 return; 103 kfree(id); 104} 105 106static void rtrs_srv_free_ops_ids(struct rtrs_srv_path *srv_path) 107{ 108 struct rtrs_srv_sess *srv = srv_path->srv; 109 int i; 110 111 if (srv_path->ops_ids) { 112 for (i = 0; i < srv->queue_depth; i++) 113 free_id(srv_path->ops_ids[i]); 114 kfree(srv_path->ops_ids); 115 srv_path->ops_ids = NULL; 116 } 117} 118 119static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc); 120 121static struct ib_cqe io_comp_cqe = { 122 .done = rtrs_srv_rdma_done 123}; 124 125static inline void rtrs_srv_inflight_ref_release(struct percpu_ref *ref) 126{ 127 struct rtrs_srv_path *srv_path = container_of(ref, 128 struct rtrs_srv_path, 129 ids_inflight_ref); 130 131 percpu_ref_exit(&srv_path->ids_inflight_ref); 132 complete(&srv_path->complete_done); 133} 134 135static int rtrs_srv_alloc_ops_ids(struct rtrs_srv_path *srv_path) 136{ 137 struct rtrs_srv_sess *srv = srv_path->srv; 138 struct rtrs_srv_op *id; 139 int i, ret; 140 141 srv_path->ops_ids = kcalloc(srv->queue_depth, 142 sizeof(*srv_path->ops_ids), 143 GFP_KERNEL); 144 if (!srv_path->ops_ids) 145 goto err; 146 147 for (i = 0; i < srv->queue_depth; ++i) { 148 id = kzalloc(sizeof(*id), GFP_KERNEL); 149 if (!id) 150 goto err; 151 152 srv_path->ops_ids[i] = id; 153 } 154 155 ret = percpu_ref_init(&srv_path->ids_inflight_ref, 156 rtrs_srv_inflight_ref_release, 0, GFP_KERNEL); 157 if (ret) { 158 pr_err("Percpu reference init failed\n"); 159 goto err; 160 } 161 init_completion(&srv_path->complete_done); 162 163 return 0; 164 165err: 166 rtrs_srv_free_ops_ids(srv_path); 167 return -ENOMEM; 168} 169 170static inline void rtrs_srv_get_ops_ids(struct rtrs_srv_path *srv_path) 171{ 172 percpu_ref_get(&srv_path->ids_inflight_ref); 173} 174 175static inline void rtrs_srv_put_ops_ids(struct rtrs_srv_path *srv_path) 176{ 177 percpu_ref_put(&srv_path->ids_inflight_ref); 178} 179 180static void rtrs_srv_reg_mr_done(struct ib_cq *cq, struct ib_wc *wc) 181{ 182 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context); 183 struct rtrs_path *s = con->c.path; 184 struct rtrs_srv_path *srv_path = to_srv_path(s); 185 186 if (wc->status != IB_WC_SUCCESS) { 187 rtrs_err(s, "REG MR failed: %s\n", 188 ib_wc_status_msg(wc->status)); 189 close_path(srv_path); 190 return; 191 } 192} 193 194static struct ib_cqe local_reg_cqe = { 195 .done = rtrs_srv_reg_mr_done 196}; 197 198static int rdma_write_sg(struct rtrs_srv_op *id) 199{ 200 struct rtrs_path *s = id->con->c.path; 201 struct rtrs_srv_path *srv_path = to_srv_path(s); 202 dma_addr_t dma_addr = srv_path->dma_addr[id->msg_id]; 203 struct rtrs_srv_mr *srv_mr; 204 struct ib_send_wr inv_wr; 205 struct ib_rdma_wr imm_wr; 206 struct ib_rdma_wr *wr = NULL; 207 enum ib_send_flags flags; 208 size_t sg_cnt; 209 int err, offset; 210 bool need_inval; 211 struct ib_reg_wr rwr; 212 struct ib_sge *plist; 213 struct ib_sge list; 214 215 sg_cnt = le16_to_cpu(id->rd_msg->sg_cnt); 216 need_inval = le16_to_cpu(id->rd_msg->flags) & RTRS_MSG_NEED_INVAL_F; 217 if (sg_cnt != 1) 218 return -EINVAL; 219 220 offset = 0; 221 222 wr = &id->tx_wr; 223 plist = &id->tx_sg; 224 plist->addr = dma_addr + offset; 225 plist->length = le32_to_cpu(id->rd_msg->desc[0].len); 226 227 /* WR will fail with length error 228 * if this is 0 229 */ 230 if (plist->length == 0) { 231 rtrs_err(s, "Invalid RDMA-Write sg list length 0\n"); 232 return -EINVAL; 233 } 234 235 plist->lkey = srv_path->s.dev->ib_pd->local_dma_lkey; 236 offset += plist->length; 237 238 wr->wr.sg_list = plist; 239 wr->wr.num_sge = 1; 240 wr->remote_addr = le64_to_cpu(id->rd_msg->desc[0].addr); 241 wr->rkey = le32_to_cpu(id->rd_msg->desc[0].key); 242 243 wr->wr.opcode = IB_WR_RDMA_WRITE; 244 wr->wr.wr_cqe = &io_comp_cqe; 245 wr->wr.ex.imm_data = 0; 246 wr->wr.send_flags = 0; 247 248 if (need_inval && always_invalidate) { 249 wr->wr.next = &rwr.wr; 250 rwr.wr.next = &inv_wr; 251 inv_wr.next = &imm_wr.wr; 252 } else if (always_invalidate) { 253 wr->wr.next = &rwr.wr; 254 rwr.wr.next = &imm_wr.wr; 255 } else if (need_inval) { 256 wr->wr.next = &inv_wr; 257 inv_wr.next = &imm_wr.wr; 258 } else { 259 wr->wr.next = &imm_wr.wr; 260 } 261 /* 262 * From time to time we have to post signaled sends, 263 * or send queue will fill up and only QP reset can help. 264 */ 265 flags = (atomic_inc_return(&id->con->c.wr_cnt) % s->signal_interval) ? 266 0 : IB_SEND_SIGNALED; 267 268 if (need_inval) { 269 inv_wr.sg_list = NULL; 270 inv_wr.num_sge = 0; 271 inv_wr.opcode = IB_WR_SEND_WITH_INV; 272 inv_wr.wr_cqe = &io_comp_cqe; 273 inv_wr.send_flags = 0; 274 inv_wr.ex.invalidate_rkey = wr->rkey; 275 } 276 277 imm_wr.wr.next = NULL; 278 if (always_invalidate) { 279 struct rtrs_msg_rkey_rsp *msg; 280 281 srv_mr = &srv_path->mrs[id->msg_id]; 282 rwr.wr.opcode = IB_WR_REG_MR; 283 rwr.wr.wr_cqe = &local_reg_cqe; 284 rwr.wr.num_sge = 0; 285 rwr.mr = srv_mr->mr; 286 rwr.wr.send_flags = 0; 287 rwr.key = srv_mr->mr->rkey; 288 rwr.access = (IB_ACCESS_LOCAL_WRITE | 289 IB_ACCESS_REMOTE_WRITE); 290 msg = srv_mr->iu->buf; 291 msg->buf_id = cpu_to_le16(id->msg_id); 292 msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP); 293 msg->rkey = cpu_to_le32(srv_mr->mr->rkey); 294 295 list.addr = srv_mr->iu->dma_addr; 296 list.length = sizeof(*msg); 297 list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey; 298 imm_wr.wr.sg_list = &list; 299 imm_wr.wr.num_sge = 1; 300 imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM; 301 ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, 302 srv_mr->iu->dma_addr, 303 srv_mr->iu->size, DMA_TO_DEVICE); 304 } else { 305 imm_wr.wr.sg_list = NULL; 306 imm_wr.wr.num_sge = 0; 307 imm_wr.wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM; 308 } 309 imm_wr.wr.send_flags = flags; 310 imm_wr.wr.ex.imm_data = cpu_to_be32(rtrs_to_io_rsp_imm(id->msg_id, 311 0, need_inval)); 312 313 imm_wr.wr.wr_cqe = &io_comp_cqe; 314 ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, dma_addr, 315 offset, DMA_BIDIRECTIONAL); 316 317 err = ib_post_send(id->con->c.qp, &id->tx_wr.wr, NULL); 318 if (err) 319 rtrs_err(s, 320 "Posting RDMA-Write-Request to QP failed, err: %d\n", 321 err); 322 323 return err; 324} 325 326/** 327 * send_io_resp_imm() - respond to client with empty IMM on failed READ/WRITE 328 * requests or on successful WRITE request. 329 * @con: the connection to send back result 330 * @id: the id associated with the IO 331 * @errno: the error number of the IO. 332 * 333 * Return 0 on success, errno otherwise. 334 */ 335static int send_io_resp_imm(struct rtrs_srv_con *con, struct rtrs_srv_op *id, 336 int errno) 337{ 338 struct rtrs_path *s = con->c.path; 339 struct rtrs_srv_path *srv_path = to_srv_path(s); 340 struct ib_send_wr inv_wr, *wr = NULL; 341 struct ib_rdma_wr imm_wr; 342 struct ib_reg_wr rwr; 343 struct rtrs_srv_mr *srv_mr; 344 bool need_inval = false; 345 enum ib_send_flags flags; 346 struct ib_sge list; 347 u32 imm; 348 int err; 349 350 if (id->dir == READ) { 351 struct rtrs_msg_rdma_read *rd_msg = id->rd_msg; 352 size_t sg_cnt; 353 354 need_inval = le16_to_cpu(rd_msg->flags) & 355 RTRS_MSG_NEED_INVAL_F; 356 sg_cnt = le16_to_cpu(rd_msg->sg_cnt); 357 358 if (need_inval) { 359 if (sg_cnt) { 360 inv_wr.wr_cqe = &io_comp_cqe; 361 inv_wr.sg_list = NULL; 362 inv_wr.num_sge = 0; 363 inv_wr.opcode = IB_WR_SEND_WITH_INV; 364 inv_wr.send_flags = 0; 365 /* Only one key is actually used */ 366 inv_wr.ex.invalidate_rkey = 367 le32_to_cpu(rd_msg->desc[0].key); 368 } else { 369 WARN_ON_ONCE(1); 370 need_inval = false; 371 } 372 } 373 } 374 375 trace_send_io_resp_imm(id, need_inval, always_invalidate, errno); 376 377 if (need_inval && always_invalidate) { 378 wr = &inv_wr; 379 inv_wr.next = &rwr.wr; 380 rwr.wr.next = &imm_wr.wr; 381 } else if (always_invalidate) { 382 wr = &rwr.wr; 383 rwr.wr.next = &imm_wr.wr; 384 } else if (need_inval) { 385 wr = &inv_wr; 386 inv_wr.next = &imm_wr.wr; 387 } else { 388 wr = &imm_wr.wr; 389 } 390 /* 391 * From time to time we have to post signalled sends, 392 * or send queue will fill up and only QP reset can help. 393 */ 394 flags = (atomic_inc_return(&con->c.wr_cnt) % s->signal_interval) ? 395 0 : IB_SEND_SIGNALED; 396 imm = rtrs_to_io_rsp_imm(id->msg_id, errno, need_inval); 397 imm_wr.wr.next = NULL; 398 if (always_invalidate) { 399 struct rtrs_msg_rkey_rsp *msg; 400 401 srv_mr = &srv_path->mrs[id->msg_id]; 402 rwr.wr.next = &imm_wr.wr; 403 rwr.wr.opcode = IB_WR_REG_MR; 404 rwr.wr.wr_cqe = &local_reg_cqe; 405 rwr.wr.num_sge = 0; 406 rwr.wr.send_flags = 0; 407 rwr.mr = srv_mr->mr; 408 rwr.key = srv_mr->mr->rkey; 409 rwr.access = (IB_ACCESS_LOCAL_WRITE | 410 IB_ACCESS_REMOTE_WRITE); 411 msg = srv_mr->iu->buf; 412 msg->buf_id = cpu_to_le16(id->msg_id); 413 msg->type = cpu_to_le16(RTRS_MSG_RKEY_RSP); 414 msg->rkey = cpu_to_le32(srv_mr->mr->rkey); 415 416 list.addr = srv_mr->iu->dma_addr; 417 list.length = sizeof(*msg); 418 list.lkey = srv_path->s.dev->ib_pd->local_dma_lkey; 419 imm_wr.wr.sg_list = &list; 420 imm_wr.wr.num_sge = 1; 421 imm_wr.wr.opcode = IB_WR_SEND_WITH_IMM; 422 ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, 423 srv_mr->iu->dma_addr, 424 srv_mr->iu->size, DMA_TO_DEVICE); 425 } else { 426 imm_wr.wr.sg_list = NULL; 427 imm_wr.wr.num_sge = 0; 428 imm_wr.wr.opcode = IB_WR_RDMA_WRITE_WITH_IMM; 429 } 430 imm_wr.wr.send_flags = flags; 431 imm_wr.wr.wr_cqe = &io_comp_cqe; 432 433 imm_wr.wr.ex.imm_data = cpu_to_be32(imm); 434 435 err = ib_post_send(id->con->c.qp, wr, NULL); 436 if (err) 437 rtrs_err_rl(s, "Posting RDMA-Reply to QP failed, err: %d\n", 438 err); 439 440 return err; 441} 442 443void close_path(struct rtrs_srv_path *srv_path) 444{ 445 if (rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSING)) 446 queue_work(rtrs_wq, &srv_path->close_work); 447 WARN_ON(srv_path->state != RTRS_SRV_CLOSING); 448} 449 450static inline const char *rtrs_srv_state_str(enum rtrs_srv_state state) 451{ 452 switch (state) { 453 case RTRS_SRV_CONNECTING: 454 return "RTRS_SRV_CONNECTING"; 455 case RTRS_SRV_CONNECTED: 456 return "RTRS_SRV_CONNECTED"; 457 case RTRS_SRV_CLOSING: 458 return "RTRS_SRV_CLOSING"; 459 case RTRS_SRV_CLOSED: 460 return "RTRS_SRV_CLOSED"; 461 default: 462 return "UNKNOWN"; 463 } 464} 465 466/** 467 * rtrs_srv_resp_rdma() - Finish an RDMA request 468 * 469 * @id: Internal RTRS operation identifier 470 * @status: Response Code sent to the other side for this operation. 471 * 0 = success, <=0 error 472 * Context: any 473 * 474 * Finish a RDMA operation. A message is sent to the client and the 475 * corresponding memory areas will be released. 476 */ 477bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int status) 478{ 479 struct rtrs_srv_path *srv_path; 480 struct rtrs_srv_con *con; 481 struct rtrs_path *s; 482 int err; 483 484 if (WARN_ON(!id)) 485 return true; 486 487 con = id->con; 488 s = con->c.path; 489 srv_path = to_srv_path(s); 490 491 id->status = status; 492 493 if (srv_path->state != RTRS_SRV_CONNECTED) { 494 rtrs_err_rl(s, 495 "Sending I/O response failed, server path %s is disconnected, path state %s\n", 496 kobject_name(&srv_path->kobj), 497 rtrs_srv_state_str(srv_path->state)); 498 goto out; 499 } 500 if (always_invalidate) { 501 struct rtrs_srv_mr *mr = &srv_path->mrs[id->msg_id]; 502 503 ib_update_fast_reg_key(mr->mr, ib_inc_rkey(mr->mr->rkey)); 504 } 505 if (atomic_sub_return(1, &con->c.sq_wr_avail) < 0) { 506 rtrs_err(s, "IB send queue full: srv_path=%s cid=%d\n", 507 kobject_name(&srv_path->kobj), 508 con->c.cid); 509 atomic_add(1, &con->c.sq_wr_avail); 510 spin_lock(&con->rsp_wr_wait_lock); 511 list_add_tail(&id->wait_list, &con->rsp_wr_wait_list); 512 spin_unlock(&con->rsp_wr_wait_lock); 513 return false; 514 } 515 516 if (status || id->dir == WRITE || !id->rd_msg->sg_cnt) 517 err = send_io_resp_imm(con, id, status); 518 else 519 err = rdma_write_sg(id); 520 521 if (err) { 522 rtrs_err_rl(s, "IO response failed: %d: srv_path=%s\n", err, 523 kobject_name(&srv_path->kobj)); 524 close_path(srv_path); 525 } 526out: 527 rtrs_srv_put_ops_ids(srv_path); 528 return true; 529} 530EXPORT_SYMBOL(rtrs_srv_resp_rdma); 531 532/** 533 * rtrs_srv_set_sess_priv() - Set private pointer in rtrs_srv. 534 * @srv: Session pointer 535 * @priv: The private pointer that is associated with the session. 536 */ 537void rtrs_srv_set_sess_priv(struct rtrs_srv_sess *srv, void *priv) 538{ 539 srv->priv = priv; 540} 541EXPORT_SYMBOL(rtrs_srv_set_sess_priv); 542 543static void unmap_cont_bufs(struct rtrs_srv_path *srv_path) 544{ 545 int i; 546 547 for (i = 0; i < srv_path->mrs_num; i++) { 548 struct rtrs_srv_mr *srv_mr; 549 550 srv_mr = &srv_path->mrs[i]; 551 552 if (always_invalidate) 553 rtrs_iu_free(srv_mr->iu, srv_path->s.dev->ib_dev, 1); 554 555 ib_dereg_mr(srv_mr->mr); 556 ib_dma_unmap_sg(srv_path->s.dev->ib_dev, srv_mr->sgt.sgl, 557 srv_mr->sgt.nents, DMA_BIDIRECTIONAL); 558 sg_free_table(&srv_mr->sgt); 559 } 560 kfree(srv_path->mrs); 561} 562 563static int map_cont_bufs(struct rtrs_srv_path *srv_path) 564{ 565 struct rtrs_srv_sess *srv = srv_path->srv; 566 struct rtrs_path *ss = &srv_path->s; 567 int i, err, mrs_num; 568 unsigned int chunk_bits; 569 int chunks_per_mr = 1; 570 struct ib_mr *mr; 571 struct sg_table *sgt; 572 573 /* 574 * Here we map queue_depth chunks to MR. Firstly we have to 575 * figure out how many chunks can we map per MR. 576 */ 577 if (always_invalidate) { 578 /* 579 * in order to do invalidate for each chunks of memory, we needs 580 * more memory regions. 581 */ 582 mrs_num = srv->queue_depth; 583 } else { 584 chunks_per_mr = 585 srv_path->s.dev->ib_dev->attrs.max_fast_reg_page_list_len; 586 mrs_num = DIV_ROUND_UP(srv->queue_depth, chunks_per_mr); 587 chunks_per_mr = DIV_ROUND_UP(srv->queue_depth, mrs_num); 588 } 589 590 srv_path->mrs = kcalloc(mrs_num, sizeof(*srv_path->mrs), GFP_KERNEL); 591 if (!srv_path->mrs) 592 return -ENOMEM; 593 594 for (srv_path->mrs_num = 0; srv_path->mrs_num < mrs_num; 595 srv_path->mrs_num++) { 596 struct rtrs_srv_mr *srv_mr = &srv_path->mrs[srv_path->mrs_num]; 597 struct scatterlist *s; 598 int nr, nr_sgt, chunks, ind; 599 600 sgt = &srv_mr->sgt; 601 chunks = chunks_per_mr * srv_path->mrs_num; 602 if (!always_invalidate) 603 chunks_per_mr = min_t(int, chunks_per_mr, 604 srv->queue_depth - chunks); 605 606 err = sg_alloc_table(sgt, chunks_per_mr, GFP_KERNEL); 607 if (err) 608 goto err; 609 610 for_each_sg(sgt->sgl, s, chunks_per_mr, i) 611 sg_set_page(s, srv->chunks[chunks + i], 612 max_chunk_size, 0); 613 614 nr_sgt = ib_dma_map_sg(srv_path->s.dev->ib_dev, sgt->sgl, 615 sgt->nents, DMA_BIDIRECTIONAL); 616 if (!nr_sgt) { 617 err = -EINVAL; 618 goto free_sg; 619 } 620 mr = ib_alloc_mr(srv_path->s.dev->ib_pd, IB_MR_TYPE_MEM_REG, 621 nr_sgt); 622 if (IS_ERR(mr)) { 623 err = PTR_ERR(mr); 624 goto unmap_sg; 625 } 626 nr = ib_map_mr_sg(mr, sgt->sgl, nr_sgt, 627 NULL, max_chunk_size); 628 if (nr < nr_sgt) { 629 err = nr < 0 ? nr : -EINVAL; 630 goto dereg_mr; 631 } 632 633 if (always_invalidate) { 634 srv_mr->iu = rtrs_iu_alloc(1, 635 sizeof(struct rtrs_msg_rkey_rsp), 636 GFP_KERNEL, srv_path->s.dev->ib_dev, 637 DMA_TO_DEVICE, rtrs_srv_rdma_done); 638 if (!srv_mr->iu) { 639 err = -ENOMEM; 640 rtrs_err(ss, "rtrs_iu_alloc(), err: %d\n", err); 641 goto dereg_mr; 642 } 643 } 644 645 /* 646 * Cache DMA addresses by traversing sg entries. If 647 * regions were merged, an inner loop is required to 648 * populate the DMA address array by traversing larger 649 * regions. 650 */ 651 ind = chunks; 652 for_each_sg(sgt->sgl, s, nr_sgt, i) { 653 unsigned int dma_len = sg_dma_len(s); 654 u64 dma_addr = sg_dma_address(s); 655 u64 dma_addr_end = dma_addr + dma_len; 656 657 do { 658 srv_path->dma_addr[ind++] = dma_addr; 659 dma_addr += max_chunk_size; 660 } while (dma_addr < dma_addr_end); 661 } 662 663 ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey)); 664 srv_mr->mr = mr; 665 } 666 667 chunk_bits = ilog2(srv->queue_depth - 1) + 1; 668 srv_path->mem_bits = (MAX_IMM_PAYL_BITS - chunk_bits); 669 670 return 0; 671 672dereg_mr: 673 ib_dereg_mr(mr); 674unmap_sg: 675 ib_dma_unmap_sg(srv_path->s.dev->ib_dev, sgt->sgl, 676 sgt->nents, DMA_BIDIRECTIONAL); 677free_sg: 678 sg_free_table(sgt); 679err: 680 unmap_cont_bufs(srv_path); 681 682 return err; 683} 684 685static void rtrs_srv_hb_err_handler(struct rtrs_con *c) 686{ 687 struct rtrs_srv_con *con = container_of(c, typeof(*con), c); 688 struct rtrs_srv_path *srv_path = to_srv_path(con->c.path); 689 690 rtrs_err(con->c.path, "HB err handler for path=%s\n", kobject_name(&srv_path->kobj)); 691 close_path(to_srv_path(c->path)); 692} 693 694static void rtrs_srv_init_hb(struct rtrs_srv_path *srv_path) 695{ 696 rtrs_init_hb(&srv_path->s, &io_comp_cqe, 697 RTRS_HB_INTERVAL_MS, 698 RTRS_HB_MISSED_MAX, 699 rtrs_srv_hb_err_handler, 700 rtrs_wq); 701} 702 703static void rtrs_srv_start_hb(struct rtrs_srv_path *srv_path) 704{ 705 rtrs_start_hb(&srv_path->s); 706} 707 708static void rtrs_srv_stop_hb(struct rtrs_srv_path *srv_path) 709{ 710 rtrs_stop_hb(&srv_path->s); 711} 712 713static void rtrs_srv_info_rsp_done(struct ib_cq *cq, struct ib_wc *wc) 714{ 715 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context); 716 struct rtrs_path *s = con->c.path; 717 struct rtrs_srv_path *srv_path = to_srv_path(s); 718 struct rtrs_iu *iu; 719 720 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); 721 rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1); 722 723 if (wc->status != IB_WC_SUCCESS) { 724 rtrs_err(s, "Sess info response send failed: %s\n", 725 ib_wc_status_msg(wc->status)); 726 close_path(srv_path); 727 return; 728 } 729 WARN_ON(wc->opcode != IB_WC_SEND); 730} 731 732static int rtrs_srv_path_up(struct rtrs_srv_path *srv_path) 733{ 734 struct rtrs_srv_sess *srv = srv_path->srv; 735 struct rtrs_srv_ctx *ctx = srv->ctx; 736 int up, ret = 0; 737 738 mutex_lock(&srv->paths_ev_mutex); 739 up = ++srv->paths_up; 740 if (up == 1) 741 ret = ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_CONNECTED, NULL); 742 mutex_unlock(&srv->paths_ev_mutex); 743 744 /* Mark session as established */ 745 if (!ret) 746 srv_path->established = true; 747 748 return ret; 749} 750 751static void rtrs_srv_path_down(struct rtrs_srv_path *srv_path) 752{ 753 struct rtrs_srv_sess *srv = srv_path->srv; 754 struct rtrs_srv_ctx *ctx = srv->ctx; 755 756 if (!srv_path->established) 757 return; 758 759 srv_path->established = false; 760 mutex_lock(&srv->paths_ev_mutex); 761 WARN_ON(!srv->paths_up); 762 if (--srv->paths_up == 0) 763 ctx->ops.link_ev(srv, RTRS_SRV_LINK_EV_DISCONNECTED, srv->priv); 764 mutex_unlock(&srv->paths_ev_mutex); 765} 766 767static bool exist_pathname(struct rtrs_srv_ctx *ctx, 768 const char *pathname, const uuid_t *path_uuid) 769{ 770 struct rtrs_srv_sess *srv; 771 struct rtrs_srv_path *srv_path; 772 bool found = false; 773 774 mutex_lock(&ctx->srv_mutex); 775 list_for_each_entry(srv, &ctx->srv_list, ctx_list) { 776 mutex_lock(&srv->paths_mutex); 777 778 /* when a client with same uuid and same sessname tried to add a path */ 779 if (uuid_equal(&srv->paths_uuid, path_uuid)) { 780 mutex_unlock(&srv->paths_mutex); 781 continue; 782 } 783 784 list_for_each_entry(srv_path, &srv->paths_list, s.entry) { 785 if (strlen(srv_path->s.sessname) == strlen(pathname) && 786 !strcmp(srv_path->s.sessname, pathname)) { 787 found = true; 788 break; 789 } 790 } 791 mutex_unlock(&srv->paths_mutex); 792 if (found) 793 break; 794 } 795 mutex_unlock(&ctx->srv_mutex); 796 return found; 797} 798 799static int post_recv_path(struct rtrs_srv_path *srv_path); 800static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno); 801 802static int process_info_req(struct rtrs_srv_con *con, 803 struct rtrs_msg_info_req *msg) 804{ 805 struct rtrs_path *s = con->c.path; 806 struct rtrs_srv_path *srv_path = to_srv_path(s); 807 struct ib_send_wr *reg_wr = NULL; 808 struct rtrs_msg_info_rsp *rsp; 809 struct rtrs_iu *tx_iu; 810 struct ib_reg_wr *rwr; 811 int mri, err; 812 size_t tx_sz; 813 814 err = post_recv_path(srv_path); 815 if (err) { 816 rtrs_err(s, "post_recv_path(), err: %d\n", err); 817 return err; 818 } 819 820 if (strchr(msg->pathname, '/') || strchr(msg->pathname, '.')) { 821 rtrs_err(s, "pathname cannot contain / and .\n"); 822 return -EINVAL; 823 } 824 825 if (exist_pathname(srv_path->srv->ctx, 826 msg->pathname, &srv_path->srv->paths_uuid)) { 827 rtrs_err(s, "pathname is duplicated: %s\n", msg->pathname); 828 return -EPERM; 829 } 830 strscpy(srv_path->s.sessname, msg->pathname, 831 sizeof(srv_path->s.sessname)); 832 833 rwr = kcalloc(srv_path->mrs_num, sizeof(*rwr), GFP_KERNEL); 834 if (!rwr) 835 return -ENOMEM; 836 837 tx_sz = sizeof(*rsp); 838 tx_sz += sizeof(rsp->desc[0]) * srv_path->mrs_num; 839 tx_iu = rtrs_iu_alloc(1, tx_sz, GFP_KERNEL, srv_path->s.dev->ib_dev, 840 DMA_TO_DEVICE, rtrs_srv_info_rsp_done); 841 if (!tx_iu) { 842 err = -ENOMEM; 843 goto rwr_free; 844 } 845 846 rsp = tx_iu->buf; 847 rsp->type = cpu_to_le16(RTRS_MSG_INFO_RSP); 848 rsp->sg_cnt = cpu_to_le16(srv_path->mrs_num); 849 850 for (mri = 0; mri < srv_path->mrs_num; mri++) { 851 struct ib_mr *mr = srv_path->mrs[mri].mr; 852 853 rsp->desc[mri].addr = cpu_to_le64(mr->iova); 854 rsp->desc[mri].key = cpu_to_le32(mr->rkey); 855 rsp->desc[mri].len = cpu_to_le32(mr->length); 856 857 /* 858 * Fill in reg MR request and chain them *backwards* 859 */ 860 rwr[mri].wr.next = mri ? &rwr[mri - 1].wr : NULL; 861 rwr[mri].wr.opcode = IB_WR_REG_MR; 862 rwr[mri].wr.wr_cqe = &local_reg_cqe; 863 rwr[mri].wr.num_sge = 0; 864 rwr[mri].wr.send_flags = 0; 865 rwr[mri].mr = mr; 866 rwr[mri].key = mr->rkey; 867 rwr[mri].access = (IB_ACCESS_LOCAL_WRITE | 868 IB_ACCESS_REMOTE_WRITE); 869 reg_wr = &rwr[mri].wr; 870 } 871 872 err = rtrs_srv_create_path_files(srv_path); 873 if (err) 874 goto iu_free; 875 kobject_get(&srv_path->kobj); 876 get_device(&srv_path->srv->dev); 877 err = rtrs_srv_change_state(srv_path, RTRS_SRV_CONNECTED); 878 if (!err) { 879 rtrs_err(s, "rtrs_srv_change_state(), err: %d\n", err); 880 goto iu_free; 881 } 882 883 rtrs_srv_start_hb(srv_path); 884 885 /* 886 * We do not account number of established connections at the current 887 * moment, we rely on the client, which should send info request when 888 * all connections are successfully established. Thus, simply notify 889 * listener with a proper event if we are the first path. 890 */ 891 err = rtrs_srv_path_up(srv_path); 892 if (err) { 893 rtrs_err(s, "rtrs_srv_path_up(), err: %d\n", err); 894 goto iu_free; 895 } 896 897 ib_dma_sync_single_for_device(srv_path->s.dev->ib_dev, 898 tx_iu->dma_addr, 899 tx_iu->size, DMA_TO_DEVICE); 900 901 /* Send info response */ 902 err = rtrs_iu_post_send(&con->c, tx_iu, tx_sz, reg_wr); 903 if (err) { 904 rtrs_err(s, "rtrs_iu_post_send(), err: %d\n", err); 905iu_free: 906 rtrs_iu_free(tx_iu, srv_path->s.dev->ib_dev, 1); 907 } 908rwr_free: 909 kfree(rwr); 910 911 return err; 912} 913 914static void rtrs_srv_info_req_done(struct ib_cq *cq, struct ib_wc *wc) 915{ 916 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context); 917 struct rtrs_path *s = con->c.path; 918 struct rtrs_srv_path *srv_path = to_srv_path(s); 919 struct rtrs_msg_info_req *msg; 920 struct rtrs_iu *iu; 921 int err; 922 923 WARN_ON(con->c.cid); 924 925 iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); 926 if (wc->status != IB_WC_SUCCESS) { 927 rtrs_err(s, "Sess info request receive failed: %s\n", 928 ib_wc_status_msg(wc->status)); 929 goto close; 930 } 931 WARN_ON(wc->opcode != IB_WC_RECV); 932 933 if (wc->byte_len < sizeof(*msg)) { 934 rtrs_err(s, "Sess info request is malformed: size %d\n", 935 wc->byte_len); 936 goto close; 937 } 938 ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev, iu->dma_addr, 939 iu->size, DMA_FROM_DEVICE); 940 msg = iu->buf; 941 if (le16_to_cpu(msg->type) != RTRS_MSG_INFO_REQ) { 942 rtrs_err(s, "Sess info request is malformed: type %d\n", 943 le16_to_cpu(msg->type)); 944 goto close; 945 } 946 err = process_info_req(con, msg); 947 if (err) 948 goto close; 949 950 rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1); 951 return; 952close: 953 rtrs_iu_free(iu, srv_path->s.dev->ib_dev, 1); 954 close_path(srv_path); 955} 956 957static int post_recv_info_req(struct rtrs_srv_con *con) 958{ 959 struct rtrs_path *s = con->c.path; 960 struct rtrs_srv_path *srv_path = to_srv_path(s); 961 struct rtrs_iu *rx_iu; 962 int err; 963 964 rx_iu = rtrs_iu_alloc(1, sizeof(struct rtrs_msg_info_req), 965 GFP_KERNEL, srv_path->s.dev->ib_dev, 966 DMA_FROM_DEVICE, rtrs_srv_info_req_done); 967 if (!rx_iu) 968 return -ENOMEM; 969 /* Prepare for getting info response */ 970 err = rtrs_iu_post_recv(&con->c, rx_iu); 971 if (err) { 972 rtrs_err(s, "rtrs_iu_post_recv(), err: %d\n", err); 973 rtrs_iu_free(rx_iu, srv_path->s.dev->ib_dev, 1); 974 return err; 975 } 976 977 return 0; 978} 979 980static int post_recv_io(struct rtrs_srv_con *con, size_t q_size) 981{ 982 int i, err; 983 984 for (i = 0; i < q_size; i++) { 985 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe); 986 if (err) 987 return err; 988 } 989 990 return 0; 991} 992 993static int post_recv_path(struct rtrs_srv_path *srv_path) 994{ 995 struct rtrs_srv_sess *srv = srv_path->srv; 996 struct rtrs_path *s = &srv_path->s; 997 size_t q_size; 998 int err, cid; 999 1000 for (cid = 0; cid < srv_path->s.con_num; cid++) { 1001 if (cid == 0) 1002 q_size = SERVICE_CON_QUEUE_DEPTH; 1003 else 1004 q_size = srv->queue_depth; 1005 if (srv_path->state != RTRS_SRV_CONNECTING) { 1006 rtrs_err(s, "Path state invalid. state %s\n", 1007 rtrs_srv_state_str(srv_path->state)); 1008 return -EIO; 1009 } 1010 1011 if (!srv_path->s.con[cid]) { 1012 rtrs_err(s, "Conn not set for %d\n", cid); 1013 return -EIO; 1014 } 1015 1016 err = post_recv_io(to_srv_con(srv_path->s.con[cid]), q_size); 1017 if (err) { 1018 rtrs_err(s, "post_recv_io(), err: %d\n", err); 1019 return err; 1020 } 1021 } 1022 1023 return 0; 1024} 1025 1026static void process_read(struct rtrs_srv_con *con, 1027 struct rtrs_msg_rdma_read *msg, 1028 u32 buf_id, u32 off) 1029{ 1030 struct rtrs_path *s = con->c.path; 1031 struct rtrs_srv_path *srv_path = to_srv_path(s); 1032 struct rtrs_srv_sess *srv = srv_path->srv; 1033 struct rtrs_srv_ctx *ctx = srv->ctx; 1034 struct rtrs_srv_op *id; 1035 1036 size_t usr_len, data_len; 1037 void *data; 1038 int ret; 1039 1040 if (srv_path->state != RTRS_SRV_CONNECTED) { 1041 rtrs_err_rl(s, 1042 "Processing read request failed, session is disconnected, sess state %s\n", 1043 rtrs_srv_state_str(srv_path->state)); 1044 return; 1045 } 1046 if (msg->sg_cnt != 1 && msg->sg_cnt != 0) { 1047 rtrs_err_rl(s, 1048 "Processing read request failed, invalid message\n"); 1049 return; 1050 } 1051 rtrs_srv_get_ops_ids(srv_path); 1052 rtrs_srv_update_rdma_stats(srv_path->stats, off, READ); 1053 id = srv_path->ops_ids[buf_id]; 1054 id->con = con; 1055 id->dir = READ; 1056 id->msg_id = buf_id; 1057 id->rd_msg = msg; 1058 usr_len = le16_to_cpu(msg->usr_len); 1059 data_len = off - usr_len; 1060 data = page_address(srv->chunks[buf_id]); 1061 ret = ctx->ops.rdma_ev(srv->priv, id, data, data_len, 1062 data + data_len, usr_len); 1063 1064 if (ret) { 1065 rtrs_err_rl(s, 1066 "Processing read request failed, user module cb reported for msg_id %d, err: %d\n", 1067 buf_id, ret); 1068 goto send_err_msg; 1069 } 1070 1071 return; 1072 1073send_err_msg: 1074 ret = send_io_resp_imm(con, id, ret); 1075 if (ret < 0) { 1076 rtrs_err_rl(s, 1077 "Sending err msg for failed RDMA-Write-Req failed, msg_id %d, err: %d\n", 1078 buf_id, ret); 1079 close_path(srv_path); 1080 } 1081 rtrs_srv_put_ops_ids(srv_path); 1082} 1083 1084static void process_write(struct rtrs_srv_con *con, 1085 struct rtrs_msg_rdma_write *req, 1086 u32 buf_id, u32 off) 1087{ 1088 struct rtrs_path *s = con->c.path; 1089 struct rtrs_srv_path *srv_path = to_srv_path(s); 1090 struct rtrs_srv_sess *srv = srv_path->srv; 1091 struct rtrs_srv_ctx *ctx = srv->ctx; 1092 struct rtrs_srv_op *id; 1093 1094 size_t data_len, usr_len; 1095 void *data; 1096 int ret; 1097 1098 if (srv_path->state != RTRS_SRV_CONNECTED) { 1099 rtrs_err_rl(s, 1100 "Processing write request failed, session is disconnected, sess state %s\n", 1101 rtrs_srv_state_str(srv_path->state)); 1102 return; 1103 } 1104 rtrs_srv_get_ops_ids(srv_path); 1105 rtrs_srv_update_rdma_stats(srv_path->stats, off, WRITE); 1106 id = srv_path->ops_ids[buf_id]; 1107 id->con = con; 1108 id->dir = WRITE; 1109 id->msg_id = buf_id; 1110 1111 usr_len = le16_to_cpu(req->usr_len); 1112 data_len = off - usr_len; 1113 data = page_address(srv->chunks[buf_id]); 1114 ret = ctx->ops.rdma_ev(srv->priv, id, data, data_len, 1115 data + data_len, usr_len); 1116 if (ret) { 1117 rtrs_err_rl(s, 1118 "Processing write request failed, user module callback reports err: %d\n", 1119 ret); 1120 goto send_err_msg; 1121 } 1122 1123 return; 1124 1125send_err_msg: 1126 ret = send_io_resp_imm(con, id, ret); 1127 if (ret < 0) { 1128 rtrs_err_rl(s, 1129 "Processing write request failed, sending I/O response failed, msg_id %d, err: %d\n", 1130 buf_id, ret); 1131 close_path(srv_path); 1132 } 1133 rtrs_srv_put_ops_ids(srv_path); 1134} 1135 1136static void process_io_req(struct rtrs_srv_con *con, void *msg, 1137 u32 id, u32 off) 1138{ 1139 struct rtrs_path *s = con->c.path; 1140 struct rtrs_srv_path *srv_path = to_srv_path(s); 1141 struct rtrs_msg_rdma_hdr *hdr; 1142 unsigned int type; 1143 1144 ib_dma_sync_single_for_cpu(srv_path->s.dev->ib_dev, 1145 srv_path->dma_addr[id], 1146 max_chunk_size, DMA_BIDIRECTIONAL); 1147 hdr = msg; 1148 type = le16_to_cpu(hdr->type); 1149 1150 switch (type) { 1151 case RTRS_MSG_WRITE: 1152 process_write(con, msg, id, off); 1153 break; 1154 case RTRS_MSG_READ: 1155 process_read(con, msg, id, off); 1156 break; 1157 default: 1158 rtrs_err(s, 1159 "Processing I/O request failed, unknown message type received: 0x%02x\n", 1160 type); 1161 goto err; 1162 } 1163 1164 return; 1165 1166err: 1167 close_path(srv_path); 1168} 1169 1170static void rtrs_srv_inv_rkey_done(struct ib_cq *cq, struct ib_wc *wc) 1171{ 1172 struct rtrs_srv_mr *mr = 1173 container_of(wc->wr_cqe, typeof(*mr), inv_cqe); 1174 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context); 1175 struct rtrs_path *s = con->c.path; 1176 struct rtrs_srv_path *srv_path = to_srv_path(s); 1177 struct rtrs_srv_sess *srv = srv_path->srv; 1178 u32 msg_id, off; 1179 void *data; 1180 1181 if (wc->status != IB_WC_SUCCESS) { 1182 rtrs_err(s, "Failed IB_WR_LOCAL_INV: %s\n", 1183 ib_wc_status_msg(wc->status)); 1184 close_path(srv_path); 1185 } 1186 msg_id = mr->msg_id; 1187 off = mr->msg_off; 1188 data = page_address(srv->chunks[msg_id]) + off; 1189 process_io_req(con, data, msg_id, off); 1190} 1191 1192static int rtrs_srv_inv_rkey(struct rtrs_srv_con *con, 1193 struct rtrs_srv_mr *mr) 1194{ 1195 struct ib_send_wr wr = { 1196 .opcode = IB_WR_LOCAL_INV, 1197 .wr_cqe = &mr->inv_cqe, 1198 .send_flags = IB_SEND_SIGNALED, 1199 .ex.invalidate_rkey = mr->mr->rkey, 1200 }; 1201 mr->inv_cqe.done = rtrs_srv_inv_rkey_done; 1202 1203 return ib_post_send(con->c.qp, &wr, NULL); 1204} 1205 1206static void rtrs_rdma_process_wr_wait_list(struct rtrs_srv_con *con) 1207{ 1208 spin_lock(&con->rsp_wr_wait_lock); 1209 while (!list_empty(&con->rsp_wr_wait_list)) { 1210 struct rtrs_srv_op *id; 1211 int ret; 1212 1213 id = list_entry(con->rsp_wr_wait_list.next, 1214 struct rtrs_srv_op, wait_list); 1215 list_del(&id->wait_list); 1216 1217 spin_unlock(&con->rsp_wr_wait_lock); 1218 ret = rtrs_srv_resp_rdma(id, id->status); 1219 spin_lock(&con->rsp_wr_wait_lock); 1220 1221 if (!ret) { 1222 list_add(&id->wait_list, &con->rsp_wr_wait_list); 1223 break; 1224 } 1225 } 1226 spin_unlock(&con->rsp_wr_wait_lock); 1227} 1228 1229static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc) 1230{ 1231 struct rtrs_srv_con *con = to_srv_con(wc->qp->qp_context); 1232 struct rtrs_path *s = con->c.path; 1233 struct rtrs_srv_path *srv_path = to_srv_path(s); 1234 struct rtrs_srv_sess *srv = srv_path->srv; 1235 u32 imm_type, imm_payload; 1236 int err; 1237 1238 if (wc->status != IB_WC_SUCCESS) { 1239 if (wc->status != IB_WC_WR_FLUSH_ERR) { 1240 rtrs_err(s, 1241 "%s (wr_cqe: %p, type: %d, vendor_err: 0x%x, len: %u)\n", 1242 ib_wc_status_msg(wc->status), wc->wr_cqe, 1243 wc->opcode, wc->vendor_err, wc->byte_len); 1244 close_path(srv_path); 1245 } 1246 return; 1247 } 1248 1249 switch (wc->opcode) { 1250 case IB_WC_RECV_RDMA_WITH_IMM: 1251 /* 1252 * post_recv() RDMA write completions of IO reqs (read/write) 1253 * and hb 1254 */ 1255 if (WARN_ON(wc->wr_cqe != &io_comp_cqe)) 1256 return; 1257 srv_path->s.hb_missed_cnt = 0; 1258 err = rtrs_post_recv_empty(&con->c, &io_comp_cqe); 1259 if (err) { 1260 rtrs_err(s, "rtrs_post_recv(), err: %d\n", err); 1261 close_path(srv_path); 1262 break; 1263 } 1264 rtrs_from_imm(be32_to_cpu(wc->ex.imm_data), 1265 &imm_type, &imm_payload); 1266 if (imm_type == RTRS_IO_REQ_IMM) { 1267 u32 msg_id, off; 1268 void *data; 1269 1270 msg_id = imm_payload >> srv_path->mem_bits; 1271 off = imm_payload & ((1 << srv_path->mem_bits) - 1); 1272 if (msg_id >= srv->queue_depth || off >= max_chunk_size) { 1273 rtrs_err(s, "Wrong msg_id %u, off %u\n", 1274 msg_id, off); 1275 close_path(srv_path); 1276 return; 1277 } 1278 if (always_invalidate) { 1279 struct rtrs_srv_mr *mr = &srv_path->mrs[msg_id]; 1280 1281 mr->msg_off = off; 1282 mr->msg_id = msg_id; 1283 err = rtrs_srv_inv_rkey(con, mr); 1284 if (err) { 1285 rtrs_err(s, "rtrs_post_recv(), err: %d\n", 1286 err); 1287 close_path(srv_path); 1288 break; 1289 } 1290 } else { 1291 data = page_address(srv->chunks[msg_id]) + off; 1292 process_io_req(con, data, msg_id, off); 1293 } 1294 } else if (imm_type == RTRS_HB_MSG_IMM) { 1295 WARN_ON(con->c.cid); 1296 rtrs_send_hb_ack(&srv_path->s); 1297 } else if (imm_type == RTRS_HB_ACK_IMM) { 1298 WARN_ON(con->c.cid); 1299 srv_path->s.hb_missed_cnt = 0; 1300 } else { 1301 rtrs_wrn(s, "Unknown IMM type %u\n", imm_type); 1302 } 1303 break; 1304 case IB_WC_RDMA_WRITE: 1305 case IB_WC_SEND: 1306 /* 1307 * post_send() RDMA write completions of IO reqs (read/write) 1308 * and hb. 1309 */ 1310 atomic_add(s->signal_interval, &con->c.sq_wr_avail); 1311 1312 if (!list_empty_careful(&con->rsp_wr_wait_list)) 1313 rtrs_rdma_process_wr_wait_list(con); 1314 1315 break; 1316 default: 1317 rtrs_wrn(s, "Unexpected WC type: %d\n", wc->opcode); 1318 return; 1319 } 1320} 1321 1322/** 1323 * rtrs_srv_get_path_name() - Get rtrs_srv peer hostname. 1324 * @srv: Session 1325 * @pathname: Pathname buffer 1326 * @len: Length of sessname buffer 1327 */ 1328int rtrs_srv_get_path_name(struct rtrs_srv_sess *srv, char *pathname, 1329 size_t len) 1330{ 1331 struct rtrs_srv_path *srv_path; 1332 int err = -ENOTCONN; 1333 1334 mutex_lock(&srv->paths_mutex); 1335 list_for_each_entry(srv_path, &srv->paths_list, s.entry) { 1336 if (srv_path->state != RTRS_SRV_CONNECTED) 1337 continue; 1338 strscpy(pathname, srv_path->s.sessname, 1339 min_t(size_t, sizeof(srv_path->s.sessname), len)); 1340 err = 0; 1341 break; 1342 } 1343 mutex_unlock(&srv->paths_mutex); 1344 1345 return err; 1346} 1347EXPORT_SYMBOL(rtrs_srv_get_path_name); 1348 1349/** 1350 * rtrs_srv_get_queue_depth() - Get rtrs_srv qdepth. 1351 * @srv: Session 1352 */ 1353int rtrs_srv_get_queue_depth(struct rtrs_srv_sess *srv) 1354{ 1355 return srv->queue_depth; 1356} 1357EXPORT_SYMBOL(rtrs_srv_get_queue_depth); 1358 1359static int find_next_bit_ring(struct rtrs_srv_path *srv_path) 1360{ 1361 struct ib_device *ib_dev = srv_path->s.dev->ib_dev; 1362 int v; 1363 1364 v = cpumask_next(srv_path->cur_cq_vector, &cq_affinity_mask); 1365 if (v >= nr_cpu_ids || v >= ib_dev->num_comp_vectors) 1366 v = cpumask_first(&cq_affinity_mask); 1367 return v; 1368} 1369 1370static int rtrs_srv_get_next_cq_vector(struct rtrs_srv_path *srv_path) 1371{ 1372 srv_path->cur_cq_vector = find_next_bit_ring(srv_path); 1373 1374 return srv_path->cur_cq_vector; 1375} 1376 1377static void rtrs_srv_dev_release(struct device *dev) 1378{ 1379 struct rtrs_srv_sess *srv = container_of(dev, struct rtrs_srv_sess, 1380 dev); 1381 1382 kfree(srv); 1383} 1384 1385static void free_srv(struct rtrs_srv_sess *srv) 1386{ 1387 int i; 1388 1389 WARN_ON(refcount_read(&srv->refcount)); 1390 for (i = 0; i < srv->queue_depth; i++) 1391 __free_pages(srv->chunks[i], get_order(max_chunk_size)); 1392 kfree(srv->chunks); 1393 mutex_destroy(&srv->paths_mutex); 1394 mutex_destroy(&srv->paths_ev_mutex); 1395 /* last put to release the srv structure */ 1396 put_device(&srv->dev); 1397} 1398 1399static struct rtrs_srv_sess *get_or_create_srv(struct rtrs_srv_ctx *ctx, 1400 const uuid_t *paths_uuid, 1401 bool first_conn) 1402{ 1403 struct rtrs_srv_sess *srv; 1404 int i; 1405 1406 mutex_lock(&ctx->srv_mutex); 1407 list_for_each_entry(srv, &ctx->srv_list, ctx_list) { 1408 if (uuid_equal(&srv->paths_uuid, paths_uuid) && 1409 refcount_inc_not_zero(&srv->refcount)) { 1410 mutex_unlock(&ctx->srv_mutex); 1411 return srv; 1412 } 1413 } 1414 mutex_unlock(&ctx->srv_mutex); 1415 /* 1416 * If this request is not the first connection request from the 1417 * client for this session then fail and return error. 1418 */ 1419 if (!first_conn) { 1420 pr_err_ratelimited("Error: Not the first connection request for this session\n"); 1421 return ERR_PTR(-ENXIO); 1422 } 1423 1424 /* need to allocate a new srv */ 1425 srv = kzalloc(sizeof(*srv), GFP_KERNEL); 1426 if (!srv) 1427 return ERR_PTR(-ENOMEM); 1428 1429 INIT_LIST_HEAD(&srv->paths_list); 1430 mutex_init(&srv->paths_mutex); 1431 mutex_init(&srv->paths_ev_mutex); 1432 uuid_copy(&srv->paths_uuid, paths_uuid); 1433 srv->queue_depth = sess_queue_depth; 1434 srv->ctx = ctx; 1435 device_initialize(&srv->dev); 1436 srv->dev.release = rtrs_srv_dev_release; 1437 1438 srv->chunks = kcalloc(srv->queue_depth, sizeof(*srv->chunks), 1439 GFP_KERNEL); 1440 if (!srv->chunks) 1441 goto err_free_srv; 1442 1443 for (i = 0; i < srv->queue_depth; i++) { 1444 srv->chunks[i] = alloc_pages(GFP_KERNEL, 1445 get_order(max_chunk_size)); 1446 if (!srv->chunks[i]) 1447 goto err_free_chunks; 1448 } 1449 refcount_set(&srv->refcount, 1); 1450 mutex_lock(&ctx->srv_mutex); 1451 list_add(&srv->ctx_list, &ctx->srv_list); 1452 mutex_unlock(&ctx->srv_mutex); 1453 1454 return srv; 1455 1456err_free_chunks: 1457 while (i--) 1458 __free_pages(srv->chunks[i], get_order(max_chunk_size)); 1459 kfree(srv->chunks); 1460 1461err_free_srv: 1462 put_device(&srv->dev); 1463 return ERR_PTR(-ENOMEM); 1464} 1465 1466static void put_srv(struct rtrs_srv_sess *srv) 1467{ 1468 if (refcount_dec_and_test(&srv->refcount)) { 1469 struct rtrs_srv_ctx *ctx = srv->ctx; 1470 1471 WARN_ON(srv->dev.kobj.state_in_sysfs); 1472 1473 mutex_lock(&ctx->srv_mutex); 1474 list_del(&srv->ctx_list); 1475 mutex_unlock(&ctx->srv_mutex); 1476 free_srv(srv); 1477 } 1478} 1479 1480static void __add_path_to_srv(struct rtrs_srv_sess *srv, 1481 struct rtrs_srv_path *srv_path) 1482{ 1483 list_add_tail(&srv_path->s.entry, &srv->paths_list); 1484 srv->paths_num++; 1485 WARN_ON(srv->paths_num >= MAX_PATHS_NUM); 1486} 1487 1488static void del_path_from_srv(struct rtrs_srv_path *srv_path) 1489{ 1490 struct rtrs_srv_sess *srv = srv_path->srv; 1491 1492 if (WARN_ON(!srv)) 1493 return; 1494 1495 mutex_lock(&srv->paths_mutex); 1496 list_del(&srv_path->s.entry); 1497 WARN_ON(!srv->paths_num); 1498 srv->paths_num--; 1499 mutex_unlock(&srv->paths_mutex); 1500} 1501 1502/* return true if addresses are the same, error other wise */ 1503static int sockaddr_cmp(const struct sockaddr *a, const struct sockaddr *b) 1504{ 1505 switch (a->sa_family) { 1506 case AF_IB: 1507 return memcmp(&((struct sockaddr_ib *)a)->sib_addr, 1508 &((struct sockaddr_ib *)b)->sib_addr, 1509 sizeof(struct ib_addr)) && 1510 (b->sa_family == AF_IB); 1511 case AF_INET: 1512 return memcmp(&((struct sockaddr_in *)a)->sin_addr, 1513 &((struct sockaddr_in *)b)->sin_addr, 1514 sizeof(struct in_addr)) && 1515 (b->sa_family == AF_INET); 1516 case AF_INET6: 1517 return memcmp(&((struct sockaddr_in6 *)a)->sin6_addr, 1518 &((struct sockaddr_in6 *)b)->sin6_addr, 1519 sizeof(struct in6_addr)) && 1520 (b->sa_family == AF_INET6); 1521 default: 1522 return -ENOENT; 1523 } 1524} 1525 1526static bool __is_path_w_addr_exists(struct rtrs_srv_sess *srv, 1527 struct rdma_addr *addr) 1528{ 1529 struct rtrs_srv_path *srv_path; 1530 1531 list_for_each_entry(srv_path, &srv->paths_list, s.entry) 1532 if (!sockaddr_cmp((struct sockaddr *)&srv_path->s.dst_addr, 1533 (struct sockaddr *)&addr->dst_addr) && 1534 !sockaddr_cmp((struct sockaddr *)&srv_path->s.src_addr, 1535 (struct sockaddr *)&addr->src_addr)) 1536 return true; 1537 1538 return false; 1539} 1540 1541static void free_path(struct rtrs_srv_path *srv_path) 1542{ 1543 if (srv_path->kobj.state_in_sysfs) { 1544 kobject_del(&srv_path->kobj); 1545 kobject_put(&srv_path->kobj); 1546 } else { 1547 free_percpu(srv_path->stats->rdma_stats); 1548 kfree(srv_path->stats); 1549 kfree(srv_path); 1550 } 1551} 1552 1553static void rtrs_srv_close_work(struct work_struct *work) 1554{ 1555 struct rtrs_srv_path *srv_path; 1556 struct rtrs_srv_con *con; 1557 int i; 1558 1559 srv_path = container_of(work, typeof(*srv_path), close_work); 1560 1561 rtrs_srv_stop_hb(srv_path); 1562 1563 for (i = 0; i < srv_path->s.con_num; i++) { 1564 if (!srv_path->s.con[i]) 1565 continue; 1566 con = to_srv_con(srv_path->s.con[i]); 1567 rdma_disconnect(con->c.cm_id); 1568 ib_drain_qp(con->c.qp); 1569 } 1570 1571 /* 1572 * Degrade ref count to the usual model with a single shared 1573 * atomic_t counter 1574 */ 1575 percpu_ref_kill(&srv_path->ids_inflight_ref); 1576 1577 /* Wait for all completion */ 1578 wait_for_completion(&srv_path->complete_done); 1579 1580 rtrs_srv_destroy_path_files(srv_path); 1581 1582 /* Notify upper layer if we are the last path */ 1583 rtrs_srv_path_down(srv_path); 1584 1585 unmap_cont_bufs(srv_path); 1586 rtrs_srv_free_ops_ids(srv_path); 1587 1588 for (i = 0; i < srv_path->s.con_num; i++) { 1589 if (!srv_path->s.con[i]) 1590 continue; 1591 con = to_srv_con(srv_path->s.con[i]); 1592 rtrs_cq_qp_destroy(&con->c); 1593 rdma_destroy_id(con->c.cm_id); 1594 kfree(con); 1595 } 1596 rtrs_ib_dev_put(srv_path->s.dev); 1597 1598 del_path_from_srv(srv_path); 1599 put_srv(srv_path->srv); 1600 srv_path->srv = NULL; 1601 rtrs_srv_change_state(srv_path, RTRS_SRV_CLOSED); 1602 1603 kfree(srv_path->dma_addr); 1604 kfree(srv_path->s.con); 1605 free_path(srv_path); 1606} 1607 1608static int rtrs_rdma_do_accept(struct rtrs_srv_path *srv_path, 1609 struct rdma_cm_id *cm_id) 1610{ 1611 struct rtrs_srv_sess *srv = srv_path->srv; 1612 struct rtrs_msg_conn_rsp msg; 1613 struct rdma_conn_param param; 1614 int err; 1615 1616 param = (struct rdma_conn_param) { 1617 .rnr_retry_count = 7, 1618 .private_data = &msg, 1619 .private_data_len = sizeof(msg), 1620 }; 1621 1622 msg = (struct rtrs_msg_conn_rsp) { 1623 .magic = cpu_to_le16(RTRS_MAGIC), 1624 .version = cpu_to_le16(RTRS_PROTO_VER), 1625 .queue_depth = cpu_to_le16(srv->queue_depth), 1626 .max_io_size = cpu_to_le32(max_chunk_size - MAX_HDR_SIZE), 1627 .max_hdr_size = cpu_to_le32(MAX_HDR_SIZE), 1628 }; 1629 1630 if (always_invalidate) 1631 msg.flags = cpu_to_le32(RTRS_MSG_NEW_RKEY_F); 1632 1633 err = rdma_accept(cm_id, ¶m); 1634 if (err) 1635 pr_err("rdma_accept(), err: %d\n", err); 1636 1637 return err; 1638} 1639 1640static int rtrs_rdma_do_reject(struct rdma_cm_id *cm_id, int errno) 1641{ 1642 struct rtrs_msg_conn_rsp msg; 1643 int err; 1644 1645 msg = (struct rtrs_msg_conn_rsp) { 1646 .magic = cpu_to_le16(RTRS_MAGIC), 1647 .version = cpu_to_le16(RTRS_PROTO_VER), 1648 .errno = cpu_to_le16(errno), 1649 }; 1650 1651 err = rdma_reject(cm_id, &msg, sizeof(msg), IB_CM_REJ_CONSUMER_DEFINED); 1652 if (err) 1653 pr_err("rdma_reject(), err: %d\n", err); 1654 1655 /* Bounce errno back */ 1656 return errno; 1657} 1658 1659static struct rtrs_srv_path * 1660__find_path(struct rtrs_srv_sess *srv, const uuid_t *sess_uuid) 1661{ 1662 struct rtrs_srv_path *srv_path; 1663 1664 list_for_each_entry(srv_path, &srv->paths_list, s.entry) { 1665 if (uuid_equal(&srv_path->s.uuid, sess_uuid)) 1666 return srv_path; 1667 } 1668 1669 return NULL; 1670} 1671 1672static int create_con(struct rtrs_srv_path *srv_path, 1673 struct rdma_cm_id *cm_id, 1674 unsigned int cid) 1675{ 1676 struct rtrs_srv_sess *srv = srv_path->srv; 1677 struct rtrs_path *s = &srv_path->s; 1678 struct rtrs_srv_con *con; 1679 1680 u32 cq_num, max_send_wr, max_recv_wr, wr_limit; 1681 int err, cq_vector; 1682 1683 con = kzalloc(sizeof(*con), GFP_KERNEL); 1684 if (!con) { 1685 err = -ENOMEM; 1686 goto err; 1687 } 1688 1689 spin_lock_init(&con->rsp_wr_wait_lock); 1690 INIT_LIST_HEAD(&con->rsp_wr_wait_list); 1691 con->c.cm_id = cm_id; 1692 con->c.path = &srv_path->s; 1693 con->c.cid = cid; 1694 atomic_set(&con->c.wr_cnt, 1); 1695 wr_limit = srv_path->s.dev->ib_dev->attrs.max_qp_wr; 1696 1697 if (con->c.cid == 0) { 1698 /* 1699 * All receive and all send (each requiring invalidate) 1700 * + 2 for drain and heartbeat 1701 */ 1702 max_send_wr = min_t(int, wr_limit, 1703 SERVICE_CON_QUEUE_DEPTH * 2 + 2); 1704 max_recv_wr = max_send_wr; 1705 s->signal_interval = min_not_zero(srv->queue_depth, 1706 (size_t)SERVICE_CON_QUEUE_DEPTH); 1707 } else { 1708 /* when always_invlaidate enalbed, we need linv+rinv+mr+imm */ 1709 if (always_invalidate) 1710 max_send_wr = 1711 min_t(int, wr_limit, 1712 srv->queue_depth * (1 + 4) + 1); 1713 else 1714 max_send_wr = 1715 min_t(int, wr_limit, 1716 srv->queue_depth * (1 + 2) + 1); 1717 1718 max_recv_wr = srv->queue_depth + 1; 1719 } 1720 cq_num = max_send_wr + max_recv_wr; 1721 atomic_set(&con->c.sq_wr_avail, max_send_wr); 1722 cq_vector = rtrs_srv_get_next_cq_vector(srv_path); 1723 1724 /* TODO: SOFTIRQ can be faster, but be careful with softirq context */ 1725 err = rtrs_cq_qp_create(&srv_path->s, &con->c, 1, cq_vector, cq_num, 1726 max_send_wr, max_recv_wr, 1727 IB_POLL_WORKQUEUE); 1728 if (err) { 1729 rtrs_err(s, "rtrs_cq_qp_create(), err: %d\n", err); 1730 goto free_con; 1731 } 1732 if (con->c.cid == 0) { 1733 err = post_recv_info_req(con); 1734 if (err) 1735 goto free_cqqp; 1736 } 1737 WARN_ON(srv_path->s.con[cid]); 1738 srv_path->s.con[cid] = &con->c; 1739 1740 /* 1741 * Change context from server to current connection. The other 1742 * way is to use cm_id->qp->qp_context, which does not work on OFED. 1743 */ 1744 cm_id->context = &con->c; 1745 1746 return 0; 1747 1748free_cqqp: 1749 rtrs_cq_qp_destroy(&con->c); 1750free_con: 1751 kfree(con); 1752 1753err: 1754 return err; 1755} 1756 1757static struct rtrs_srv_path *__alloc_path(struct rtrs_srv_sess *srv, 1758 struct rdma_cm_id *cm_id, 1759 unsigned int con_num, 1760 unsigned int recon_cnt, 1761 const uuid_t *uuid) 1762{ 1763 struct rtrs_srv_path *srv_path; 1764 int err = -ENOMEM; 1765 char str[NAME_MAX]; 1766 struct rtrs_addr path; 1767 1768 if (srv->paths_num >= MAX_PATHS_NUM) { 1769 err = -ECONNRESET; 1770 goto err; 1771 } 1772 if (__is_path_w_addr_exists(srv, &cm_id->route.addr)) { 1773 err = -EEXIST; 1774 pr_err("Path with same addr exists\n"); 1775 goto err; 1776 } 1777 srv_path = kzalloc(sizeof(*srv_path), GFP_KERNEL); 1778 if (!srv_path) 1779 goto err; 1780 1781 srv_path->stats = kzalloc(sizeof(*srv_path->stats), GFP_KERNEL); 1782 if (!srv_path->stats) 1783 goto err_free_sess; 1784 1785 srv_path->stats->rdma_stats = alloc_percpu(struct rtrs_srv_stats_rdma_stats); 1786 if (!srv_path->stats->rdma_stats) 1787 goto err_free_stats; 1788 1789 srv_path->stats->srv_path = srv_path; 1790 1791 srv_path->dma_addr = kcalloc(srv->queue_depth, 1792 sizeof(*srv_path->dma_addr), 1793 GFP_KERNEL); 1794 if (!srv_path->dma_addr) 1795 goto err_free_percpu; 1796 1797 srv_path->s.con = kcalloc(con_num, sizeof(*srv_path->s.con), 1798 GFP_KERNEL); 1799 if (!srv_path->s.con) 1800 goto err_free_dma_addr; 1801 1802 srv_path->state = RTRS_SRV_CONNECTING; 1803 srv_path->srv = srv; 1804 srv_path->cur_cq_vector = -1; 1805 srv_path->s.dst_addr = cm_id->route.addr.dst_addr; 1806 srv_path->s.src_addr = cm_id->route.addr.src_addr; 1807 1808 /* temporary until receiving session-name from client */ 1809 path.src = &srv_path->s.src_addr; 1810 path.dst = &srv_path->s.dst_addr; 1811 rtrs_addr_to_str(&path, str, sizeof(str)); 1812 strscpy(srv_path->s.sessname, str, sizeof(srv_path->s.sessname)); 1813 1814 srv_path->s.con_num = con_num; 1815 srv_path->s.irq_con_num = con_num; 1816 srv_path->s.recon_cnt = recon_cnt; 1817 uuid_copy(&srv_path->s.uuid, uuid); 1818 spin_lock_init(&srv_path->state_lock); 1819 INIT_WORK(&srv_path->close_work, rtrs_srv_close_work); 1820 rtrs_srv_init_hb(srv_path); 1821 1822 srv_path->s.dev = rtrs_ib_dev_find_or_add(cm_id->device, &dev_pd); 1823 if (!srv_path->s.dev) { 1824 err = -ENOMEM; 1825 goto err_free_con; 1826 } 1827 err = map_cont_bufs(srv_path); 1828 if (err) 1829 goto err_put_dev; 1830 1831 err = rtrs_srv_alloc_ops_ids(srv_path); 1832 if (err) 1833 goto err_unmap_bufs; 1834 1835 __add_path_to_srv(srv, srv_path); 1836 1837 return srv_path; 1838 1839err_unmap_bufs: 1840 unmap_cont_bufs(srv_path); 1841err_put_dev: 1842 rtrs_ib_dev_put(srv_path->s.dev); 1843err_free_con: 1844 kfree(srv_path->s.con); 1845err_free_dma_addr: 1846 kfree(srv_path->dma_addr); 1847err_free_percpu: 1848 free_percpu(srv_path->stats->rdma_stats); 1849err_free_stats: 1850 kfree(srv_path->stats); 1851err_free_sess: 1852 kfree(srv_path); 1853err: 1854 return ERR_PTR(err); 1855} 1856 1857static int rtrs_rdma_connect(struct rdma_cm_id *cm_id, 1858 const struct rtrs_msg_conn_req *msg, 1859 size_t len) 1860{ 1861 struct rtrs_srv_ctx *ctx = cm_id->context; 1862 struct rtrs_srv_path *srv_path; 1863 struct rtrs_srv_sess *srv; 1864 1865 u16 version, con_num, cid; 1866 u16 recon_cnt; 1867 int err = -ECONNRESET; 1868 1869 if (len < sizeof(*msg)) { 1870 pr_err("Invalid RTRS connection request\n"); 1871 goto reject_w_err; 1872 } 1873 if (le16_to_cpu(msg->magic) != RTRS_MAGIC) { 1874 pr_err("Invalid RTRS magic\n"); 1875 goto reject_w_err; 1876 } 1877 version = le16_to_cpu(msg->version); 1878 if (version >> 8 != RTRS_PROTO_VER_MAJOR) { 1879 pr_err("Unsupported major RTRS version: %d, expected %d\n", 1880 version >> 8, RTRS_PROTO_VER_MAJOR); 1881 goto reject_w_err; 1882 } 1883 con_num = le16_to_cpu(msg->cid_num); 1884 if (con_num > 4096) { 1885 /* Sanity check */ 1886 pr_err("Too many connections requested: %d\n", con_num); 1887 goto reject_w_err; 1888 } 1889 cid = le16_to_cpu(msg->cid); 1890 if (cid >= con_num) { 1891 /* Sanity check */ 1892 pr_err("Incorrect cid: %d >= %d\n", cid, con_num); 1893 goto reject_w_err; 1894 } 1895 recon_cnt = le16_to_cpu(msg->recon_cnt); 1896 srv = get_or_create_srv(ctx, &msg->paths_uuid, msg->first_conn); 1897 if (IS_ERR(srv)) { 1898 err = PTR_ERR(srv); 1899 pr_err("get_or_create_srv(), error %d\n", err); 1900 goto reject_w_err; 1901 } 1902 mutex_lock(&srv->paths_mutex); 1903 srv_path = __find_path(srv, &msg->sess_uuid); 1904 if (srv_path) { 1905 struct rtrs_path *s = &srv_path->s; 1906 1907 /* Session already holds a reference */ 1908 put_srv(srv); 1909 1910 if (srv_path->state != RTRS_SRV_CONNECTING) { 1911 rtrs_err(s, "Session in wrong state: %s\n", 1912 rtrs_srv_state_str(srv_path->state)); 1913 mutex_unlock(&srv->paths_mutex); 1914 goto reject_w_err; 1915 } 1916 /* 1917 * Sanity checks 1918 */ 1919 if (con_num != s->con_num || cid >= s->con_num) { 1920 rtrs_err(s, "Incorrect request: %d, %d\n", 1921 cid, con_num); 1922 mutex_unlock(&srv->paths_mutex); 1923 goto reject_w_err; 1924 } 1925 if (s->con[cid]) { 1926 rtrs_err(s, "Connection already exists: %d\n", 1927 cid); 1928 mutex_unlock(&srv->paths_mutex); 1929 goto reject_w_err; 1930 } 1931 } else { 1932 srv_path = __alloc_path(srv, cm_id, con_num, recon_cnt, 1933 &msg->sess_uuid); 1934 if (IS_ERR(srv_path)) { 1935 mutex_unlock(&srv->paths_mutex); 1936 put_srv(srv); 1937 err = PTR_ERR(srv_path); 1938 pr_err("RTRS server session allocation failed: %d\n", err); 1939 goto reject_w_err; 1940 } 1941 } 1942 err = create_con(srv_path, cm_id, cid); 1943 if (err) { 1944 rtrs_err((&srv_path->s), "create_con(), error %d\n", err); 1945 rtrs_rdma_do_reject(cm_id, err); 1946 /* 1947 * Since session has other connections we follow normal way 1948 * through workqueue, but still return an error to tell cma.c 1949 * to call rdma_destroy_id() for current connection. 1950 */ 1951 goto close_and_return_err; 1952 } 1953 err = rtrs_rdma_do_accept(srv_path, cm_id); 1954 if (err) { 1955 rtrs_err((&srv_path->s), "rtrs_rdma_do_accept(), error %d\n", err); 1956 rtrs_rdma_do_reject(cm_id, err); 1957 /* 1958 * Since current connection was successfully added to the 1959 * session we follow normal way through workqueue to close the 1960 * session, thus return 0 to tell cma.c we call 1961 * rdma_destroy_id() ourselves. 1962 */ 1963 err = 0; 1964 goto close_and_return_err; 1965 } 1966 mutex_unlock(&srv->paths_mutex); 1967 1968 return 0; 1969 1970reject_w_err: 1971 return rtrs_rdma_do_reject(cm_id, err); 1972 1973close_and_return_err: 1974 mutex_unlock(&srv->paths_mutex); 1975 close_path(srv_path); 1976 1977 return err; 1978} 1979 1980static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id, 1981 struct rdma_cm_event *ev) 1982{ 1983 struct rtrs_srv_path *srv_path = NULL; 1984 struct rtrs_path *s = NULL; 1985 struct rtrs_con *c = NULL; 1986 1987 if (ev->event == RDMA_CM_EVENT_CONNECT_REQUEST) 1988 /* 1989 * In case of error cma.c will destroy cm_id, 1990 * see cma_process_remove() 1991 */ 1992 return rtrs_rdma_connect(cm_id, ev->param.conn.private_data, 1993 ev->param.conn.private_data_len); 1994 1995 c = cm_id->context; 1996 s = c->path; 1997 srv_path = to_srv_path(s); 1998 1999 switch (ev->event) { 2000 case RDMA_CM_EVENT_ESTABLISHED: 2001 /* Nothing here */ 2002 break; 2003 case RDMA_CM_EVENT_REJECTED: 2004 case RDMA_CM_EVENT_CONNECT_ERROR: 2005 case RDMA_CM_EVENT_UNREACHABLE: 2006 rtrs_err(s, "CM error (CM event: %s, err: %d)\n", 2007 rdma_event_msg(ev->event), ev->status); 2008 fallthrough; 2009 case RDMA_CM_EVENT_DISCONNECTED: 2010 case RDMA_CM_EVENT_ADDR_CHANGE: 2011 case RDMA_CM_EVENT_TIMEWAIT_EXIT: 2012 case RDMA_CM_EVENT_DEVICE_REMOVAL: 2013 close_path(srv_path); 2014 break; 2015 default: 2016 pr_err("Ignoring unexpected CM event %s, err %d\n", 2017 rdma_event_msg(ev->event), ev->status); 2018 break; 2019 } 2020 2021 return 0; 2022} 2023 2024static struct rdma_cm_id *rtrs_srv_cm_init(struct rtrs_srv_ctx *ctx, 2025 struct sockaddr *addr, 2026 enum rdma_ucm_port_space ps) 2027{ 2028 struct rdma_cm_id *cm_id; 2029 int ret; 2030 2031 cm_id = rdma_create_id(&init_net, rtrs_srv_rdma_cm_handler, 2032 ctx, ps, IB_QPT_RC); 2033 if (IS_ERR(cm_id)) { 2034 ret = PTR_ERR(cm_id); 2035 pr_err("Creating id for RDMA connection failed, err: %d\n", 2036 ret); 2037 goto err_out; 2038 } 2039 ret = rdma_bind_addr(cm_id, addr); 2040 if (ret) { 2041 pr_err("Binding RDMA address failed, err: %d\n", ret); 2042 goto err_cm; 2043 } 2044 ret = rdma_listen(cm_id, 64); 2045 if (ret) { 2046 pr_err("Listening on RDMA connection failed, err: %d\n", 2047 ret); 2048 goto err_cm; 2049 } 2050 2051 return cm_id; 2052 2053err_cm: 2054 rdma_destroy_id(cm_id); 2055err_out: 2056 2057 return ERR_PTR(ret); 2058} 2059 2060static int rtrs_srv_rdma_init(struct rtrs_srv_ctx *ctx, u16 port) 2061{ 2062 struct sockaddr_in6 sin = { 2063 .sin6_family = AF_INET6, 2064 .sin6_addr = IN6ADDR_ANY_INIT, 2065 .sin6_port = htons(port), 2066 }; 2067 struct sockaddr_ib sib = { 2068 .sib_family = AF_IB, 2069 .sib_sid = cpu_to_be64(RDMA_IB_IP_PS_IB | port), 2070 .sib_sid_mask = cpu_to_be64(0xffffffffffffffffULL), 2071 .sib_pkey = cpu_to_be16(0xffff), 2072 }; 2073 struct rdma_cm_id *cm_ip, *cm_ib; 2074 int ret; 2075 2076 /* 2077 * We accept both IPoIB and IB connections, so we need to keep 2078 * two cm id's, one for each socket type and port space. 2079 * If the cm initialization of one of the id's fails, we abort 2080 * everything. 2081 */ 2082 cm_ip = rtrs_srv_cm_init(ctx, (struct sockaddr *)&sin, RDMA_PS_TCP); 2083 if (IS_ERR(cm_ip)) 2084 return PTR_ERR(cm_ip); 2085 2086 cm_ib = rtrs_srv_cm_init(ctx, (struct sockaddr *)&sib, RDMA_PS_IB); 2087 if (IS_ERR(cm_ib)) { 2088 ret = PTR_ERR(cm_ib); 2089 goto free_cm_ip; 2090 } 2091 2092 ctx->cm_id_ip = cm_ip; 2093 ctx->cm_id_ib = cm_ib; 2094 2095 return 0; 2096 2097free_cm_ip: 2098 rdma_destroy_id(cm_ip); 2099 2100 return ret; 2101} 2102 2103static struct rtrs_srv_ctx *alloc_srv_ctx(struct rtrs_srv_ops *ops) 2104{ 2105 struct rtrs_srv_ctx *ctx; 2106 2107 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); 2108 if (!ctx) 2109 return NULL; 2110 2111 ctx->ops = *ops; 2112 mutex_init(&ctx->srv_mutex); 2113 INIT_LIST_HEAD(&ctx->srv_list); 2114 2115 return ctx; 2116} 2117 2118static void free_srv_ctx(struct rtrs_srv_ctx *ctx) 2119{ 2120 WARN_ON(!list_empty(&ctx->srv_list)); 2121 mutex_destroy(&ctx->srv_mutex); 2122 kfree(ctx); 2123} 2124 2125static int rtrs_srv_add_one(struct ib_device *device) 2126{ 2127 struct rtrs_srv_ctx *ctx; 2128 int ret = 0; 2129 2130 mutex_lock(&ib_ctx.ib_dev_mutex); 2131 if (ib_ctx.ib_dev_count) 2132 goto out; 2133 2134 /* 2135 * Since our CM IDs are NOT bound to any ib device we will create them 2136 * only once 2137 */ 2138 ctx = ib_ctx.srv_ctx; 2139 ret = rtrs_srv_rdma_init(ctx, ib_ctx.port); 2140 if (ret) { 2141 /* 2142 * We errored out here. 2143 * According to the ib code, if we encounter an error here then the 2144 * error code is ignored, and no more calls to our ops are made. 2145 */ 2146 pr_err("Failed to initialize RDMA connection"); 2147 goto err_out; 2148 } 2149 2150out: 2151 /* 2152 * Keep a track on the number of ib devices added 2153 */ 2154 ib_ctx.ib_dev_count++; 2155 2156err_out: 2157 mutex_unlock(&ib_ctx.ib_dev_mutex); 2158 return ret; 2159} 2160 2161static void rtrs_srv_remove_one(struct ib_device *device, void *client_data) 2162{ 2163 struct rtrs_srv_ctx *ctx; 2164 2165 mutex_lock(&ib_ctx.ib_dev_mutex); 2166 ib_ctx.ib_dev_count--; 2167 2168 if (ib_ctx.ib_dev_count) 2169 goto out; 2170 2171 /* 2172 * Since our CM IDs are NOT bound to any ib device we will remove them 2173 * only once, when the last device is removed 2174 */ 2175 ctx = ib_ctx.srv_ctx; 2176 rdma_destroy_id(ctx->cm_id_ip); 2177 rdma_destroy_id(ctx->cm_id_ib); 2178 2179out: 2180 mutex_unlock(&ib_ctx.ib_dev_mutex); 2181} 2182 2183static struct ib_client rtrs_srv_client = { 2184 .name = "rtrs_server", 2185 .add = rtrs_srv_add_one, 2186 .remove = rtrs_srv_remove_one 2187}; 2188 2189/** 2190 * rtrs_srv_open() - open RTRS server context 2191 * @ops: callback functions 2192 * @port: port to listen on 2193 * 2194 * Creates server context with specified callbacks. 2195 * 2196 * Return a valid pointer on success otherwise PTR_ERR. 2197 */ 2198struct rtrs_srv_ctx *rtrs_srv_open(struct rtrs_srv_ops *ops, u16 port) 2199{ 2200 struct rtrs_srv_ctx *ctx; 2201 int err; 2202 2203 ctx = alloc_srv_ctx(ops); 2204 if (!ctx) 2205 return ERR_PTR(-ENOMEM); 2206 2207 mutex_init(&ib_ctx.ib_dev_mutex); 2208 ib_ctx.srv_ctx = ctx; 2209 ib_ctx.port = port; 2210 2211 err = ib_register_client(&rtrs_srv_client); 2212 if (err) { 2213 free_srv_ctx(ctx); 2214 return ERR_PTR(err); 2215 } 2216 2217 return ctx; 2218} 2219EXPORT_SYMBOL(rtrs_srv_open); 2220 2221static void close_paths(struct rtrs_srv_sess *srv) 2222{ 2223 struct rtrs_srv_path *srv_path; 2224 2225 mutex_lock(&srv->paths_mutex); 2226 list_for_each_entry(srv_path, &srv->paths_list, s.entry) 2227 close_path(srv_path); 2228 mutex_unlock(&srv->paths_mutex); 2229} 2230 2231static void close_ctx(struct rtrs_srv_ctx *ctx) 2232{ 2233 struct rtrs_srv_sess *srv; 2234 2235 mutex_lock(&ctx->srv_mutex); 2236 list_for_each_entry(srv, &ctx->srv_list, ctx_list) 2237 close_paths(srv); 2238 mutex_unlock(&ctx->srv_mutex); 2239 flush_workqueue(rtrs_wq); 2240} 2241 2242/** 2243 * rtrs_srv_close() - close RTRS server context 2244 * @ctx: pointer to server context 2245 * 2246 * Closes RTRS server context with all client sessions. 2247 */ 2248void rtrs_srv_close(struct rtrs_srv_ctx *ctx) 2249{ 2250 ib_unregister_client(&rtrs_srv_client); 2251 mutex_destroy(&ib_ctx.ib_dev_mutex); 2252 close_ctx(ctx); 2253 free_srv_ctx(ctx); 2254} 2255EXPORT_SYMBOL(rtrs_srv_close); 2256 2257static int check_module_params(void) 2258{ 2259 if (sess_queue_depth < 1 || sess_queue_depth > MAX_SESS_QUEUE_DEPTH) { 2260 pr_err("Invalid sess_queue_depth value %d, has to be >= %d, <= %d.\n", 2261 sess_queue_depth, 1, MAX_SESS_QUEUE_DEPTH); 2262 return -EINVAL; 2263 } 2264 if (max_chunk_size < MIN_CHUNK_SIZE || !is_power_of_2(max_chunk_size)) { 2265 pr_err("Invalid max_chunk_size value %d, has to be >= %d and should be power of two.\n", 2266 max_chunk_size, MIN_CHUNK_SIZE); 2267 return -EINVAL; 2268 } 2269 2270 /* 2271 * Check if IB immediate data size is enough to hold the mem_id and the 2272 * offset inside the memory chunk 2273 */ 2274 if ((ilog2(sess_queue_depth - 1) + 1) + 2275 (ilog2(max_chunk_size - 1) + 1) > MAX_IMM_PAYL_BITS) { 2276 pr_err("RDMA immediate size (%db) not enough to encode %d buffers of size %dB. Reduce 'sess_queue_depth' or 'max_chunk_size' parameters.\n", 2277 MAX_IMM_PAYL_BITS, sess_queue_depth, max_chunk_size); 2278 return -EINVAL; 2279 } 2280 2281 return 0; 2282} 2283 2284void rtrs_srv_ib_event_handler(struct ib_event_handler *handler, 2285 struct ib_event *ibevent) 2286{ 2287 pr_info("Handling event: %s (%d).\n", ib_event_msg(ibevent->event), 2288 ibevent->event); 2289} 2290 2291static int rtrs_srv_ib_dev_init(struct rtrs_ib_dev *dev) 2292{ 2293 INIT_IB_EVENT_HANDLER(&dev->event_handler, dev->ib_dev, 2294 rtrs_srv_ib_event_handler); 2295 ib_register_event_handler(&dev->event_handler); 2296 2297 return 0; 2298} 2299 2300static void rtrs_srv_ib_dev_deinit(struct rtrs_ib_dev *dev) 2301{ 2302 ib_unregister_event_handler(&dev->event_handler); 2303} 2304 2305 2306static const struct rtrs_rdma_dev_pd_ops dev_pd_ops = { 2307 .init = rtrs_srv_ib_dev_init, 2308 .deinit = rtrs_srv_ib_dev_deinit 2309}; 2310 2311 2312static int __init rtrs_server_init(void) 2313{ 2314 int err; 2315 2316 pr_info("Loading module %s, proto %s: (max_chunk_size: %d (pure IO %ld, headers %ld) , sess_queue_depth: %d, always_invalidate: %d)\n", 2317 KBUILD_MODNAME, RTRS_PROTO_VER_STRING, 2318 max_chunk_size, max_chunk_size - MAX_HDR_SIZE, MAX_HDR_SIZE, 2319 sess_queue_depth, always_invalidate); 2320 2321 rtrs_rdma_dev_pd_init(0, &dev_pd); 2322 2323 err = check_module_params(); 2324 if (err) { 2325 pr_err("Failed to load module, invalid module parameters, err: %d\n", 2326 err); 2327 return err; 2328 } 2329 err = class_register(&rtrs_dev_class); 2330 if (err) 2331 goto out_err; 2332 2333 rtrs_wq = alloc_workqueue("rtrs_server_wq", 0, 0); 2334 if (!rtrs_wq) { 2335 err = -ENOMEM; 2336 goto out_dev_class; 2337 } 2338 2339 return 0; 2340 2341out_dev_class: 2342 class_unregister(&rtrs_dev_class); 2343out_err: 2344 return err; 2345} 2346 2347static void __exit rtrs_server_exit(void) 2348{ 2349 destroy_workqueue(rtrs_wq); 2350 class_unregister(&rtrs_dev_class); 2351 rtrs_rdma_dev_pd_deinit(&dev_pd); 2352} 2353 2354module_init(rtrs_server_init); 2355module_exit(rtrs_server_exit);
~/
Read-only file preview.