]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
smb: server: don't use delayed_work for post_recv_credits_work
authorStefan Metzmacher <metze@samba.org>
Fri, 8 Aug 2025 15:55:17 +0000 (17:55 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 2 Oct 2025 11:40:37 +0000 (13:40 +0200)
[ Upstream commit 1cde0a74a7a8951b3097417847a458e557be0b5b ]

If we are using a hardcoded delay of 0 there's no point in
using delayed_work it only adds confusion.

The client also uses a normal work_struct and now
it is easier to move it to the common smbdirect_socket.

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
Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/smb/server/transport_rdma.c

index 323b8a401a8c008f3308103720cc0998687ccf21..84b5b2f5df998cbb7ee17ee69421f0a314c90ced 100644 (file)
@@ -147,7 +147,7 @@ struct smb_direct_transport {
        wait_queue_head_t       wait_send_pending;
        atomic_t                send_pending;
 
-       struct delayed_work     post_recv_credits_work;
+       struct work_struct      post_recv_credits_work;
        struct work_struct      send_immediate_work;
        struct work_struct      disconnect_work;
 
@@ -365,8 +365,8 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)
 
        spin_lock_init(&t->lock_new_recv_credits);
 
-       INIT_DELAYED_WORK(&t->post_recv_credits_work,
-                         smb_direct_post_recv_credits);
+       INIT_WORK(&t->post_recv_credits_work,
+                 smb_direct_post_recv_credits);
        INIT_WORK(&t->send_immediate_work, smb_direct_send_immediate_work);
        INIT_WORK(&t->disconnect_work, smb_direct_disconnect_rdma_work);
 
@@ -393,7 +393,7 @@ static void free_transport(struct smb_direct_transport *t)
                   atomic_read(&t->send_pending) == 0);
 
        cancel_work_sync(&t->disconnect_work);
-       cancel_delayed_work_sync(&t->post_recv_credits_work);
+       cancel_work_sync(&t->post_recv_credits_work);
        cancel_work_sync(&t->send_immediate_work);
 
        if (t->qp) {
@@ -609,8 +609,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
                        wake_up_interruptible(&t->wait_send_credits);
 
                if (is_receive_credit_post_required(receive_credits, avail_recvmsg_count))
-                       mod_delayed_work(smb_direct_wq,
-                                        &t->post_recv_credits_work, 0);
+                       queue_work(smb_direct_wq, &t->post_recv_credits_work);
 
                if (data_length) {
                        enqueue_reassembly(t, recvmsg, (int)data_length);
@@ -767,8 +766,7 @@ again:
                st->count_avail_recvmsg += queue_removed;
                if (is_receive_credit_post_required(st->recv_credits, st->count_avail_recvmsg)) {
                        spin_unlock(&st->receive_credit_lock);
-                       mod_delayed_work(smb_direct_wq,
-                                        &st->post_recv_credits_work, 0);
+                       queue_work(smb_direct_wq, &st->post_recv_credits_work);
                } else {
                        spin_unlock(&st->receive_credit_lock);
                }
@@ -795,7 +793,7 @@ read_rfc1002_done:
 static void smb_direct_post_recv_credits(struct work_struct *work)
 {
        struct smb_direct_transport *t = container_of(work,
-               struct smb_direct_transport, post_recv_credits_work.work);
+               struct smb_direct_transport, post_recv_credits_work);
        struct smb_direct_recvmsg *recvmsg;
        int receive_credits, credits = 0;
        int ret;
@@ -1676,7 +1674,7 @@ static int smb_direct_prepare_negotiation(struct smb_direct_transport *t)
                goto out_err;
        }
 
-       smb_direct_post_recv_credits(&t->post_recv_credits_work.work);
+       smb_direct_post_recv_credits(&t->post_recv_credits_work);
        return 0;
 out_err:
        put_recvmsg(t, recvmsg);