summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNamjae Jeon <linkinjeon@kernel.org>2023-12-19 00:34:52 +0900
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-12-23 10:42:00 +0100
commit5e1f31378a811c1b3b6dabd14a75acdc77af62bd (patch)
tree4961478cb7cccc71445a734ae6e93a4e0a064934
parentc21d0445088dcc5d83e9983a0aadfc4bd5e73d16 (diff)
downloadlinux-5e1f31378a811c1b3b6dabd14a75acdc77af62bd.tar.gz
linux-5e1f31378a811c1b3b6dabd14a75acdc77af62bd.tar.bz2
linux-5e1f31378a811c1b3b6dabd14a75acdc77af62bd.zip
ksmbd: release interim response after sending status pending response
[ Upstream commit 2a3f7857ec742e212d6cee7fbbf7b0e2ae7f5161 ] Add missing release async id and delete interim response entry after sending status pending response. This only cause when smb2 lease is enable. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/ksmbd/ksmbd_work.c3
-rw-r--r--fs/ksmbd/oplock.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/fs/ksmbd/ksmbd_work.c b/fs/ksmbd/ksmbd_work.c
index 2510b9f3c8c1..d7c676c151e2 100644
--- a/fs/ksmbd/ksmbd_work.c
+++ b/fs/ksmbd/ksmbd_work.c
@@ -56,6 +56,9 @@ void ksmbd_free_work_struct(struct ksmbd_work *work)
kfree(work->tr_buf);
kvfree(work->request_buf);
kfree(work->iov);
+ if (!list_empty(&work->interim_entry))
+ list_del(&work->interim_entry);
+
if (work->async_id)
ksmbd_release_id(&work->conn->async_ida, work->async_id);
kmem_cache_free(work_cache, work);
diff --git a/fs/ksmbd/oplock.c b/fs/ksmbd/oplock.c
index 13185c74b912..1cf2d2a3746a 100644
--- a/fs/ksmbd/oplock.c
+++ b/fs/ksmbd/oplock.c
@@ -833,7 +833,8 @@ static int smb2_lease_break_noti(struct oplock_info *opinfo)
interim_entry);
setup_async_work(in_work, NULL, NULL);
smb2_send_interim_resp(in_work, STATUS_PENDING);
- list_del(&in_work->interim_entry);
+ list_del_init(&in_work->interim_entry);
+ release_async_work(in_work);
}
INIT_WORK(&work->work, __smb2_lease_break_noti);
ksmbd_queue_work(work);