smb: server: make use of smbdirect_socket.status_wait

This will allow us to have common helper functions 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>
This commit is contained in:
Stefan Metzmacher 2025-08-07 11:20:55 +02:00 committed by Steve French
parent a7eef6144c
commit c82a53211a

View File

@ -92,8 +92,6 @@ struct smb_direct_transport {
struct smbdirect_socket socket;
wait_queue_head_t wait_status;
spinlock_t receive_credit_lock;
int recv_credits;
int recv_credit_target;
@ -307,7 +305,7 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)
spin_lock_init(&sc->recv_io.free.lock);
sc->status = SMBDIRECT_SOCKET_CREATED;
init_waitqueue_head(&t->wait_status);
init_waitqueue_head(&sc->status_wait);
spin_lock_init(&sc->recv_io.reassembly.lock);
INIT_LIST_HEAD(&sc->recv_io.reassembly.list);
@ -518,7 +516,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
sc->recv_io.reassembly.full_packet_received = true;
sc->status = SMBDIRECT_SOCKET_CONNECTED;
enqueue_reassembly(t, recvmsg, 0);
wake_up(&t->wait_status);
wake_up(&sc->status_wait);
return;
case SMBDIRECT_EXPECT_DATA_TRANSFER: {
struct smbdirect_data_transfer *data_transfer =
@ -1522,7 +1520,7 @@ static void smb_direct_disconnect(struct ksmbd_transport *t)
ksmbd_debug(RDMA, "Disconnecting cm_id=%p\n", sc->rdma.cm_id);
smb_direct_disconnect_rdma_work(&st->disconnect_work);
wait_event_interruptible(st->wait_status,
wait_event_interruptible(sc->status_wait,
sc->status == SMBDIRECT_SOCKET_DISCONNECTED);
free_transport(st);
}
@ -1549,7 +1547,7 @@ static int smb_direct_cm_handler(struct rdma_cm_id *cm_id,
switch (event->event) {
case RDMA_CM_EVENT_ESTABLISHED: {
sc->status = SMBDIRECT_SOCKET_CONNECTED;
wake_up(&t->wait_status);
wake_up(&sc->status_wait);
break;
}
case RDMA_CM_EVENT_DEVICE_REMOVAL:
@ -1557,14 +1555,14 @@ static int smb_direct_cm_handler(struct rdma_cm_id *cm_id,
ib_drain_qp(sc->ib.qp);
sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
wake_up_all(&t->wait_status);
wake_up_all(&sc->status_wait);
wake_up_all(&sc->recv_io.reassembly.wait_queue);
wake_up_all(&t->wait_send_credits);
break;
}
case RDMA_CM_EVENT_CONNECT_ERROR: {
sc->status = SMBDIRECT_SOCKET_DISCONNECTED;
wake_up_all(&t->wait_status);
wake_up_all(&sc->status_wait);
break;
}
default:
@ -1997,7 +1995,7 @@ static int smb_direct_prepare(struct ksmbd_transport *t)
int ret;
ksmbd_debug(RDMA, "Waiting for SMB_DIRECT negotiate request\n");
ret = wait_event_interruptible_timeout(st->wait_status,
ret = wait_event_interruptible_timeout(sc->status_wait,
st->negotiation_requested ||
sc->status == SMBDIRECT_SOCKET_DISCONNECTED,
SMB_DIRECT_NEGOTIATE_TIMEOUT * HZ);