]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ksmbd: move setting SMB2_FLAGS_ASYNC_COMMAND and AsyncId
authorNamjae Jeon <linkinjeon@kernel.org>
Wed, 22 Nov 2023 14:00:59 +0000 (23:00 +0900)
committerSteve French <stfrench@microsoft.com>
Fri, 24 Nov 2023 02:50:45 +0000 (20:50 -0600)
Directly set SMB2_FLAGS_ASYNC_COMMAND flags and AsyncId in smb2 header of
interim response instead of current response header.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/smb2pdu.c

index 8cc01c3a763bdd633cb4c209393bb22ad6d9e52f..427dd2295f16df986ff77ccf4dc55abef937db40 100644 (file)
@@ -657,13 +657,9 @@ smb2_get_name(const char *src, const int maxlen, struct nls_table *local_nls)
 
 int setup_async_work(struct ksmbd_work *work, void (*fn)(void **), void **arg)
 {
-       struct smb2_hdr *rsp_hdr;
        struct ksmbd_conn *conn = work->conn;
        int id;
 
-       rsp_hdr = ksmbd_resp_buf_next(work);
-       rsp_hdr->Flags |= SMB2_FLAGS_ASYNC_COMMAND;
-
        id = ksmbd_acquire_async_msg_id(&conn->async_ida);
        if (id < 0) {
                pr_err("Failed to alloc async message id\n");
@@ -671,7 +667,6 @@ int setup_async_work(struct ksmbd_work *work, void (*fn)(void **), void **arg)
        }
        work->asynchronous = true;
        work->async_id = id;
-       rsp_hdr->Id.AsyncId = cpu_to_le64(id);
 
        ksmbd_debug(SMB,
                    "Send interim Response to inform async request id : %d\n",
@@ -723,6 +718,8 @@ void smb2_send_interim_resp(struct ksmbd_work *work, __le32 status)
               __SMB2_HEADER_STRUCTURE_SIZE);
 
        rsp_hdr = smb2_get_msg(in_work->response_buf);
+       rsp_hdr->Flags |= SMB2_FLAGS_ASYNC_COMMAND;
+       rsp_hdr->Id.AsyncId = cpu_to_le64(work->async_id);
        smb2_set_err_rsp(in_work);
        rsp_hdr->Status = status;