]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ksmbd: count all requests in req_running counter
authorMarios Makassikis <mmakassikis@freebox.fr>
Sat, 14 Dec 2024 03:16:45 +0000 (12:16 +0900)
committerSteve French <stfrench@microsoft.com>
Mon, 16 Dec 2024 04:20:03 +0000 (22:20 -0600)
This changes the semantics of req_running to count all in-flight
requests on a given connection, rather than the number of elements
in the conn->request list. The latter is used only in smb2_cancel,
and the counter is not used

Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/connection.c

index c14dd72e1b301ef87f3c4d21ed11b35485acb3f4..be9656d524a4c3918e9dcc581013ece0c67feb0c 100644 (file)
@@ -120,8 +120,8 @@ void ksmbd_conn_enqueue_request(struct ksmbd_work *work)
        if (conn->ops->get_cmd_val(work) != SMB2_CANCEL_HE)
                requests_queue = &conn->requests;
 
+       atomic_inc(&conn->req_running);
        if (requests_queue) {
-               atomic_inc(&conn->req_running);
                spin_lock(&conn->request_lock);
                list_add_tail(&work->request_entry, requests_queue);
                spin_unlock(&conn->request_lock);
@@ -132,11 +132,12 @@ void ksmbd_conn_try_dequeue_request(struct ksmbd_work *work)
 {
        struct ksmbd_conn *conn = work->conn;
 
+       atomic_dec(&conn->req_running);
+
        if (list_empty(&work->request_entry) &&
            list_empty(&work->async_request_entry))
                return;
 
-       atomic_dec(&conn->req_running);
        spin_lock(&conn->request_lock);
        list_del_init(&work->request_entry);
        spin_unlock(&conn->request_lock);