Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

smb: smbdirect: remove unused SMBDIRECT_USE_INLINE_C_FILES logic

We always build as standalone module (or as part of the core kernel).

This also removes unused elements from struct smbdirect_socket
and unused exports.

Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>

authored by

Stefan Metzmacher and committed by
Steve French
aa43bb2c 649c4755

+3 -233
-3
fs/smb/common/smbdirect/smbdirect_accept.c
··· 15 15 static void smbdirect_accept_negotiate_recv_done(struct ib_cq *cq, struct ib_wc *wc); 16 16 static void smbdirect_accept_negotiate_send_done(struct ib_cq *cq, struct ib_wc *wc); 17 17 18 - __SMBDIRECT_PUBLIC__ 19 18 int smbdirect_accept_connect_request(struct smbdirect_socket *sc, 20 19 const struct rdma_conn_param *param) 21 20 { ··· 160 161 init_params_failed: 161 162 return ret; 162 163 } 163 - __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_accept_connect_request); 164 164 165 165 static int smbdirect_accept_init_params(struct smbdirect_socket *sc) 166 166 { ··· 791 793 return 0; 792 794 } 793 795 794 - __SMBDIRECT_PUBLIC__ 795 796 struct smbdirect_socket *smbdirect_socket_accept(struct smbdirect_socket *lsc, 796 797 long timeo, 797 798 struct proto_accept_arg *arg)
-25
fs/smb/common/smbdirect/smbdirect_all_c_files.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-or-later 2 - /* 3 - * Copyright (c) 2025, Stefan Metzmacher 4 - */ 5 - 6 - /* 7 - * This is a temporary solution in order 8 - * to include the common smbdirect functions 9 - * into .c files in order to make a transformation 10 - * in tiny bisectable steps possible. 11 - * 12 - * It will be replaced by a smbdirect.ko with 13 - * exported public functions at the end. 14 - */ 15 - #ifndef SMBDIRECT_USE_INLINE_C_FILES 16 - #error SMBDIRECT_USE_INLINE_C_FILES define needed 17 - #endif 18 - #include "smbdirect_socket.c" 19 - #include "smbdirect_connection.c" 20 - #include "smbdirect_mr.c" 21 - #include "smbdirect_rw.c" 22 - #include "smbdirect_debug.c" 23 - #include "smbdirect_connect.c" 24 - #include "smbdirect_accept.c" 25 - #include "smbdirect_listen.c"
-2
fs/smb/common/smbdirect/smbdirect_connect.c
··· 16 16 static void smbdirect_connect_negotiate_send_done(struct ib_cq *cq, struct ib_wc *wc); 17 17 static void smbdirect_connect_negotiate_recv_done(struct ib_cq *cq, struct ib_wc *wc); 18 18 19 - __SMBDIRECT_PUBLIC__ 20 19 int smbdirect_connect(struct smbdirect_socket *sc, const struct sockaddr *dst) 21 20 { 22 21 const struct sockaddr *src = NULL; ··· 894 895 smbdirect_connection_negotiation_done(sc); 895 896 } 896 897 897 - __SMBDIRECT_PUBLIC__ 898 898 int smbdirect_connect_sync(struct smbdirect_socket *sc, 899 899 const struct sockaddr *dst) 900 900 {
-31
fs/smb/common/smbdirect/smbdirect_connection.c
··· 22 22 static void smbdirect_connection_recv_io_refill_work(struct work_struct *work); 23 23 static void smbdirect_connection_send_immediate_work(struct work_struct *work); 24 24 25 - __maybe_unused /* this is temporary while this file is included in others */ 26 25 static void smbdirect_connection_qp_event_handler(struct ib_event *event, void *context) 27 26 { 28 27 struct smbdirect_socket *sc = context; ··· 142 143 return 0; 143 144 } 144 145 145 - __SMBDIRECT_PRIVATE__ 146 146 void smbdirect_connection_rdma_established(struct smbdirect_socket *sc) 147 147 { 148 148 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO, ··· 155 157 sc->rdma.expected_event = RDMA_CM_EVENT_DISCONNECTED; 156 158 } 157 159 158 - __SMBDIRECT_PRIVATE__ 159 160 void smbdirect_connection_negotiation_done(struct smbdirect_socket *sc) 160 161 { 161 162 if (unlikely(sc->first_error)) ··· 239 242 return factor * attr->cap.max_rdma_ctxs; 240 243 } 241 244 242 - __SMBDIRECT_PRIVATE__ 243 245 int smbdirect_connection_create_qp(struct smbdirect_socket *sc) 244 246 { 245 247 const struct smbdirect_socket_parameters *sp = &sc->parameters; ··· 396 400 return ret; 397 401 } 398 402 399 - __SMBDIRECT_PRIVATE__ 400 403 void smbdirect_connection_destroy_qp(struct smbdirect_socket *sc) 401 404 { 402 405 if (sc->ib.qp) { ··· 417 422 } 418 423 } 419 424 420 - __SMBDIRECT_PRIVATE__ 421 425 int smbdirect_connection_create_mem_pools(struct smbdirect_socket *sc) 422 426 { 423 427 const struct smbdirect_socket_parameters *sp = &sc->parameters; ··· 494 500 return -ENOMEM; 495 501 } 496 502 497 - __SMBDIRECT_PRIVATE__ 498 503 void smbdirect_connection_destroy_mem_pools(struct smbdirect_socket *sc) 499 504 { 500 505 struct smbdirect_recv_io *recv_io, *next_io; ··· 521 528 sc->send_io.mem.cache = NULL; 522 529 } 523 530 524 - __SMBDIRECT_PRIVATE__ 525 531 struct smbdirect_send_io *smbdirect_connection_alloc_send_io(struct smbdirect_socket *sc) 526 532 { 527 533 struct smbdirect_send_io *msg; ··· 535 543 return msg; 536 544 } 537 545 538 - __SMBDIRECT_PRIVATE__ 539 546 void smbdirect_connection_free_send_io(struct smbdirect_send_io *msg) 540 547 { 541 548 struct smbdirect_socket *sc = msg->socket; ··· 566 575 mempool_free(msg, sc->send_io.mem.pool); 567 576 } 568 577 569 - __SMBDIRECT_PRIVATE__ 570 578 struct smbdirect_recv_io *smbdirect_connection_get_recv_io(struct smbdirect_socket *sc) 571 579 { 572 580 struct smbdirect_recv_io *msg = NULL; ··· 585 595 return msg; 586 596 } 587 597 588 - __SMBDIRECT_PRIVATE__ 589 598 void smbdirect_connection_put_recv_io(struct smbdirect_recv_io *msg) 590 599 { 591 600 struct smbdirect_socket *sc = msg->socket; ··· 606 617 queue_work(sc->workqueues.refill, &sc->recv_io.posted.refill_work); 607 618 } 608 619 609 - __SMBDIRECT_PRIVATE__ 610 620 void smbdirect_connection_reassembly_append_recv_io(struct smbdirect_socket *sc, 611 621 struct smbdirect_recv_io *msg, 612 622 u32 data_length) ··· 627 639 sc->statistics.enqueue_reassembly_queue++; 628 640 } 629 641 630 - __SMBDIRECT_PRIVATE__ 631 642 struct smbdirect_recv_io * 632 643 smbdirect_connection_reassembly_first_recv_io(struct smbdirect_socket *sc) 633 644 { ··· 639 652 return msg; 640 653 } 641 654 642 - __SMBDIRECT_PRIVATE__ 643 655 void smbdirect_connection_negotiate_rdma_resources(struct smbdirect_socket *sc, 644 656 u8 peer_initiator_depth, 645 657 u8 peer_responder_resources, ··· 700 714 peer_responder_resources); 701 715 } 702 716 703 - __SMBDIRECT_PUBLIC__ 704 717 bool smbdirect_connection_is_connected(struct smbdirect_socket *sc) 705 718 { 706 719 if (unlikely(!sc || sc->first_error || sc->status != SMBDIRECT_SOCKET_CONNECTED)) ··· 708 723 } 709 724 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_is_connected); 710 725 711 - __SMBDIRECT_PUBLIC__ 712 726 int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc) 713 727 { 714 728 const struct smbdirect_socket_parameters *sp = &sc->parameters; ··· 781 797 } 782 798 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_wait_for_connected); 783 799 784 - __SMBDIRECT_PRIVATE__ 785 800 void smbdirect_connection_idle_timer_work(struct work_struct *work) 786 801 { 787 802 struct smbdirect_socket *sc = ··· 812 829 queue_work(sc->workqueues.immediate, &sc->idle.immediate_work); 813 830 } 814 831 815 - __SMBDIRECT_PRIVATE__ 816 832 u16 smbdirect_connection_grant_recv_credits(struct smbdirect_socket *sc) 817 833 { 818 834 int missing; ··· 849 867 return new_credits; 850 868 } 851 869 852 - __maybe_unused /* this is temporary while this file is included in others */ 853 870 static bool smbdirect_connection_request_keep_alive(struct smbdirect_socket *sc) 854 871 { 855 872 const struct smbdirect_socket_parameters *sp = &sc->parameters; ··· 867 886 return false; 868 887 } 869 888 870 - __SMBDIRECT_PRIVATE__ 871 889 int smbdirect_connection_post_send_wr(struct smbdirect_socket *sc, 872 890 struct ib_send_wr *wr) 873 891 { ··· 899 919 batch->credit = 0; 900 920 } 901 921 902 - __SMBDIRECT_PUBLIC__ 903 922 int smbdirect_connection_send_batch_flush(struct smbdirect_socket *sc, 904 923 struct smbdirect_send_batch *batch, 905 924 bool is_last) ··· 960 981 } 961 982 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_batch_flush); 962 983 963 - __SMBDIRECT_PUBLIC__ 964 984 struct smbdirect_send_batch * 965 985 smbdirect_init_send_batch_storage(struct smbdirect_send_batch_storage *storage, 966 986 bool need_invalidate_rkey, ··· 1076 1098 return smbdirect_connection_post_send_wr(sc, &msg->wr); 1077 1099 } 1078 1100 1079 - __SMBDIRECT_PUBLIC__ 1080 1101 int smbdirect_connection_send_single_iter(struct smbdirect_socket *sc, 1081 1102 struct smbdirect_send_batch *batch, 1082 1103 struct iov_iter *iter, ··· 1265 1288 } 1266 1289 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_single_iter); 1267 1290 1268 - __SMBDIRECT_PUBLIC__ 1269 1291 int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket *sc) 1270 1292 { 1271 1293 /* ··· 1290 1314 } 1291 1315 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_wait_zero_pending); 1292 1316 1293 - __SMBDIRECT_PUBLIC__ 1294 1317 int smbdirect_connection_send_iter(struct smbdirect_socket *sc, 1295 1318 struct iov_iter *iter, 1296 1319 unsigned int flags, ··· 1440 1465 1441 1466 if (atomic_dec_and_test(&sc->send_io.pending.count)) 1442 1467 wake_up(&sc->send_io.pending.zero_wait_queue); 1443 - 1444 - wake_up(&sc->send_io.pending.dec_wait_queue); 1445 1468 } 1446 1469 1447 1470 static void smbdirect_connection_send_immediate_work(struct work_struct *work) ··· 1463 1490 } 1464 1491 } 1465 1492 1466 - __SMBDIRECT_PRIVATE__ 1467 1493 int smbdirect_connection_post_recv_io(struct smbdirect_recv_io *msg) 1468 1494 { 1469 1495 struct smbdirect_socket *sc = msg->socket; ··· 1504 1532 return ret; 1505 1533 } 1506 1534 1507 - __SMBDIRECT_PRIVATE__ 1508 1535 void smbdirect_connection_recv_io_done(struct ib_cq *cq, struct ib_wc *wc) 1509 1536 { 1510 1537 struct smbdirect_recv_io *recv_io = ··· 1673 1702 smbdirect_socket_schedule_cleanup(sc, -ECONNABORTED); 1674 1703 } 1675 1704 1676 - __SMBDIRECT_PRIVATE__ 1677 1705 int smbdirect_connection_recv_io_refill(struct smbdirect_socket *sc) 1678 1706 { 1679 1707 int missing; ··· 1788 1818 } 1789 1819 } 1790 1820 1791 - __SMBDIRECT_PUBLIC__ 1792 1821 int smbdirect_connection_recvmsg(struct smbdirect_socket *sc, 1793 1822 struct msghdr *msg, 1794 1823 unsigned int flags)
-1
fs/smb/common/smbdirect/smbdirect_debug.c
··· 7 7 #include "smbdirect_internal.h" 8 8 #include <linux/seq_file.h> 9 9 10 - __SMBDIRECT_PUBLIC__ 11 10 void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket *sc, 12 11 unsigned int rdma_readwrite_threshold, 13 12 struct seq_file *m)
+3 -35
fs/smb/common/smbdirect/smbdirect_internal.h
··· 6 6 #ifndef __FS_SMB_COMMON_SMBDIRECT_INTERNAL_H__ 7 7 #define __FS_SMB_COMMON_SMBDIRECT_INTERNAL_H__ 8 8 9 - #ifndef SMBDIRECT_USE_INLINE_C_FILES 10 9 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 11 - #endif /* ! SMBDIRECT_USE_INLINE_C_FILES */ 12 10 13 11 #include "smbdirect.h" 14 12 #include "smbdirect_pdu.h" ··· 46 48 char ib_name[IB_DEVICE_NAME_MAX]; 47 49 }; 48 50 49 - #ifdef SMBDIRECT_USE_INLINE_C_FILES 50 - /* this is temporary while this file is included in others */ 51 - #define __SMBDIRECT_PRIVATE__ __maybe_unused static 52 - #else 53 - #define __SMBDIRECT_PRIVATE__ 54 - #endif 55 - 56 - __SMBDIRECT_PRIVATE__ 57 51 int smbdirect_socket_init_new(struct net *net, struct smbdirect_socket *sc); 58 52 59 - __SMBDIRECT_PRIVATE__ 60 53 int smbdirect_socket_init_accepting(struct rdma_cm_id *id, struct smbdirect_socket *sc); 61 54 62 - __SMBDIRECT_PRIVATE__ 63 55 void __smbdirect_socket_schedule_cleanup(struct smbdirect_socket *sc, 64 56 const char *macro_name, 65 57 unsigned int lvl, ··· 72 84 __func__, __LINE__, __error, &__force_status); \ 73 85 } while (0) 74 86 75 - __SMBDIRECT_PRIVATE__ 76 87 void smbdirect_socket_destroy_sync(struct smbdirect_socket *sc); 77 88 78 - __SMBDIRECT_PRIVATE__ 79 89 int smbdirect_socket_wait_for_credits(struct smbdirect_socket *sc, 80 90 enum smbdirect_socket_status expected_status, 81 91 int unexpected_errno, ··· 81 95 atomic_t *total_credits, 82 96 int needed); 83 97 84 - __SMBDIRECT_PRIVATE__ 85 98 void smbdirect_connection_rdma_established(struct smbdirect_socket *sc); 86 99 87 - __SMBDIRECT_PRIVATE__ 88 100 void smbdirect_connection_negotiation_done(struct smbdirect_socket *sc); 89 101 90 - __SMBDIRECT_PRIVATE__ 91 102 int smbdirect_connection_create_qp(struct smbdirect_socket *sc); 92 103 93 - __SMBDIRECT_PRIVATE__ 94 104 void smbdirect_connection_destroy_qp(struct smbdirect_socket *sc); 95 105 96 - __SMBDIRECT_PRIVATE__ 97 106 int smbdirect_connection_create_mem_pools(struct smbdirect_socket *sc); 98 107 99 - __SMBDIRECT_PRIVATE__ 100 108 void smbdirect_connection_destroy_mem_pools(struct smbdirect_socket *sc); 101 109 102 - __SMBDIRECT_PRIVATE__ 103 110 struct smbdirect_send_io *smbdirect_connection_alloc_send_io(struct smbdirect_socket *sc); 104 111 105 - __SMBDIRECT_PRIVATE__ 106 112 void smbdirect_connection_free_send_io(struct smbdirect_send_io *msg); 107 113 108 - __SMBDIRECT_PRIVATE__ 109 114 struct smbdirect_recv_io *smbdirect_connection_get_recv_io(struct smbdirect_socket *sc); 110 115 111 - __SMBDIRECT_PRIVATE__ 112 116 void smbdirect_connection_put_recv_io(struct smbdirect_recv_io *msg); 113 117 114 - __SMBDIRECT_PRIVATE__ 115 118 void smbdirect_connection_reassembly_append_recv_io(struct smbdirect_socket *sc, 116 119 struct smbdirect_recv_io *msg, 117 120 u32 data_length); 118 121 119 - __SMBDIRECT_PRIVATE__ 120 122 struct smbdirect_recv_io * 121 123 smbdirect_connection_reassembly_first_recv_io(struct smbdirect_socket *sc); 122 124 123 - __SMBDIRECT_PRIVATE__ 124 125 void smbdirect_connection_negotiate_rdma_resources(struct smbdirect_socket *sc, 125 126 u8 peer_initiator_depth, 126 127 u8 peer_responder_resources, 127 128 const struct rdma_conn_param *param); 128 129 129 - __SMBDIRECT_PRIVATE__ 130 130 void smbdirect_connection_idle_timer_work(struct work_struct *work); 131 131 132 - __SMBDIRECT_PRIVATE__ 133 132 u16 smbdirect_connection_grant_recv_credits(struct smbdirect_socket *sc); 134 133 135 - __SMBDIRECT_PRIVATE__ 136 134 int smbdirect_connection_post_send_wr(struct smbdirect_socket *sc, 137 135 struct ib_send_wr *wr); 138 136 139 - __SMBDIRECT_PRIVATE__ 140 137 int smbdirect_connection_post_recv_io(struct smbdirect_recv_io *msg); 141 138 142 - __SMBDIRECT_PRIVATE__ 143 139 void smbdirect_connection_recv_io_done(struct ib_cq *cq, struct ib_wc *wc); 144 140 145 - __SMBDIRECT_PRIVATE__ 146 141 int smbdirect_connection_recv_io_refill(struct smbdirect_socket *sc); 147 142 148 - __SMBDIRECT_PRIVATE__ 149 143 int smbdirect_connection_create_mr_list(struct smbdirect_socket *sc); 150 144 151 - __SMBDIRECT_PRIVATE__ 152 145 void smbdirect_connection_destroy_mr_list(struct smbdirect_socket *sc); 146 + 147 + int smbdirect_accept_connect_request(struct smbdirect_socket *sc, 148 + const struct rdma_conn_param *param); 153 149 154 150 void smbdirect_accept_negotiate_finish(struct smbdirect_socket *sc, u32 ntstatus); 155 151
-1
fs/smb/common/smbdirect/smbdirect_listen.c
··· 10 10 static int smbdirect_listen_rdma_event_handler(struct rdma_cm_id *id, 11 11 struct rdma_cm_event *event); 12 12 13 - __SMBDIRECT_PUBLIC__ 14 13 int smbdirect_socket_listen(struct smbdirect_socket *sc, int backlog) 15 14 { 16 15 int ret;
-5
fs/smb/common/smbdirect/smbdirect_mr.c
··· 13 13 * Recovery is done in smbd_mr_recovery_work. The content of list entry changes 14 14 * as MRs are used and recovered for I/O, but the list links will not change 15 15 */ 16 - __SMBDIRECT_PRIVATE__ 17 16 int smbdirect_connection_create_mr_list(struct smbdirect_socket *sc) 18 17 { 19 18 const struct smbdirect_socket_parameters *sp = &sc->parameters; ··· 115 116 kfree(mr); 116 117 } 117 118 118 - __SMBDIRECT_PRIVATE__ 119 119 void smbdirect_connection_destroy_mr_list(struct smbdirect_socket *sc) 120 120 { 121 121 struct smbdirect_mr_io *mr, *tmp; ··· 261 263 * need_invalidate: true if this MR needs to be locally invalidated after I/O 262 264 * return value: the MR registered, NULL if failed. 263 265 */ 264 - __SMBDIRECT_PUBLIC__ 265 266 struct smbdirect_mr_io * 266 267 smbdirect_connection_register_mr_io(struct smbdirect_socket *sc, 267 268 struct iov_iter *iter, ··· 382 385 } 383 386 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_register_mr_io); 384 387 385 - __SMBDIRECT_PUBLIC__ 386 388 void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, 387 389 struct smbdirect_buffer_descriptor_v1 *v1) 388 390 { ··· 405 409 * and we have to locally invalidate the buffer to prevent data is being 406 410 * modified by remote peer after upper layer consumes it 407 411 */ 408 - __SMBDIRECT_PUBLIC__ 409 412 void smbdirect_connection_deregister_mr_io(struct smbdirect_mr_io *mr) 410 413 { 411 414 struct smbdirect_socket *sc = mr->socket;
-43
fs/smb/common/smbdirect/smbdirect_public.h
··· 13 13 struct smbdirect_send_batch; 14 14 struct smbdirect_mr_io; 15 15 16 - #ifdef SMBDIRECT_USE_INLINE_C_FILES 17 - /* this is temporary while this file is included in others */ 18 - #define __SMBDIRECT_PUBLIC__ __maybe_unused static 19 - #define __SMBDIRECT_EXPORT_SYMBOL__(__sym) 20 - #else 21 - #define __SMBDIRECT_PUBLIC__ 22 16 #define __SMBDIRECT_EXPORT_SYMBOL__(__sym) EXPORT_SYMBOL_FOR_MODULES(__sym, "cifs,ksmbd") 23 - #endif 24 17 25 18 #include <rdma/rw.h> 26 19 27 - __SMBDIRECT_PUBLIC__ 28 20 u8 smbdirect_netdev_rdma_capable_node_type(struct net_device *netdev); 29 21 30 - __SMBDIRECT_PUBLIC__ 31 22 bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs); 32 23 33 - __SMBDIRECT_PUBLIC__ 34 24 int smbdirect_socket_create_kern(struct net *net, struct smbdirect_socket **_sc); 35 25 36 - __SMBDIRECT_PUBLIC__ 37 26 int smbdirect_socket_create_accepting(struct rdma_cm_id *id, struct smbdirect_socket **_sc); 38 27 39 - __SMBDIRECT_PUBLIC__ 40 28 int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, 41 29 const struct smbdirect_socket_parameters *sp); 42 30 43 - __SMBDIRECT_PUBLIC__ 44 31 const struct smbdirect_socket_parameters * 45 32 smbdirect_socket_get_current_parameters(struct smbdirect_socket *sc); 46 33 47 - __SMBDIRECT_PUBLIC__ 48 34 int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, 49 35 enum ib_poll_context poll_ctx, 50 36 gfp_t gfp_mask); 51 - 52 - __SMBDIRECT_PUBLIC__ 53 - int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, 54 - struct workqueue_struct *workqueue); 55 37 56 38 #define SMBDIRECT_LOG_ERR 0x0 57 39 #define SMBDIRECT_LOG_INFO 0x1 ··· 49 67 #define SMBDIRECT_LOG_RDMA_MR 0x100 50 68 #define SMBDIRECT_LOG_RDMA_RW 0x200 51 69 #define SMBDIRECT_LOG_NEGOTIATE 0x400 52 - __SMBDIRECT_PUBLIC__ 53 70 void smbdirect_socket_set_logging(struct smbdirect_socket *sc, 54 71 void *private_ptr, 55 72 bool (*needed)(struct smbdirect_socket *sc, ··· 63 82 unsigned int cls, 64 83 struct va_format *vaf)); 65 84 66 - __SMBDIRECT_PUBLIC__ 67 85 bool smbdirect_connection_is_connected(struct smbdirect_socket *sc); 68 86 69 - __SMBDIRECT_PUBLIC__ 70 87 int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc); 71 88 72 - __SMBDIRECT_PUBLIC__ 73 89 int smbdirect_socket_bind(struct smbdirect_socket *sc, struct sockaddr *addr); 74 90 75 - __SMBDIRECT_PUBLIC__ 76 91 void smbdirect_socket_shutdown(struct smbdirect_socket *sc); 77 92 78 - __SMBDIRECT_PUBLIC__ 79 93 void smbdirect_socket_release(struct smbdirect_socket *sc); 80 94 81 - __SMBDIRECT_PUBLIC__ 82 95 int smbdirect_connection_send_batch_flush(struct smbdirect_socket *sc, 83 96 struct smbdirect_send_batch *batch, 84 97 bool is_last); ··· 89 114 }; 90 115 }; 91 116 92 - __SMBDIRECT_PUBLIC__ 93 117 struct smbdirect_send_batch * 94 118 smbdirect_init_send_batch_storage(struct smbdirect_send_batch_storage *storage, 95 119 bool need_invalidate_rkey, 96 120 unsigned int remote_key); 97 121 98 - __SMBDIRECT_PUBLIC__ 99 122 int smbdirect_connection_send_single_iter(struct smbdirect_socket *sc, 100 123 struct smbdirect_send_batch *batch, 101 124 struct iov_iter *iter, 102 125 unsigned int flags, 103 126 u32 remaining_data_length); 104 127 105 - __SMBDIRECT_PUBLIC__ 106 128 int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket *sc); 107 129 108 - __SMBDIRECT_PUBLIC__ 109 130 int smbdirect_connection_send_iter(struct smbdirect_socket *sc, 110 131 struct iov_iter *iter, 111 132 unsigned int flags, 112 133 bool need_invalidate, 113 134 unsigned int remote_key); 114 135 115 - __SMBDIRECT_PUBLIC__ 116 136 int smbdirect_connection_recvmsg(struct smbdirect_socket *sc, 117 137 struct msghdr *msg, 118 138 unsigned int flags); 119 139 120 - __SMBDIRECT_PUBLIC__ 121 140 int smbdirect_connect(struct smbdirect_socket *sc, 122 141 const struct sockaddr *dst); 123 142 124 - __SMBDIRECT_PUBLIC__ 125 143 int smbdirect_connect_sync(struct smbdirect_socket *sc, 126 144 const struct sockaddr *dst); 127 145 128 - __SMBDIRECT_PUBLIC__ 129 146 int smbdirect_socket_listen(struct smbdirect_socket *sc, int backlog); 130 147 131 - __SMBDIRECT_PUBLIC__ 132 - int smbdirect_accept_connect_request(struct smbdirect_socket *sc, 133 - const struct rdma_conn_param *param); 134 - 135 - __SMBDIRECT_PUBLIC__ 136 148 struct smbdirect_socket *smbdirect_socket_accept(struct smbdirect_socket *lsc, 137 149 long timeo, 138 150 struct proto_accept_arg *arg); 139 151 140 - __SMBDIRECT_PUBLIC__ 141 152 int smbdirect_connection_rdma_xmit(struct smbdirect_socket *sc, 142 153 void *buf, size_t buf_len, 143 154 struct smbdirect_buffer_descriptor_v1 *desc, 144 155 size_t desc_len, 145 156 bool is_read); 146 157 147 - __SMBDIRECT_PUBLIC__ 148 158 struct smbdirect_mr_io * 149 159 smbdirect_connection_register_mr_io(struct smbdirect_socket *sc, 150 160 struct iov_iter *iter, 151 161 bool writing, 152 162 bool need_invalidate); 153 163 154 - __SMBDIRECT_PUBLIC__ 155 164 void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, 156 165 struct smbdirect_buffer_descriptor_v1 *v1); 157 166 158 - __SMBDIRECT_PUBLIC__ 159 167 void smbdirect_connection_deregister_mr_io(struct smbdirect_mr_io *mr); 160 168 161 - __SMBDIRECT_PUBLIC__ 162 169 void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket *sc, 163 170 unsigned int rdma_readwrite_threshold, 164 171 struct seq_file *m);
-1
fs/smb/common/smbdirect/smbdirect_rw.c
··· 105 105 smbdirect_connection_rdma_rw_done(cq, wc, DMA_TO_DEVICE); 106 106 } 107 107 108 - __SMBDIRECT_PUBLIC__ 109 108 int smbdirect_connection_rdma_xmit(struct smbdirect_socket *sc, 110 109 void *buf, size_t buf_len, 111 110 struct smbdirect_buffer_descriptor_v1 *desc,
-71
fs/smb/common/smbdirect/smbdirect_socket.c
··· 6 6 7 7 #include "smbdirect_internal.h" 8 8 9 - __SMBDIRECT_PUBLIC__ 10 9 bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs) 11 10 { 12 11 /* ··· 51 52 return -ESTALE; 52 53 } 53 54 54 - __SMBDIRECT_PRIVATE__ 55 55 int smbdirect_socket_init_new(struct net *net, struct smbdirect_socket *sc) 56 56 { 57 57 struct rdma_cm_id *id; ··· 83 85 return 0; 84 86 } 85 87 86 - __SMBDIRECT_PUBLIC__ 87 88 int smbdirect_socket_create_kern(struct net *net, struct smbdirect_socket **_sc) 88 89 { 89 90 struct smbdirect_socket *sc; ··· 109 112 } 110 113 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_create_kern); 111 114 112 - __SMBDIRECT_PRIVATE__ 113 115 int smbdirect_socket_init_accepting(struct rdma_cm_id *id, struct smbdirect_socket *sc) 114 116 { 115 117 smbdirect_socket_init(sc); ··· 124 128 return 0; 125 129 } 126 130 127 - __SMBDIRECT_PUBLIC__ 128 131 int smbdirect_socket_create_accepting(struct rdma_cm_id *id, struct smbdirect_socket **_sc) 129 132 { 130 133 struct smbdirect_socket *sc; ··· 150 155 } 151 156 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_create_accepting); 152 157 153 - __SMBDIRECT_PUBLIC__ 154 158 int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, 155 159 const struct smbdirect_socket_parameters *sp) 156 160 { ··· 186 192 } 187 193 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_initial_parameters); 188 194 189 - __SMBDIRECT_PUBLIC__ 190 195 const struct smbdirect_socket_parameters * 191 196 smbdirect_socket_get_current_parameters(struct smbdirect_socket *sc) 192 197 { ··· 193 200 } 194 201 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_get_current_parameters); 195 202 196 - __SMBDIRECT_PUBLIC__ 197 203 int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, 198 204 enum ib_poll_context poll_ctx, 199 205 gfp_t gfp_mask) ··· 217 225 } 218 226 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_kernel_settings); 219 227 220 - __SMBDIRECT_PUBLIC__ 221 - int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, 222 - struct workqueue_struct *workqueue) 223 - { 224 - /* 225 - * This is only allowed before connect or accept 226 - */ 227 - WARN_ONCE(sc->status != SMBDIRECT_SOCKET_CREATED, 228 - "status=%s first_error=%1pe", 229 - smbdirect_socket_status_string(sc->status), 230 - SMBDIRECT_DEBUG_ERR_PTR(sc->first_error)); 231 - if (sc->status != SMBDIRECT_SOCKET_CREATED) 232 - return -EINVAL; 233 - 234 - /* 235 - * Remember the callers workqueue 236 - */ 237 - sc->workqueues.accept = workqueue; 238 - sc->workqueues.connect = workqueue; 239 - sc->workqueues.idle = workqueue; 240 - sc->workqueues.refill = workqueue; 241 - sc->workqueues.immediate = workqueue; 242 - sc->workqueues.cleanup = workqueue; 243 - 244 - return 0; 245 - } 246 - __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_custom_workqueue); 247 - 248 - __maybe_unused /* this is temporary while this file is included in others */ 249 - static void smbdirect_socket_prepare_create(struct smbdirect_socket *sc, 250 - const struct smbdirect_socket_parameters *sp, 251 - struct workqueue_struct *workqueue) 252 - { 253 - smbdirect_socket_init(sc); 254 - 255 - /* 256 - * Make a copy of the callers parameters 257 - * from here we only work on the copy 258 - */ 259 - smbdirect_socket_set_initial_parameters(sc, sp); 260 - 261 - /* 262 - * Remember the callers workqueue 263 - */ 264 - smbdirect_socket_set_custom_workqueue(sc, workqueue); 265 - 266 - INIT_WORK(&sc->disconnect_work, smbdirect_socket_cleanup_work); 267 - 268 - INIT_DELAYED_WORK(&sc->idle.timer_work, smbdirect_connection_idle_timer_work); 269 - } 270 - 271 - __SMBDIRECT_PUBLIC__ 272 228 void smbdirect_socket_set_logging(struct smbdirect_socket *sc, 273 229 void *private_ptr, 274 230 bool (*needed)(struct smbdirect_socket *sc, ··· 248 308 wake_up_all(&sc->send_io.bcredits.wait_queue); 249 309 wake_up_all(&sc->send_io.lcredits.wait_queue); 250 310 wake_up_all(&sc->send_io.credits.wait_queue); 251 - wake_up_all(&sc->send_io.pending.dec_wait_queue); 252 311 wake_up_all(&sc->send_io.pending.zero_wait_queue); 253 312 wake_up_all(&sc->recv_io.reassembly.wait_queue); 254 313 wake_up_all(&sc->rw_io.credits.wait_queue); 255 314 wake_up_all(&sc->mr_io.ready.wait_queue); 256 - wake_up_all(&sc->mr_io.cleanup.wait_queue); 257 315 } 258 316 259 - __SMBDIRECT_PRIVATE__ 260 317 void __smbdirect_socket_schedule_cleanup(struct smbdirect_socket *sc, 261 318 const char *macro_name, 262 319 unsigned int lvl, ··· 291 354 */ 292 355 disable_work(&sc->connect.work); 293 356 disable_work(&sc->recv_io.posted.refill_work); 294 - disable_work(&sc->mr_io.recovery_work); 295 357 disable_work(&sc->idle.immediate_work); 296 358 sc->idle.keepalive = SMBDIRECT_KEEPALIVE_NONE; 297 359 disable_delayed_work(&sc->idle.timer_work); ··· 391 455 disable_work(&sc->disconnect_work); 392 456 disable_work(&sc->connect.work); 393 457 disable_work(&sc->recv_io.posted.refill_work); 394 - disable_work(&sc->mr_io.recovery_work); 395 458 disable_work(&sc->idle.immediate_work); 396 459 sc->idle.keepalive = SMBDIRECT_KEEPALIVE_NONE; 397 460 disable_delayed_work(&sc->idle.timer_work); ··· 508 573 disable_work_sync(&sc->disconnect_work); 509 574 disable_work_sync(&sc->connect.work); 510 575 disable_work_sync(&sc->recv_io.posted.refill_work); 511 - disable_work_sync(&sc->mr_io.recovery_work); 512 576 disable_work_sync(&sc->idle.immediate_work); 513 577 disable_delayed_work_sync(&sc->idle.timer_work); 514 578 ··· 583 649 "rdma session destroyed\n"); 584 650 } 585 651 586 - __SMBDIRECT_PRIVATE__ 587 652 void smbdirect_socket_destroy_sync(struct smbdirect_socket *sc) 588 653 { 589 654 smbdirect_log_rdma_event(sc, SMBDIRECT_LOG_INFO, ··· 631 698 SMBDIRECT_DEBUG_ERR_PTR(sc->first_error)); 632 699 } 633 700 634 - __SMBDIRECT_PUBLIC__ 635 701 int smbdirect_socket_bind(struct smbdirect_socket *sc, struct sockaddr *addr) 636 702 { 637 703 int ret; ··· 646 714 } 647 715 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_bind); 648 716 649 - __SMBDIRECT_PUBLIC__ 650 717 void smbdirect_socket_shutdown(struct smbdirect_socket *sc) 651 718 { 652 719 smbdirect_socket_schedule_cleanup_lvl(sc, SMBDIRECT_LOG_INFO, -ESHUTDOWN); ··· 677 746 kfree(sc); 678 747 } 679 748 680 - __SMBDIRECT_PUBLIC__ 681 749 void smbdirect_socket_release(struct smbdirect_socket *sc) 682 750 { 683 751 /* ··· 695 765 } 696 766 __SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_release); 697 767 698 - __SMBDIRECT_PRIVATE__ 699 768 int smbdirect_socket_wait_for_credits(struct smbdirect_socket *sc, 700 769 enum smbdirect_socket_status expected_status, 701 770 int unexpected_errno,
-15
fs/smb/common/smbdirect/smbdirect_socket.h
··· 277 277 struct { 278 278 atomic_t count; 279 279 /* 280 - * woken when count is decremented 281 - */ 282 - wait_queue_head_t dec_wait_queue; 283 - /* 284 280 * woken when count reached zero 285 281 */ 286 282 wait_queue_head_t zero_wait_queue; ··· 389 393 struct { 390 394 atomic_t count; 391 395 } used; 392 - 393 - struct work_struct recovery_work; 394 - 395 - /* Used by transport to wait until all MRs are returned */ 396 - struct { 397 - wait_queue_head_t wait_queue; 398 - } cleanup; 399 396 } mr_io; 400 397 401 398 /* ··· 605 616 init_waitqueue_head(&sc->send_io.credits.wait_queue); 606 617 607 618 atomic_set(&sc->send_io.pending.count, 0); 608 - init_waitqueue_head(&sc->send_io.pending.dec_wait_queue); 609 619 init_waitqueue_head(&sc->send_io.pending.zero_wait_queue); 610 620 611 621 sc->recv_io.mem.gfp_mask = GFP_KERNEL; ··· 632 644 atomic_set(&sc->mr_io.ready.count, 0); 633 645 init_waitqueue_head(&sc->mr_io.ready.wait_queue); 634 646 atomic_set(&sc->mr_io.used.count, 0); 635 - INIT_WORK(&sc->mr_io.recovery_work, __smbdirect_socket_disabled_work); 636 - disable_work_sync(&sc->mr_io.recovery_work); 637 - init_waitqueue_head(&sc->mr_io.cleanup.wait_queue); 638 647 639 648 sc->logging.private_ptr = NULL; 640 649 sc->logging.needed = __smbdirect_log_needed;