From 0ae4f368c6c8d2c8c7aa34069007a984055df0da Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Mon, 9 Mar 2020 11:18:23 +0100 Subject: [PATCH] smbd: reuse close_free_pending_aio() in close_directory() A directory fsp can have outstanding aio requests as well. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14301 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Mon Mar 9 19:34:27 UTC 2020 on sn-devel-184 --- source3/smbd/close.c | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 639c4844b35..73f9c75762d 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -1165,30 +1165,7 @@ static NTSTATUS close_directory(struct smb_request *req, files_struct *fsp, notify_status = NT_STATUS_OK; } - if (fsp->num_aio_requests != 0) { - if (close_type != SHUTDOWN_CLOSE) { - /* - * We panic here because if we close() the fd while we - * have outstanding async I/O requests, an async IO - * request might use the fd. For directories the fd is - * read-only, so this is not as bad as with files, but - * still, better safe then sorry. - */ - DBG_ERR("fsp->num_aio_requests=%u\n", - fsp->num_aio_requests); - smb_panic("close with outstanding aio requests"); - return NT_STATUS_INTERNAL_ERROR; - } - - while (fsp->num_aio_requests != 0) { - /* - * The destructor of the req will remove itself from the - * fsp. Don't use TALLOC_FREE here, this will overwrite - * what the destructor just wrote into aio_requests[0]. - */ - talloc_free(fsp->aio_requests[0]); - } - } + close_free_pending_aio(fsp, close_type); /* * NT can set delete_on_close of the last open