summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2025-09-19 09:52:35 +0200
committerSteve French <stfrench@microsoft.com>2026-04-15 21:58:23 -0500
commit0911d32ba20657c1ceafeab83442ef1f24cdff57 (patch)
tree5a29dd38b6fbab936ea199101713d7a6fcb02bec
parentbe0ac9f59f4c7d3399388f8ec90137c5fed1fcd0 (diff)
downloadlwn-0911d32ba20657c1ceafeab83442ef1f24cdff57.tar.gz
lwn-0911d32ba20657c1ceafeab83442ef1f24cdff57.zip
smb: server: make use of smbdirect_socket_wait_for_credits()
This will allow us to share more common code between client and server soon. Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> 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>
-rw-r--r--fs/smb/server/transport_rdma.c58
1 files changed, 24 insertions, 34 deletions
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index 40ae110b6abf..3b052ac0df54 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -910,27 +910,6 @@ release_credit:
return ret;
}
-static int wait_for_credits(struct smbdirect_socket *sc,
- wait_queue_head_t *waitq, atomic_t *total_credits,
- int needed)
-{
- int ret;
-
- do {
- if (atomic_sub_return(needed, total_credits) >= 0)
- return 0;
-
- atomic_add(needed, total_credits);
- ret = wait_event_interruptible(*waitq,
- atomic_read(total_credits) >= needed ||
- sc->status != SMBDIRECT_SOCKET_CONNECTED);
-
- if (sc->status != SMBDIRECT_SOCKET_CONNECTED)
- return -ENOTCONN;
- else if (ret < 0)
- return ret;
- } while (true);
-}
static int wait_for_send_bcredit(struct smbdirect_socket *sc,
struct smbdirect_send_batch *send_ctx)
@@ -940,10 +919,12 @@ static int wait_for_send_bcredit(struct smbdirect_socket *sc,
if (send_ctx->credit)
return 0;
- ret = wait_for_credits(sc,
- &sc->send_io.bcredits.wait_queue,
- &sc->send_io.bcredits.count,
- 1);
+ ret = smbdirect_socket_wait_for_credits(sc,
+ SMBDIRECT_SOCKET_CONNECTED,
+ -ENOTCONN,
+ &sc->send_io.bcredits.wait_queue,
+ &sc->send_io.bcredits.count,
+ 1);
if (ret)
return ret;
@@ -962,10 +943,12 @@ static int wait_for_send_lcredit(struct smbdirect_socket *sc,
return ret;
}
- return wait_for_credits(sc,
- &sc->send_io.lcredits.wait_queue,
- &sc->send_io.lcredits.count,
- 1);
+ return smbdirect_socket_wait_for_credits(sc,
+ SMBDIRECT_SOCKET_CONNECTED,
+ -ENOTCONN,
+ &sc->send_io.lcredits.wait_queue,
+ &sc->send_io.lcredits.count,
+ 1);
}
static int wait_for_send_credits(struct smbdirect_socket *sc,
@@ -980,15 +963,22 @@ static int wait_for_send_credits(struct smbdirect_socket *sc,
return ret;
}
- return wait_for_credits(sc, &sc->send_io.credits.wait_queue, &sc->send_io.credits.count, 1);
+ return smbdirect_socket_wait_for_credits(sc,
+ SMBDIRECT_SOCKET_CONNECTED,
+ -ENOTCONN,
+ &sc->send_io.credits.wait_queue,
+ &sc->send_io.credits.count,
+ 1);
}
static int wait_for_rw_credits(struct smbdirect_socket *sc, int credits)
{
- return wait_for_credits(sc,
- &sc->rw_io.credits.wait_queue,
- &sc->rw_io.credits.count,
- credits);
+ return smbdirect_socket_wait_for_credits(sc,
+ SMBDIRECT_SOCKET_CONNECTED,
+ -ENOTCONN,
+ &sc->rw_io.credits.wait_queue,
+ &sc->rw_io.credits.count,
+ credits);
}
static int calc_rw_credits(struct smbdirect_socket *sc,