From: Stefan Metzmacher Date: Mon, 27 Oct 2025 15:57:39 +0000 (+0100) Subject: smb: smbdirect: introduce smbdirect_public.h with prototypes X-Git-Url: http://git.ipfire.org/index.cgi?a=commitdiff_plain;h=b2261ceedd4a4831957732ebae5ad33bf5c7fc80;p=thirdparty%2Fkernel%2Flinux.git smb: smbdirect: introduce smbdirect_public.h with prototypes smbdirect_public.h contains functions which will be still be eported when we move to an smbdirect.ko. For now this uses the SMBDIRECT_USE_INLINE_C_FILES code path and marks all function as '__maybe_unused static', but this will make further changes easier. Note this generates the following things from checkpatch.pl, so I passed --ignore=FILE_PATH_CHANGES,EXPORT_SYMBOL,COMPLEX_MACRO ERROR: Macros with complex values should be enclosed in parentheses #514: FILE: fs/smb/common/smbdirect/smbdirect_public.h:18: +#define __SMBDIRECT_PUBLIC__ __maybe_unused static WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable #515: FILE: fs/smb/common/smbdirect/smbdirect_public.h:19: +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym) WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable #518: FILE: fs/smb/common/smbdirect/smbdirect_public.h:22: +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym) EXPORT_SYMBOL_FOR_MODULES(__sym, "cifs,ksmbd") This is exactly what we want here, so we should ignore the checkpatch.pl problems. Cc: Steve French Cc: Tom Talpey Cc: Long Li Cc: Namjae Jeon Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher Acked-by: Namjae Jeon Signed-off-by: Steve French --- diff --git a/fs/smb/common/smbdirect/smbdirect_accept.c b/fs/smb/common/smbdirect/smbdirect_accept.c index 768d5864cf67d..4baa2c1ad31eb 100644 --- a/fs/smb/common/smbdirect/smbdirect_accept.c +++ b/fs/smb/common/smbdirect/smbdirect_accept.c @@ -14,9 +14,9 @@ static int smbdirect_accept_init_params(struct smbdirect_socket *sc); static void smbdirect_accept_negotiate_recv_done(struct ib_cq *cq, struct ib_wc *wc); static void smbdirect_accept_negotiate_send_done(struct ib_cq *cq, struct ib_wc *wc); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_accept_connect_request(struct smbdirect_socket *sc, - const struct rdma_conn_param *param) +__SMBDIRECT_PUBLIC__ +int smbdirect_accept_connect_request(struct smbdirect_socket *sc, + const struct rdma_conn_param *param) { struct smbdirect_socket_parameters *sp = &sc->parameters; struct smbdirect_recv_io *recv_io; @@ -160,6 +160,7 @@ create_qp_failed: init_params_failed: return ret; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_accept_connect_request); static int smbdirect_accept_init_params(struct smbdirect_socket *sc) { diff --git a/fs/smb/common/smbdirect/smbdirect_connect.c b/fs/smb/common/smbdirect/smbdirect_connect.c index c32daf788b419..f411f6ee66b55 100644 --- a/fs/smb/common/smbdirect/smbdirect_connect.c +++ b/fs/smb/common/smbdirect/smbdirect_connect.c @@ -16,9 +16,8 @@ static int smbdirect_connect_negotiate_start(struct smbdirect_socket *sc); static void smbdirect_connect_negotiate_send_done(struct ib_cq *cq, struct ib_wc *wc); static void smbdirect_connect_negotiate_recv_done(struct ib_cq *cq, struct ib_wc *wc); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connect(struct smbdirect_socket *sc, - const struct sockaddr *dst) +__SMBDIRECT_PUBLIC__ +int smbdirect_connect(struct smbdirect_socket *sc, const struct sockaddr *dst) { const struct sockaddr *src = NULL; union { @@ -62,6 +61,7 @@ static int smbdirect_connect(struct smbdirect_socket *sc, */ return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connect); static int smbdirect_connect_setup_connection(struct smbdirect_socket *sc) { @@ -895,9 +895,9 @@ static void smbdirect_connect_negotiate_recv_work(struct work_struct *work) smbdirect_connection_negotiation_done(sc); } -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connect_sync(struct smbdirect_socket *sc, - const struct sockaddr *dst) +__SMBDIRECT_PUBLIC__ +int smbdirect_connect_sync(struct smbdirect_socket *sc, + const struct sockaddr *dst) { int ret; @@ -924,3 +924,4 @@ static int smbdirect_connect_sync(struct smbdirect_socket *sc, return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connect_sync); diff --git a/fs/smb/common/smbdirect/smbdirect_connection.c b/fs/smb/common/smbdirect/smbdirect_connection.c index 735d8dc3e9f5c..7f9fa2b615a22 100644 --- a/fs/smb/common/smbdirect/smbdirect_connection.c +++ b/fs/smb/common/smbdirect/smbdirect_connection.c @@ -703,16 +703,17 @@ static void smbdirect_connection_negotiate_rdma_resources(struct smbdirect_socke peer_responder_resources); } -__maybe_unused /* this is temporary while this file is included in others */ -static bool smbdirect_connection_is_connected(struct smbdirect_socket *sc) +__SMBDIRECT_PUBLIC__ +bool smbdirect_connection_is_connected(struct smbdirect_socket *sc) { if (unlikely(!sc || sc->first_error || sc->status != SMBDIRECT_SOCKET_CONNECTED)) return false; return true; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_is_connected); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc) +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc) { const struct smbdirect_socket_parameters *sp = &sc->parameters; union { @@ -783,6 +784,7 @@ static int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc) return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_wait_for_connected); static void smbdirect_connection_idle_timer_work(struct work_struct *work) { @@ -1062,11 +1064,12 @@ static int smbdirect_connection_post_send_io(struct smbdirect_socket *sc, return smbdirect_connection_post_send_wr(sc, &msg->wr); } -static int smbdirect_connection_send_single_iter(struct smbdirect_socket *sc, - struct smbdirect_send_batch *batch, - struct iov_iter *iter, - unsigned int flags, - u32 remaining_data_length) +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_single_iter(struct smbdirect_socket *sc, + struct smbdirect_send_batch *batch, + struct iov_iter *iter, + unsigned int flags, + u32 remaining_data_length) { const struct smbdirect_socket_parameters *sp = &sc->parameters; struct smbdirect_send_batch _batch; @@ -1249,9 +1252,10 @@ lcredit_failed: bcredit_failed: return ret; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_single_iter); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket *sc) +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket *sc) { /* * As an optimization, we don't wait for individual I/O to finish @@ -1274,13 +1278,14 @@ static int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket * return 0; } - -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connection_send_iter(struct smbdirect_socket *sc, - struct iov_iter *iter, - unsigned int flags, - bool need_invalidate, - unsigned int remote_key) +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_wait_zero_pending); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_iter(struct smbdirect_socket *sc, + struct iov_iter *iter, + unsigned int flags, + bool need_invalidate, + unsigned int remote_key) { const struct smbdirect_socket_parameters *sp = &sc->parameters; struct smbdirect_send_batch batch; @@ -1359,6 +1364,7 @@ static int smbdirect_connection_send_iter(struct smbdirect_socket *sc, return total_count; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_send_iter); static void smbdirect_connection_send_io_done(struct ib_cq *cq, struct ib_wc *wc) { @@ -1777,10 +1783,10 @@ static void smbdirect_connection_recv_io_refill_work(struct work_struct *work) } } -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connection_recvmsg(struct smbdirect_socket *sc, - struct msghdr *msg, - unsigned int flags) +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_recvmsg(struct smbdirect_socket *sc, + struct msghdr *msg, + unsigned int flags) { struct smbdirect_recv_io *response; struct smbdirect_data_transfer *data_transfer; @@ -1927,6 +1933,7 @@ read_rfc1002_done: goto again; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_recvmsg); static bool smbdirect_map_sges_single_page(struct smbdirect_map_sges *state, struct page *page, size_t off, size_t len) diff --git a/fs/smb/common/smbdirect/smbdirect_debug.c b/fs/smb/common/smbdirect/smbdirect_debug.c index 20b87d8aa6d18..eac924164fd47 100644 --- a/fs/smb/common/smbdirect/smbdirect_debug.c +++ b/fs/smb/common/smbdirect/smbdirect_debug.c @@ -7,10 +7,10 @@ #include "smbdirect_internal.h" #include -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket *sc, - unsigned int rdma_readwrite_threshold, - struct seq_file *m) +__SMBDIRECT_PUBLIC__ +void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket *sc, + unsigned int rdma_readwrite_threshold, + struct seq_file *m) { const struct smbdirect_socket_parameters *sp; @@ -86,3 +86,4 @@ static void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket atomic_read(&sc->mr_io.ready.count), atomic_read(&sc->mr_io.used.count)); } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_legacy_debug_proc_show); diff --git a/fs/smb/common/smbdirect/smbdirect_internal.h b/fs/smb/common/smbdirect/smbdirect_internal.h index 63349ce3536cc..f8f76bfe5c3e0 100644 --- a/fs/smb/common/smbdirect/smbdirect_internal.h +++ b/fs/smb/common/smbdirect/smbdirect_internal.h @@ -12,6 +12,7 @@ #include "smbdirect.h" #include "smbdirect_pdu.h" +#include "smbdirect_public.h" #include "smbdirect_socket.h" static void __smbdirect_socket_schedule_cleanup(struct smbdirect_socket *sc, diff --git a/fs/smb/common/smbdirect/smbdirect_mr.c b/fs/smb/common/smbdirect/smbdirect_mr.c index d5bf8531e2373..90879bd109c18 100644 --- a/fs/smb/common/smbdirect/smbdirect_mr.c +++ b/fs/smb/common/smbdirect/smbdirect_mr.c @@ -330,8 +330,8 @@ static int smbdirect_iter_to_sgt(struct iov_iter *iter, * need_invalidate: true if this MR needs to be locally invalidated after I/O * return value: the MR registered, NULL if failed. */ -__maybe_unused /* this is temporary while this file is included in others */ -static struct smbdirect_mr_io * +__SMBDIRECT_PUBLIC__ +struct smbdirect_mr_io * smbdirect_connection_register_mr_io(struct smbdirect_socket *sc, struct iov_iter *iter, bool writing, @@ -452,10 +452,11 @@ dma_map_error: mutex_unlock(&mr->mutex); return NULL; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_register_mr_io); -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, - struct smbdirect_buffer_descriptor_v1 *v1) +__SMBDIRECT_PUBLIC__ +void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, + struct smbdirect_buffer_descriptor_v1 *v1) { mutex_lock(&mr->mutex); if (mr->state == SMBDIRECT_MR_REGISTERED) { @@ -469,6 +470,7 @@ static void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, } mutex_unlock(&mr->mutex); } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_mr_io_fill_buffer_descriptor); /* * Deregister a MR after I/O is done @@ -476,8 +478,8 @@ static void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, * and we have to locally invalidate the buffer to prevent data is being * modified by remote peer after upper layer consumes it */ -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_connection_deregister_mr_io(struct smbdirect_mr_io *mr) +__SMBDIRECT_PUBLIC__ +void smbdirect_connection_deregister_mr_io(struct smbdirect_mr_io *mr) { struct smbdirect_socket *sc = mr->socket; int ret = 0; @@ -559,3 +561,4 @@ put_kref: if (!kref_put(&mr->kref, smbdirect_mr_io_free_locked)) mutex_unlock(&mr->mutex); } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_deregister_mr_io); diff --git a/fs/smb/common/smbdirect/smbdirect_public.h b/fs/smb/common/smbdirect/smbdirect_public.h new file mode 100644 index 0000000000000..a5b15fce840cd --- /dev/null +++ b/fs/smb/common/smbdirect/smbdirect_public.h @@ -0,0 +1,154 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2025, Stefan Metzmacher + */ + +#ifndef __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PUBLIC_H__ +#define __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PUBLIC_H__ + +struct smbdirect_buffer_descriptor_v1; +struct smbdirect_socket_parameters; + +struct smbdirect_socket; +struct smbdirect_send_batch; +struct smbdirect_mr_io; + +#ifdef SMBDIRECT_USE_INLINE_C_FILES +/* this is temporary while this file is included in others */ +#define __SMBDIRECT_PUBLIC__ __maybe_unused static +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym) +#else +#define __SMBDIRECT_PUBLIC__ +#define __SMBDIRECT_EXPORT_SYMBOL__(__sym) EXPORT_SYMBOL_FOR_MODULES(__sym, "cifs,ksmbd") +#endif + +#include + +__SMBDIRECT_PUBLIC__ +bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs); + +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_create_kern(struct net *net, struct smbdirect_socket **_sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_create_accepting(struct rdma_cm_id *id, struct smbdirect_socket **_sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, + const struct smbdirect_socket_parameters *sp); + +__SMBDIRECT_PUBLIC__ +const struct smbdirect_socket_parameters * +smbdirect_socket_get_current_parameters(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, + enum ib_poll_context poll_ctx, + gfp_t gfp_mask); + +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, + struct workqueue_struct *workqueue); + +#define SMBDIRECT_LOG_ERR 0x0 +#define SMBDIRECT_LOG_INFO 0x1 + +#define SMBDIRECT_LOG_OUTGOING 0x1 +#define SMBDIRECT_LOG_INCOMING 0x2 +#define SMBDIRECT_LOG_READ 0x4 +#define SMBDIRECT_LOG_WRITE 0x8 +#define SMBDIRECT_LOG_RDMA_SEND 0x10 +#define SMBDIRECT_LOG_RDMA_RECV 0x20 +#define SMBDIRECT_LOG_KEEP_ALIVE 0x40 +#define SMBDIRECT_LOG_RDMA_EVENT 0x80 +#define SMBDIRECT_LOG_RDMA_MR 0x100 +#define SMBDIRECT_LOG_RDMA_RW 0x200 +#define SMBDIRECT_LOG_NEGOTIATE 0x400 +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_set_logging(struct smbdirect_socket *sc, + void *private_ptr, + bool (*needed)(struct smbdirect_socket *sc, + void *private_ptr, + unsigned int lvl, + unsigned int cls), + void (*vaprintf)(struct smbdirect_socket *sc, + const char *func, + unsigned int line, + void *private_ptr, + unsigned int lvl, + unsigned int cls, + struct va_format *vaf)); + +__SMBDIRECT_PUBLIC__ +bool smbdirect_connection_is_connected(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_wait_for_connected(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_shutdown(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_release(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_single_iter(struct smbdirect_socket *sc, + struct smbdirect_send_batch *batch, + struct iov_iter *iter, + unsigned int flags, + u32 remaining_data_length); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_wait_zero_pending(struct smbdirect_socket *sc); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_send_iter(struct smbdirect_socket *sc, + struct iov_iter *iter, + unsigned int flags, + bool need_invalidate, + unsigned int remote_key); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_recvmsg(struct smbdirect_socket *sc, + struct msghdr *msg, + unsigned int flags); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connect(struct smbdirect_socket *sc, + const struct sockaddr *dst); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connect_sync(struct smbdirect_socket *sc, + const struct sockaddr *dst); + +__SMBDIRECT_PUBLIC__ +int smbdirect_accept_connect_request(struct smbdirect_socket *sc, + const struct rdma_conn_param *param); + +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_rdma_xmit(struct smbdirect_socket *sc, + void *buf, size_t buf_len, + struct smbdirect_buffer_descriptor_v1 *desc, + size_t desc_len, + bool is_read); + +__SMBDIRECT_PUBLIC__ +struct smbdirect_mr_io * +smbdirect_connection_register_mr_io(struct smbdirect_socket *sc, + struct iov_iter *iter, + bool writing, + bool need_invalidate); + +__SMBDIRECT_PUBLIC__ +void smbdirect_mr_io_fill_buffer_descriptor(struct smbdirect_mr_io *mr, + struct smbdirect_buffer_descriptor_v1 *v1); + +__SMBDIRECT_PUBLIC__ +void smbdirect_connection_deregister_mr_io(struct smbdirect_mr_io *mr); + +__SMBDIRECT_PUBLIC__ +void smbdirect_connection_legacy_debug_proc_show(struct smbdirect_socket *sc, + unsigned int rdma_readwrite_threshold, + struct seq_file *m); + +#endif /* __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PUBLIC_H__ */ diff --git a/fs/smb/common/smbdirect/smbdirect_rw.c b/fs/smb/common/smbdirect/smbdirect_rw.c index 6eeec535b130e..bd90dffbf369e 100644 --- a/fs/smb/common/smbdirect/smbdirect_rw.c +++ b/fs/smb/common/smbdirect/smbdirect_rw.c @@ -105,12 +105,12 @@ static void smbdirect_connection_rdma_write_done(struct ib_cq *cq, struct ib_wc smbdirect_connection_rdma_rw_done(cq, wc, DMA_TO_DEVICE); } -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_connection_rdma_xmit(struct smbdirect_socket *sc, - void *buf, size_t buf_len, - struct smbdirect_buffer_descriptor_v1 *desc, - size_t desc_len, - bool is_read) +__SMBDIRECT_PUBLIC__ +int smbdirect_connection_rdma_xmit(struct smbdirect_socket *sc, + void *buf, size_t buf_len, + struct smbdirect_buffer_descriptor_v1 *desc, + size_t desc_len, + bool is_read) { const struct smbdirect_socket_parameters *sp = &sc->parameters; enum dma_data_direction direction = is_read ? DMA_FROM_DEVICE : DMA_TO_DEVICE; @@ -253,3 +253,4 @@ free_msg: kfree(msg); goto out; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_connection_rdma_xmit); diff --git a/fs/smb/common/smbdirect/smbdirect_socket.c b/fs/smb/common/smbdirect/smbdirect_socket.c index f70cd395812bd..a54c16daffb90 100644 --- a/fs/smb/common/smbdirect/smbdirect_socket.c +++ b/fs/smb/common/smbdirect/smbdirect_socket.c @@ -6,8 +6,8 @@ #include "smbdirect_internal.h" -__maybe_unused /* this is temporary while this file is included in others */ -static bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs) +__SMBDIRECT_PUBLIC__ +bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs) { /* * Test if FRWR (Fast Registration Work Requests) is supported on the @@ -21,6 +21,7 @@ static bool smbdirect_frwr_is_supported(const struct ib_device_attr *attrs) return false; return true; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_frwr_is_supported); static void smbdirect_socket_cleanup_work(struct work_struct *work); @@ -83,8 +84,8 @@ static int smbdirect_socket_init_new(struct net *net, struct smbdirect_socket *s return 0; } -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_socket_create_kern(struct net *net, struct smbdirect_socket **_sc) +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_create_kern(struct net *net, struct smbdirect_socket **_sc) { struct smbdirect_socket *sc; int ret; @@ -108,6 +109,7 @@ init_failed: alloc_failed: return ret; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_create_kern); static int smbdirect_socket_init_accepting(struct rdma_cm_id *id, struct smbdirect_socket *sc) { @@ -124,8 +126,8 @@ static int smbdirect_socket_init_accepting(struct rdma_cm_id *id, struct smbdire return 0; } -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_socket_create_accepting(struct rdma_cm_id *id, struct smbdirect_socket **_sc) +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_create_accepting(struct rdma_cm_id *id, struct smbdirect_socket **_sc) { struct smbdirect_socket *sc; int ret; @@ -149,10 +151,11 @@ init_failed: alloc_failed: return ret; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_create_accepting); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, - const struct smbdirect_socket_parameters *sp) +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, + const struct smbdirect_socket_parameters *sp) { /* * This is only allowed before connect or accept @@ -185,18 +188,20 @@ static int smbdirect_socket_set_initial_parameters(struct smbdirect_socket *sc, return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_initial_parameters); -__maybe_unused /* this is temporary while this file is included in others */ -static const struct smbdirect_socket_parameters * +__SMBDIRECT_PUBLIC__ +const struct smbdirect_socket_parameters * smbdirect_socket_get_current_parameters(struct smbdirect_socket *sc) { return &sc->parameters; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_get_current_parameters); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, - enum ib_poll_context poll_ctx, - gfp_t gfp_mask) +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, + enum ib_poll_context poll_ctx, + gfp_t gfp_mask) { /* * This is only allowed before connect or accept @@ -216,10 +221,11 @@ static int smbdirect_socket_set_kernel_settings(struct smbdirect_socket *sc, return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_kernel_settings); -__maybe_unused /* this is temporary while this file is included in others */ -static int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, - struct workqueue_struct *workqueue) +__SMBDIRECT_PUBLIC__ +int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, + struct workqueue_struct *workqueue) { /* * This is only allowed before connect or accept @@ -238,6 +244,7 @@ static int smbdirect_socket_set_custom_workqueue(struct smbdirect_socket *sc, return 0; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_custom_workqueue); __maybe_unused /* this is temporary while this file is included in others */ static void smbdirect_socket_prepare_create(struct smbdirect_socket *sc, @@ -262,25 +269,26 @@ static void smbdirect_socket_prepare_create(struct smbdirect_socket *sc, INIT_DELAYED_WORK(&sc->idle.timer_work, smbdirect_connection_idle_timer_work); } -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_socket_set_logging(struct smbdirect_socket *sc, - void *private_ptr, - bool (*needed)(struct smbdirect_socket *sc, - void *private_ptr, - unsigned int lvl, - unsigned int cls), - void (*vaprintf)(struct smbdirect_socket *sc, - const char *func, - unsigned int line, - void *private_ptr, - unsigned int lvl, - unsigned int cls, - struct va_format *vaf)) +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_set_logging(struct smbdirect_socket *sc, + void *private_ptr, + bool (*needed)(struct smbdirect_socket *sc, + void *private_ptr, + unsigned int lvl, + unsigned int cls), + void (*vaprintf)(struct smbdirect_socket *sc, + const char *func, + unsigned int line, + void *private_ptr, + unsigned int lvl, + unsigned int cls, + struct va_format *vaf)) { sc->logging.private_ptr = private_ptr; sc->logging.needed = needed; sc->logging.vaprintf = vaprintf; } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_set_logging); static void smbdirect_socket_wake_up_all(struct smbdirect_socket *sc) { @@ -600,11 +608,12 @@ static void smbdirect_socket_destroy_sync(struct smbdirect_socket *sc) SMBDIRECT_DEBUG_ERR_PTR(sc->first_error)); } -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_socket_shutdown(struct smbdirect_socket *sc) +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_shutdown(struct smbdirect_socket *sc) { smbdirect_socket_schedule_cleanup_lvl(sc, SMBDIRECT_LOG_INFO, -ESHUTDOWN); } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_shutdown); static void smbdirect_socket_release_disconnect(struct kref *kref) { @@ -631,8 +640,8 @@ static void smbdirect_socket_release_destroy(struct kref *kref) kfree(sc); } -__maybe_unused /* this is temporary while this file is included in others */ -static void smbdirect_socket_release(struct smbdirect_socket *sc) +__SMBDIRECT_PUBLIC__ +void smbdirect_socket_release(struct smbdirect_socket *sc) { /* * We expect only 1 disconnect reference @@ -648,6 +657,7 @@ static void smbdirect_socket_release(struct smbdirect_socket *sc) */ kref_put(&sc->refs.destroy, smbdirect_socket_release_destroy); } +__SMBDIRECT_EXPORT_SYMBOL__(smbdirect_socket_release); __maybe_unused /* this is temporary while this file is included in others */ static int smbdirect_socket_wait_for_credits(struct smbdirect_socket *sc, diff --git a/fs/smb/common/smbdirect/smbdirect_socket.h b/fs/smb/common/smbdirect/smbdirect_socket.h index 7bd55cbc42273..44d04cc63d04a 100644 --- a/fs/smb/common/smbdirect/smbdirect_socket.h +++ b/fs/smb/common/smbdirect/smbdirect_socket.h @@ -406,20 +406,6 @@ struct smbdirect_socket { } statistics; struct { -#define SMBDIRECT_LOG_ERR 0x0 -#define SMBDIRECT_LOG_INFO 0x1 - -#define SMBDIRECT_LOG_OUTGOING 0x1 -#define SMBDIRECT_LOG_INCOMING 0x2 -#define SMBDIRECT_LOG_READ 0x4 -#define SMBDIRECT_LOG_WRITE 0x8 -#define SMBDIRECT_LOG_RDMA_SEND 0x10 -#define SMBDIRECT_LOG_RDMA_RECV 0x20 -#define SMBDIRECT_LOG_KEEP_ALIVE 0x40 -#define SMBDIRECT_LOG_RDMA_EVENT 0x80 -#define SMBDIRECT_LOG_RDMA_MR 0x100 -#define SMBDIRECT_LOG_RDMA_RW 0x200 -#define SMBDIRECT_LOG_NEGOTIATE 0x400 void *private_ptr; bool (*needed)(struct smbdirect_socket *sc, void *private_ptr,