From: Ralph Boehme Date: Mon, 9 Mar 2020 10:18:23 +0000 (+0100) Subject: smbd: reuse close_free_pending_aio() in close_directory() X-Git-Tag: ldb-2.2.0~1475 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ae4f368c6c8d2c8c7aa34069007a984055df0da;p=thirdparty%2Fsamba.git 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 --- 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