summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNamjae Jeon <linkinjeon@kernel.org>2023-11-22 23:00:22 +0900
committerSteve French <stfrench@microsoft.com>2023-11-23 20:50:45 -0600
commit2a3f7857ec742e212d6cee7fbbf7b0e2ae7f5161 (patch)
treecb977fcc3956030e17d64cf7a22c5ef624626758 /fs
parent2e450920d58b4991a436c8cecf3484bcacd8e535 (diff)
downloadlinux-stable-2a3f7857ec742e212d6cee7fbbf7b0e2ae7f5161.tar.gz
linux-stable-2a3f7857ec742e212d6cee7fbbf7b0e2ae7f5161.tar.bz2
linux-stable-2a3f7857ec742e212d6cee7fbbf7b0e2ae7f5161.zip
ksmbd: release interim response after sending status pending response
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>
Diffstat (limited to 'fs')
-rw-r--r--fs/smb/server/ksmbd_work.c3
-rw-r--r--fs/smb/server/oplock.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/fs/smb/server/ksmbd_work.c b/fs/smb/server/ksmbd_work.c
index 2510b9f3c8c1..d7c676c151e2 100644
--- a/fs/smb/server/ksmbd_work.c
+++ b/fs/smb/server/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/smb/server/oplock.c b/fs/smb/server/oplock.c
index 9bc0103720f5..50c68beb71d6 100644
--- a/fs/smb/server/oplock.c
+++ b/fs/smb/server/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);