From bc539d8104fcf7954331df1d4385ad84343c919a Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Tue, 8 Jan 2019 07:38:04 +0100 Subject: [PATCH] vfs_default: add sync fallback to pread_send/recv Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- source3/modules/vfs_default.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 256f173aec5..4ca7578cc53 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -742,8 +742,18 @@ static void vfs_pread_done(struct tevent_req *subreq) TALLOC_FREE(subreq); SMBPROFILE_BYTES_ASYNC_END(state->profile_bytes); talloc_set_destructor(state, NULL); - if (tevent_req_error(req, ret)) { - return; + if (ret != 0) { + if (ret != EAGAIN) { + tevent_req_error(req, ret); + return; + } + /* + * If we get EAGAIN from pthreadpool_tevent_job_recv() this + * means the lower level pthreadpool failed to create a new + * thread. Fallback to sync processing in that case to allow + * some progress for the client. + */ + vfs_pread_do(state); } tevent_req_done(req); -- 2.11.4.GIT